<?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>125531</bug_id>
          
          <creation_ts>2013-12-10 12:37:22 -0800</creation_ts>
          <short_desc>Get rid of DFG forward exiting</short_desc>
          <delta_ts>2013-12-29 13:47:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>125543</dependson>
    
    <dependson>125552</dependson>
    
    <dependson>125553</dependson>
    
    <dependson>126218</dependson>
          <blocked>125523</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>958461</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-10 12:37:22 -0800</bug_when>
    <thetext>Everyone should exit backwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958475</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-10 13:03:24 -0800</bug_when>
    <thetext>The plan:

- SetLocals: split up MovHint from SetLocal. When we lower bytecode instruction B to nodes N1..Nn, we place a MovHint at the end of the node sequence for B, and then we place a SetLocal at the start of the node sequence for B+1.  We do this by having the bytecode parser keep a list of deferred SetLocal&apos;s.  The MovHints shouldn&apos;t have VariableAccessData.  SetLocals should never turn into MovHints.  For flushed and captured locals, we rely on the fact that exiting between the MovHint and SetLocal will anyway cause the value to get flushed.  For captured locals the situation is actually particularly humorous because will have a SetLocal associated with the bytecode instruction *after* the captured_mov.  That&apos;s all fine.

- UInt32ToDouble: reveal it in bytecode.  No more forward exit, problem solved.

- DoubleAsInt32: we could be clever for this one.  But it&apos;s not worth it.  Just make it exit backwards and place Phantoms right after it.

- GetByVal on Uint32Array: just use a backwards exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962654</commentid>
    <comment_count>2</comment_count>
      <attachid>219944</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-23 17:10:17 -0800</bug_when>
    <thetext>Created attachment 219944
first parts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962759</commentid>
    <comment_count>3</comment_count>
      <attachid>219968</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-24 05:59:01 -0800</bug_when>
    <thetext>Created attachment 219968
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962781</commentid>
    <comment_count>4</comment_count>
      <attachid>219974</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-24 11:32:38 -0800</bug_when>
    <thetext>Created attachment 219974
got something that makes some sense

But I think that to really do this right, I need to finally fix the PhantomArguments nonsense.  https://bugs.webkit.org/show_bug.cgi?id=126218</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962855</commentid>
    <comment_count>5</comment_count>
      <attachid>219998</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 11:18:25 -0800</bug_when>
    <thetext>Created attachment 219998
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962883</commentid>
    <comment_count>6</comment_count>
      <attachid>220006</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 15:39:15 -0800</bug_when>
    <thetext>Created attachment 220006
passing some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962893</commentid>
    <comment_count>7</comment_count>
      <attachid>220009</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 15:44:56 -0800</bug_when>
    <thetext>Created attachment 220009
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962906</commentid>
    <comment_count>8</comment_count>
      <attachid>220009</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-12-25 16:07:03 -0800</bug_when>
    <thetext>Comment on attachment 220009
rebased

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

Yay code death!

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:586
&gt; +        case MovHint:
&gt; +        case ZombieHint:

Is it okay to hit these two now? Previously we would have error&apos;d out</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962908</commentid>
    <comment_count>9</comment_count>
      <attachid>220009</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 16:08:32 -0800</bug_when>
    <thetext>Comment on attachment 220009
rebased

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:586
&gt;&gt; +        case ZombieHint:
&gt; 
&gt; Is it okay to hit these two now? Previously we would have error&apos;d out

Yeah that&apos;s the whole point of this patch.  ByteCodeParser now inserts MovHint&apos;s.  That&apos;s why there is so much code death.  That of course implies that phases shouldn&apos;t assert that there aren&apos;t any MovHints.

I do the same for ZombieHint even though ByteCodeParser doesn&apos;t insert it, just because asserting otherwise doesn&apos;t buy anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962909</commentid>
    <comment_count>10</comment_count>
      <attachid>220011</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 16:17:29 -0800</bug_when>
    <thetext>Created attachment 220011
it&apos;s passing *so* many tests

I think that it&apos;s all basically in place.  I just need to port to 32-bit (easy) and to FTL (more code death!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962910</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 16:18:19 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=220011) [details]
&gt; it&apos;s passing *so* many tests
&gt; 
&gt; I think that it&apos;s all basically in place.  I just need to port to 32-bit (easy) and to FTL (more code death!).

Oh yeah, and I still have to check if this makes the tests from https://bug-125523-attachments.webkit.org/attachment.cgi?id=219283 pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963011</commentid>
    <comment_count>12</comment_count>
      <attachid>220033</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-26 09:39:00 -0800</bug_when>
    <thetext>Created attachment 220033
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963012</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-26 09:40:58 -0800</bug_when>
    <thetext>Attachment 220033 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/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBackwardsPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDCEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLICMPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGMinifiedNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeFlags.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeFlags.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExit.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitBase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitBase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSafeToExecute.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVariableEventStream.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.h&apos;, u&apos;Source/JavaScriptCore/tests/stress/dead-int32-to-double.js&apos;, u&apos;Source/JavaScriptCore/tests/stress/dead-uint32-to-number.js&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/JavaScriptCore/dfg/DFGDCEPhase.cpp:212:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 25 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>963018</commentid>
    <comment_count>14</comment_count>
      <attachid>220033</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-26 10:29:35 -0800</bug_when>
    <thetext>Comment on attachment 220033
the patch

Clearing r?.  Needs some more work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963023</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-26 12:09:20 -0800</bug_when>
    <thetext>I still have some performance regressions to investigate.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r161072)
&quot;NoMoreForward&quot; at /Volumes/Data/fromMiniMe/tertiary/OpenSource/WebKitBuild/Release/jsc (r161072)

Collected 10 samples per benchmark/VM, with 10 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               NoMoreForward                                   
SunSpider:
   3d-cube                                            7.7477+-0.0655     ?      7.8040+-0.0684        ?
   3d-morph                                           8.8383+-0.0580     ?      8.9054+-0.0531        ?
   3d-raytrace                                        8.9696+-0.1516     ?      9.1067+-0.1551        ? might be 1.0153x slower
   access-binary-trees                                2.1243+-0.0205     ?      2.1502+-0.0291        ? might be 1.0122x slower
   access-fannkuch                                    7.9958+-0.0946     !      8.2260+-0.0626        ! definitely 1.0288x slower
   access-nbody                                       4.2594+-0.0067     !      4.2879+-0.0114        ! definitely 1.0067x slower
   access-nsieve                                      5.0340+-0.0481            5.0122+-0.0430        
   bitops-3bit-bits-in-byte                           1.8939+-0.0178     ?      1.9051+-0.0063        ?
   bitops-bits-in-byte                                7.1334+-0.1183     ?      7.1619+-0.1152        ?
   bitops-bitwise-and                                 3.0377+-0.0584     ?      3.0417+-0.0516        ?
   bitops-nsieve-bits                                 4.6469+-0.0057     !      4.7000+-0.0050        ! definitely 1.0114x slower
   controlflow-recursive                              3.1760+-0.0202     ?      3.2100+-0.0231        ? might be 1.0107x slower
   crypto-aes                                         5.5861+-0.0542     ?      5.6480+-0.0338        ? might be 1.0111x slower
   crypto-md5                                         3.3692+-0.0226     !      3.4390+-0.0236        ! definitely 1.0207x slower
   crypto-sha1                                        3.0251+-0.0303     ?      3.0389+-0.0060        ?
   date-format-tofte                                 12.0573+-0.1279           11.8568+-0.2270          might be 1.0169x faster
   date-format-xparb                                  8.7362+-0.1108            8.6558+-0.0770        
   math-cordic                                        4.2879+-0.0179     ?      4.3172+-0.0228        ?
   math-partial-sums                                 10.2010+-0.1525     ?     10.2306+-0.1136        ?
   math-spectral-norm                                 2.7587+-0.0068     !      2.8089+-0.0131        ! definitely 1.0182x slower
   regexp-dna                                        12.9280+-0.1087     ?     13.0476+-0.1113        ?
   string-base64                                      5.7965+-0.0799     !      5.9296+-0.0330        ! definitely 1.0230x slower
   string-fasta                                      10.5137+-0.0996           10.4503+-0.0870        
   string-tagcloud                                   15.5365+-0.1118           15.4937+-0.1666        
   string-unpack-code                                31.4263+-0.1543     ?     31.5493+-0.4988        ?
   string-validate-input                              7.0883+-0.0931     ?      7.1331+-0.1378        ?

   &lt;arithmetic&gt; *                                     7.6218+-0.0197     ?      7.6581+-0.0203        ? might be 1.0048x slower
   &lt;geometric&gt;                                        6.1040+-0.0154     !      6.1457+-0.0123        ! definitely 1.0068x slower
   &lt;harmonic&gt;                                         5.0086+-0.0125     !      5.0509+-0.0131        ! definitely 1.0084x slower

                                                        TipOfTree               NoMoreForward                                   
LongSpider:
   3d-cube                                         2687.1113+-6.1242         2680.3029+-5.6173        
   3d-morph                                        1499.6746+-1.3573     ?   1499.8336+-1.0011        ?
   3d-raytrace                                     1517.9514+-21.0093        1510.8118+-5.6789        
   access-binary-trees                             2455.1927+-15.6564    ?   2471.5546+-14.5309       ?
   access-fannkuch                                  665.4782+-0.3369     !    671.7787+-4.0167        ! definitely 1.0095x slower
   access-nbody                                    1496.0047+-0.8569     ?   1496.3180+-1.0250        ?
   access-nsieve                                   1548.7951+-4.6670     ?   1551.2909+-2.6881        ?
   bitops-3bit-bits-in-byte                         125.9864+-0.0956     ?    126.0005+-0.1283        ?
   bitops-bits-in-byte                              603.3671+-4.8342          598.4732+-4.1046        
   bitops-nsieve-bits                              1049.4697+-0.4431     ?   1050.0849+-0.6175        ?
   controlflow-recursive                           1473.0839+-0.4837         1472.3620+-0.7985        
   crypto-aes                                      1661.9899+-3.5560     !   1690.0070+-3.3103        ! definitely 1.0169x slower
   crypto-md5                                      1164.5818+-0.8966     !   1238.1303+-1.0405        ! definitely 1.0632x slower
   crypto-sha1                                     1611.6601+-18.5114    ?   1625.2485+-5.9088        ?
   date-format-tofte                               1230.4447+-10.3433    ^   1206.8781+-4.0405        ^ definitely 1.0195x faster
   date-format-xparb                               1484.8765+-13.0692    ^   1445.6019+-9.1896        ^ definitely 1.0272x faster
   math-cordic                                     1737.2906+-2.4877     ?   1738.6585+-2.2659        ?
   math-partial-sums                               1308.6686+-2.0908         1308.5303+-1.8876        
   math-spectral-norm                              1826.3281+-1.3018         1825.7732+-0.2902        
   string-base64                                    591.2958+-2.5032     ?    595.3154+-2.3568        ?
   string-fasta                                     995.9428+-3.7675     ?   1001.3261+-5.0387        ?
   string-tagcloud                                  392.1862+-1.7731     ^    388.8681+-1.4390        ^ definitely 1.0085x faster

   &lt;arithmetic&gt;                                    1323.9718+-1.6218     !   1326.9613+-0.9489        ! definitely 1.0023x slower
   &lt;geometric&gt; *                                   1130.5281+-1.3345     !   1132.9652+-0.7583        ! definitely 1.0022x slower
   &lt;harmonic&gt;                                       819.4104+-0.8964     ?    820.3031+-0.6844        ? might be 1.0011x slower

                                                        TipOfTree               NoMoreForward                                   
V8Spider:
   crypto                                            79.3324+-0.2074     !     80.0579+-0.1768        ! definitely 1.0091x slower
   deltablue                                         98.2991+-0.8466     !    100.1585+-0.8703        ! definitely 1.0189x slower
   earley-boyer                                      73.1583+-0.9094     !     75.7814+-0.4329        ! definitely 1.0359x slower
   raytrace                                          44.0949+-0.2261     !     45.9286+-0.3006        ! definitely 1.0416x slower
   regexp                                           100.4728+-0.6226     ?    100.5200+-0.1890        ?
   richards                                         134.7356+-1.5732          134.2745+-1.1417        
   splay                                             46.0965+-0.3838     ?     47.1427+-1.3224        ? might be 1.0227x slower

   &lt;arithmetic&gt;                                      82.3128+-0.2474     !     83.4091+-0.2853        ! definitely 1.0133x slower
   &lt;geometric&gt; *                                     76.7532+-0.1966     !     78.1133+-0.3346        ! definitely 1.0177x slower
   &lt;harmonic&gt;                                        71.2801+-0.1825     !     72.8575+-0.4323        ! definitely 1.0221x slower

                                                        TipOfTree               NoMoreForward                                   
Octane and V8v7:
   encrypt                                           0.46544+-0.00027    !     0.46913+-0.00093       ! definitely 1.0079x slower
   decrypt                                           8.62226+-0.09987          8.61537+-0.00791       
   deltablue                                x2       0.56304+-0.00545    ?     0.56964+-0.00791       ? might be 1.0117x slower
   earley                                            0.90549+-0.00742    ?     0.91750+-0.00601       ? might be 1.0133x slower
   boyer                                            12.46417+-0.03947    !    12.93956+-0.05310       ! definitely 1.0381x slower
   raytrace                                 x2       4.28739+-0.02931    ?     4.35041+-0.06543       ? might be 1.0147x slower
   regexp                                   x2      32.93311+-0.21436         32.90265+-0.12887       
   richards                                 x2       0.43088+-0.00764    ?     0.44163+-0.00548       ? might be 1.0250x slower
   splay                                    x2       0.64101+-0.01104          0.63656+-0.00364       
   navier-stokes                            x2      10.69854+-0.00584    !    10.78366+-0.00282       ! definitely 1.0080x slower
   closure                                           0.43408+-0.00082    !     0.43603+-0.00074       ! definitely 1.0045x slower
   jquery                                            6.38149+-0.03133          6.36050+-0.01041       
   gbemu                                    x2      71.40098+-1.05727         70.68938+-0.34214         might be 1.0101x faster
   mandreel                                 x2     136.42504+-0.55428    ?   136.72298+-0.16404       ?
   pdfjs                                    x2     102.04133+-0.35905    ^   101.22505+-0.20627       ^ definitely 1.0081x faster
   box2d                                    x2      35.01198+-0.37891    ?    35.07940+-0.13972       ?

V8v7:
   &lt;arithmetic&gt;                                      7.59783+-0.03294    ?     7.64442+-0.01865       ? might be 1.0061x slower
   &lt;geometric&gt; *                                     2.51091+-0.01153    !     2.53612+-0.00768       ! definitely 1.0100x slower
   &lt;harmonic&gt;                                        1.03357+-0.00834    ?     1.04545+-0.00589       ? might be 1.0115x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.46690+-0.12749         31.40541+-0.03596         might be 1.0020x faster
   &lt;geometric&gt; *                                     6.96917+-0.02671    ?     7.00508+-0.01477       ? might be 1.0052x slower
   &lt;harmonic&gt;                                        1.43961+-0.00994    ?     1.45456+-0.00704       ? might be 1.0104x slower

                                                        TipOfTree               NoMoreForward                                   
Kraken:
   ai-astar                                          494.227+-0.804      !     499.995+-4.909         ! definitely 1.0117x slower
   audio-beat-detection                              224.197+-1.173      !     228.236+-2.271         ! definitely 1.0180x slower
   audio-dft                                         290.598+-1.527            289.962+-0.837         
   audio-fft                                         130.681+-0.129      !     131.309+-0.251         ! definitely 1.0048x slower
   audio-oscillator                                  244.058+-0.396            243.848+-0.324         
   imaging-darkroom                                  286.226+-0.618            286.161+-0.510         
   imaging-desaturate                                158.360+-0.150      ?     158.485+-0.228         ?
   imaging-gaussian-blur                             362.678+-0.179      !     363.279+-0.302         ! definitely 1.0017x slower
   json-parse-financial                               80.266+-0.284      ?      81.052+-1.038         ?
   json-stringify-tinderbox                          103.755+-0.232      ?     104.104+-0.227         ?
   stanford-crypto-aes                                90.973+-0.411      !      93.992+-0.432         ! definitely 1.0332x slower
   stanford-crypto-ccm                               101.318+-0.761            100.943+-1.055         
   stanford-crypto-pbkdf2                            260.082+-2.108      ?     261.418+-1.031         ?
   stanford-crypto-sha256-iterative                  114.879+-0.493            114.336+-0.471         

   &lt;arithmetic&gt; *                                    210.164+-0.252      !     211.223+-0.493         ! definitely 1.0050x slower
   &lt;geometric&gt;                                       180.416+-0.207      !     181.393+-0.347         ! definitely 1.0054x slower
   &lt;harmonic&gt;                                        155.986+-0.173      !     157.002+-0.409         ! definitely 1.0065x slower

                                                        TipOfTree               NoMoreForward                                   
JSRegress:
   adapt-to-double-divide                            22.8042+-0.0961     ?     22.8468+-0.0777        ?
   aliased-arguments-getbyval                         1.0011+-0.0151     ?      1.0183+-0.0032        ? might be 1.0172x slower
   allocate-big-object                                3.0356+-0.0097     !      3.0737+-0.0167        ! definitely 1.0126x slower
   arity-mismatch-inlining                            0.9662+-0.0064     !      0.9829+-0.0057        ! definitely 1.0173x slower
   array-access-polymorphic-structure                10.4376+-0.3544           10.0325+-0.1296          might be 1.0404x faster
   array-nonarray-polymorhpic-access                 58.2338+-0.1714           58.0463+-0.2219        
   array-with-double-add                              5.7222+-0.0879     ?      5.7970+-0.0188        ? might be 1.0131x slower
   array-with-double-increment                        4.3060+-0.0595     ?      4.3683+-0.0105        ? might be 1.0145x slower
   array-with-double-mul-add                          6.8309+-0.0548     ?      6.8941+-0.0265        ?
   array-with-double-sum                              8.0272+-0.1116     ?      8.0797+-0.0377        ?
   array-with-int32-add-sub                          10.4290+-0.0460     ?     10.4942+-0.1256        ?
   array-with-int32-or-double-sum                     8.0125+-0.0731            7.9787+-0.1047        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    118.1131+-0.8454          118.0374+-1.2965        
   ArrayBuffer-DataView-alloc-long-lived             30.6087+-0.1267     ?     30.7952+-0.1732        ?
   ArrayBuffer-Int32Array-byteOffset                  6.2424+-0.1378            6.0867+-0.0533          might be 1.0256x faster
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    215.8761+-1.8303     ?    216.5015+-1.6644        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    165.7724+-0.9543     ?    166.7524+-0.9831        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    118.2743+-0.6912     ?    119.2394+-1.1310        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     48.5395+-0.2610     !     49.7598+-0.3603        ! definitely 1.0251x slower
   ArrayBuffer-Int8Array-alloc-long-lived            30.3642+-0.1388     !     30.7505+-0.1622        ! definitely 1.0127x slower
   ArrayBuffer-Int8Array-alloc                       26.3659+-0.2710     ?     26.5725+-0.2117        ?
   asmjs_bool_bug                                     9.2633+-0.1033            9.2190+-0.0759        
   basic-set                                         19.9261+-0.1190     ?     20.3165+-0.4320        ? might be 1.0196x slower
   big-int-mul                                        5.6289+-0.1977     !      6.0430+-0.0279        ! definitely 1.0736x slower
   boolean-test                                       4.4472+-0.0086     !      4.4889+-0.0197        ! definitely 1.0094x slower
   branch-fold                                        5.0073+-0.0160     ?      5.0132+-0.0075        ?
   by-val-generic                                    12.7380+-0.1388     ^     12.4039+-0.1768        ^ definitely 1.0269x faster
   captured-assignments                               0.6461+-0.0205     ?      0.6488+-0.0114        ?
   cast-int-to-double                                12.5385+-0.1219     ?     12.6116+-0.0658        ?
   cell-argument                                     16.3613+-0.3326           16.1082+-0.3328          might be 1.0157x faster
   cfg-simplify                                       3.9956+-0.0112     ?      4.0206+-0.0217        ?
   chain-custom-getter                              162.7431+-7.5380          160.2406+-5.6751          might be 1.0156x faster
   chain-getter-access                              496.6991+-5.0602     ?    497.0593+-4.0655        ?
   cmpeq-obj-to-obj-other                            12.9000+-0.4403     ^     12.0499+-0.3175        ^ definitely 1.0706x faster
   constant-test                                      8.9683+-0.1175     ?      9.0479+-0.0857        ?
   DataView-custom-properties                       125.4796+-0.7799          125.3826+-0.8890        
   delay-tear-off-arguments-strictmode                3.6424+-0.0062     !      3.6924+-0.0097        ! definitely 1.0137x slower
   destructuring-arguments-length                   176.2143+-1.2171     ?    176.5282+-1.2420        ?
   destructuring-arguments                            8.9885+-0.0788            8.9101+-0.0633        
   destructuring-swap                                 8.6646+-0.0640     ?      8.7525+-0.0527        ? might be 1.0101x slower
   direct-arguments-getbyval                          0.8694+-0.0051     ?      0.8967+-0.0312        ? might be 1.0313x slower
   double-get-by-val-out-of-bounds                    7.4979+-0.1009            7.4261+-0.0589        
   double-pollution-getbyval                         11.1429+-0.0657           11.0724+-0.0957        
   double-pollution-putbyoffset                       6.0551+-0.0296     ?      6.1104+-0.0272        ?
   double-to-int32-typed-array-no-inline              2.5860+-0.0073     !      2.6481+-0.0096        ! definitely 1.0240x slower
   double-to-int32-typed-array                        2.2361+-0.0271     !      2.3395+-0.0423        ! definitely 1.0462x slower
   double-to-uint32-typed-array-no-inline             2.7458+-0.0053     !      2.8321+-0.0254        ! definitely 1.0314x slower
   double-to-uint32-typed-array                       2.4729+-0.0307     !      2.5811+-0.0065        ! definitely 1.0437x slower
   empty-string-plus-int                             10.9704+-0.2005     ?     11.0245+-0.0641        ?
   emscripten-cube2hash                              55.5230+-0.3342     ?     55.6238+-0.4500        ?
   emscripten-memops                               7074.5014+-36.2745    ?   7112.5207+-92.2659       ?
   external-arguments-getbyval                        2.1418+-0.0162     ?      2.1692+-0.0237        ? might be 1.0128x slower
   external-arguments-putbyval                        3.0666+-0.0106     ?      3.1054+-0.0342        ? might be 1.0126x slower
   fixed-typed-array-storage-var-index                1.4052+-0.0038     !      1.4284+-0.0082        ! definitely 1.0165x slower
   fixed-typed-array-storage                          0.9940+-0.0042     ?      1.0324+-0.0358        ? might be 1.0386x slower
   Float32Array-matrix-mult                           6.5979+-0.0394     ?      6.6286+-0.0279        ?
   Float32Array-to-Float64Array-set                  93.3661+-0.5651           92.7816+-0.6265        
   Float64Array-alloc-long-lived                    103.7919+-0.8400          103.3107+-0.4230        
   Float64Array-to-Int16Array-set                   116.8621+-0.4076     ?    117.8234+-1.0954        ?
   fold-double-to-int                                20.5558+-0.2363     ?     20.7628+-0.1452        ? might be 1.0101x slower
   for-of-iterate-array-entries                       8.5566+-0.1032     ?      8.6473+-0.1208        ? might be 1.0106x slower
   for-of-iterate-array-keys                          3.4777+-0.0318            3.4653+-0.0341        
   for-of-iterate-array-values                        3.0015+-0.0818            2.9753+-0.0557        
   function-dot-apply                                 3.1788+-0.0093     ^      3.1453+-0.0126        ^ definitely 1.0106x faster
   function-test                                      4.9035+-0.0423            4.8976+-0.0554        
   get-by-id-chain-from-try-block                     7.9991+-0.1037            7.9137+-0.0770          might be 1.0108x faster
   get-by-id-proto-or-self                           25.8817+-0.2404     ?     26.1238+-0.2486        ?
   get-by-id-self-or-proto                           23.1910+-0.5496     ?     23.5511+-0.6282        ? might be 1.0155x slower
   get-by-val-out-of-bounds                           7.2849+-0.0901            7.2012+-0.0649          might be 1.0116x faster
   get_callee_monomorphic                             4.9301+-0.0292     ?      4.9861+-0.0356        ? might be 1.0114x slower
   get_callee_polymorphic                             4.6803+-0.0129     !      4.9943+-0.0217        ! definitely 1.0671x slower
   global-var-const-infer-fire-from-opt               1.0909+-0.0197            1.0803+-0.0361        
   global-var-const-infer                             0.8118+-0.0057     !      0.8255+-0.0078        ! definitely 1.0169x slower
   HashMap-put-get-iterate-keys                      42.0478+-0.2254     !     42.4932+-0.2126        ! definitely 1.0106x slower
   HashMap-put-get-iterate                           53.7629+-0.2044     !     54.6027+-0.2035        ! definitely 1.0156x slower
   HashMap-string-put-get-iterate                    50.6761+-0.3177     !     51.5645+-0.2001        ! definitely 1.0175x slower
   imul-double-only                                  17.7637+-0.1207     ?     17.7743+-0.1270        ?
   imul-int-only                                     14.9138+-0.0589     ?     14.9456+-0.1433        ?
   imul-mixed                                        22.2844+-0.9489           21.8356+-0.1119          might be 1.0206x faster
   in-four-cases                                     25.8803+-0.0858     ?     25.9571+-0.0955        ?
   in-one-case-false                                 12.0892+-0.0722     ?     12.1152+-0.0663        ?
   in-one-case-true                                  12.0147+-0.0983     ?     12.1002+-0.1127        ?
   in-two-cases                                      12.7623+-0.1040     ?     12.9287+-0.1085        ? might be 1.0130x slower
   indexed-properties-in-objects                      4.2472+-0.0282            4.2346+-0.0035        
   infer-closure-const-then-mov-no-inline            15.3678+-0.1175           15.2948+-0.0736        
   infer-closure-const-then-mov                      28.8934+-0.0958     ?     29.0201+-0.0673        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.8260+-0.0732     ?     17.9267+-0.0482        ?
   infer-closure-const-then-put-to-scope             35.9740+-0.3123     ?     36.0262+-0.1364        ?
   infer-closure-const-then-reenter-no-inline   
                                                     84.3804+-0.0990     ?     84.4148+-0.1377        ?
   infer-closure-const-then-reenter                  36.1998+-0.2893           36.0303+-0.1269        
   infer-one-time-closure-ten-vars                   29.0426+-0.1155           28.9502+-0.1259        
   infer-one-time-closure-two-vars                   28.7890+-0.0649     ?     28.8195+-0.0926        ?
   infer-one-time-closure                            28.7509+-0.1572           28.7422+-0.0902        
   infer-one-time-deep-closure                       58.3938+-0.3419     ?     58.6988+-0.1272        ?
   inline-arguments-access                            1.6503+-0.0072     !      1.7205+-0.0148        ! definitely 1.0425x slower
   inline-arguments-aliased-access                    1.7576+-0.0087     !      1.8380+-0.0045        ! definitely 1.0458x slower
   inline-arguments-local-escape                     23.0905+-0.1376           23.0662+-0.2389        
   inline-get-scoped-var                              7.5136+-0.0730     ?      7.5300+-0.0972        ?
   inlined-put-by-id-transition                      15.3927+-0.3418     ?     15.3933+-0.2914        ?
   int-or-other-abs-then-get-by-val                   9.5739+-0.1165            9.5406+-0.1100        
   int-or-other-abs-zero-then-get-by-val             37.3492+-0.1092           37.2312+-0.2290        
   int-or-other-add-then-get-by-val                  10.5988+-0.0915           10.5663+-0.1209        
   int-or-other-add                                  11.0795+-0.1178           10.9834+-0.0651        
   int-or-other-div-then-get-by-val                   6.4177+-0.0332     ?      6.4579+-0.0282        ?
   int-or-other-max-then-get-by-val                   8.8967+-0.2316            8.8514+-0.1131        
   int-or-other-min-then-get-by-val                   7.0613+-0.0961     ?      7.1271+-0.0789        ?
   int-or-other-mod-then-get-by-val                   6.2482+-0.0718     ?      6.3042+-0.0193        ?
   int-or-other-mul-then-get-by-val                   6.6008+-0.0909     ?      6.6739+-0.0292        ? might be 1.0111x slower
   int-or-other-neg-then-get-by-val                   8.0528+-0.0610            8.0152+-0.0833        
   int-or-other-neg-zero-then-get-by-val             37.1738+-0.2402           36.8975+-0.1139        
   int-or-other-sub-then-get-by-val                  10.6293+-0.1375     ?     10.6710+-0.0716        ?
   int-or-other-sub                                   8.9853+-0.0533     ?      8.9919+-0.1109        ?
   int-overflow-local                                 6.4569+-0.0583     ?      6.4864+-0.1060        ?
   Int16Array-alloc-long-lived                       68.0220+-0.4474           67.9823+-0.3662        
   Int16Array-bubble-sort-with-byteLength            48.9381+-0.1183     ?     48.9974+-0.0853        ?
   Int16Array-bubble-sort                            47.9278+-0.1856           47.9051+-0.1562        
   Int16Array-load-int-mul                            1.8156+-0.0050     ?      1.8227+-0.0026        ?
   Int16Array-to-Int32Array-set                      91.5646+-0.8243     ?     92.0332+-1.0601        ?
   Int32Array-alloc-huge-long-lived                 704.0210+-4.3887     ?    706.0086+-3.8831        ?
   Int32Array-alloc-huge                            807.3482+-7.7661     ?    807.4237+-7.0678        ?
   Int32Array-alloc-large-long-lived                973.7106+-8.3239          970.6329+-8.7517        
   Int32Array-alloc-large                            45.4632+-0.9344           44.4254+-0.9908          might be 1.0234x faster
   Int32Array-alloc-long-lived                       80.8620+-0.3737           80.8612+-0.5846        
   Int32Array-alloc                                   4.5197+-0.0146     ?      4.5387+-0.0101        ?
   Int32Array-Int8Array-view-alloc                   14.8767+-0.0943     !     15.1146+-0.0483        ! definitely 1.0160x slower
   int52-spill                                       12.7927+-0.1164     ?     12.9876+-0.1671        ? might be 1.0152x slower
   Int8Array-alloc-long-lived                        67.3659+-0.6365           67.0750+-0.4802        
   Int8Array-load-with-byteLength                     5.0477+-0.0445     ?      5.0545+-0.0450        ?
   Int8Array-load                                     5.0586+-0.0067            5.0455+-0.0588        
   integer-divide                                    15.1311+-0.0934           15.0140+-0.0835        
   integer-modulo                                     2.0642+-0.0123     ?      2.0738+-0.0106        ?
   large-int-captured                                 9.7840+-0.0954     !      9.9757+-0.0839        ! definitely 1.0196x slower
   large-int-neg                                     26.1343+-0.2149     ?     26.2443+-0.1737        ?
   large-int                                         23.0567+-0.1655     ?     23.1449+-0.1516        ?
   logical-not                                       10.8586+-0.1949           10.7267+-0.2202          might be 1.0123x faster
   lots-of-fields                                    12.5766+-0.1127     ?     12.6680+-0.0906        ?
   make-indexed-storage                               4.3902+-0.0336            4.3576+-0.0257        
   make-rope-cse                                      6.1280+-0.0709            6.1274+-0.0818        
   marsaglia-larger-ints                            111.9740+-0.2957     ?    112.0046+-0.1504        ?
   marsaglia-osr-entry                               46.9785+-0.1613     ?     47.2933+-0.5532        ?
   marsaglia                                        463.8864+-0.4146          462.9979+-0.5833        
   method-on-number                                  29.8324+-0.4967     ?     29.9110+-0.4583        ?
   negative-zero-divide                               0.4418+-0.0380            0.4300+-0.0031          might be 1.0277x faster
   negative-zero-modulo                               0.4099+-0.0071     ?      0.4132+-0.0071        ?
   negative-zero-negate                               0.3977+-0.0185            0.3948+-0.0040        
   nested-function-parsing-random                   383.2315+-0.7706     !    384.9427+-0.5413        ! definitely 1.0045x slower
   nested-function-parsing                           47.5037+-0.1065     ?     47.6521+-0.0725        ?
   new-array-buffer-dead                              3.7642+-0.0327     ?      3.7851+-0.0102        ?
   new-array-buffer-push                             10.5419+-0.1578     ?     10.5525+-0.1210        ?
   new-array-dead                                    28.5546+-0.1110     ?     28.5808+-0.1205        ?
   new-array-push                                     6.9786+-0.0927            6.9369+-0.0389        
   number-test                                        4.4021+-0.0104     ?      4.4260+-0.0288        ?
   object-closure-call                               13.4216+-0.0982     ?     13.4546+-0.1205        ?
   object-test                                        4.7474+-0.0225     ?      4.7662+-0.0168        ?
   poly-stricteq                                     87.2970+-0.9793     !     93.8995+-1.4552        ! definitely 1.0756x slower
   polymorphic-structure                             20.4840+-0.1597     !     21.4524+-0.1071        ! definitely 1.0473x slower
   polyvariant-monomorphic-get-by-id                 12.0462+-0.1008     ?     12.0762+-0.1456        ?
   proto-custom-getter                              157.7228+-0.0933     ?    167.2331+-9.6984        ? might be 1.0603x slower
   proto-getter-access                              496.8927+-4.1834          496.2913+-2.9376        
   put-by-id                                         19.5437+-0.2232     ?     19.6845+-0.4045        ?
   put-by-val-large-index-blank-indexing-type   
                                                     21.0910+-0.2060           20.7707+-0.1255          might be 1.0154x faster
   put-by-val-machine-int                             3.3564+-0.0342     ?      3.3677+-0.0081        ?
   rare-osr-exit-on-local                            20.1830+-0.1061     ?     20.3437+-0.0660        ?
   register-pressure-from-osr                        31.3390+-0.1198     ?     31.3535+-0.1157        ?
   simple-activation-demo                            35.2670+-0.1328           35.2654+-0.2005        
   simple-custom-getter                             500.1667+-0.3404     !    534.2697+-31.8058       ! definitely 1.0682x slower
   simple-getter-access                             782.9094+-6.7829     ?    786.8956+-8.3196        ?
   slow-array-profile-convergence                     4.1095+-0.0376     ?      4.1139+-0.0286        ?
   slow-convergence                                   4.4710+-0.0293     !      4.5951+-0.0180        ! definitely 1.0278x slower
   sparse-conditional                                 1.4906+-0.0286     ?      1.5030+-0.0265        ?
   splice-to-remove                                  76.7857+-0.1722     ?     77.1254+-0.1903        ?
   stepanov_container                             10169.4107+-18.1421    !  10354.9833+-76.5706       ! definitely 1.0182x slower
   string-concat-object                               3.2545+-0.0524            3.2530+-0.0402        
   string-concat-pair-object                          3.1700+-0.0308            3.1691+-0.0183        
   string-concat-pair-simple                         17.1379+-0.3838     ?     17.2014+-0.2467        ?
   string-concat-simple                              17.2894+-0.3898           17.1671+-0.3293        
   string-cons-repeat                                10.8613+-0.0603     ?     10.8642+-0.0315        ?
   string-cons-tower                                 11.3203+-0.0423     ?     11.3925+-0.1251        ?
   string-equality                                   42.6110+-0.1146     ?     42.8052+-0.4006        ?
   string-get-by-val-big-char                        12.7328+-0.1040     ?     12.9569+-0.1219        ? might be 1.0176x slower
   string-get-by-val-out-of-bounds-insane             6.1063+-0.7018            5.8819+-0.1419          might be 1.0382x faster
   string-get-by-val-out-of-bounds                    5.3093+-0.0548     ?      5.3127+-0.0731        ?
   string-get-by-val                                  4.9370+-0.0618     ?      4.9765+-0.0213        ?
   string-hash                                        2.7766+-0.0052     ^      2.7069+-0.0104        ^ definitely 1.0258x faster
   string-long-ident-equality                        39.0940+-0.1409     ?     39.3713+-0.3394        ?
   string-repeat-arith                               50.4718+-0.3955           50.0146+-0.3680        
   string-sub                                       105.1262+-0.8467          104.9879+-0.3750        
   string-test                                        4.3470+-0.0862     ?      4.4140+-0.0194        ? might be 1.0154x slower
   string-var-equality                               73.6421+-4.8252           70.1406+-0.3491          might be 1.0499x faster
   structure-hoist-over-transitions                   3.5282+-0.0206     ?      3.5528+-0.0291        ?
   switch-char-constant                               3.5120+-0.0493     ?      3.5169+-0.0211        ?
   switch-char                                        8.1482+-0.0648     ?      8.1774+-0.0382        ?
   switch-constant                                    9.3343+-0.1172     ?      9.5277+-0.1042        ? might be 1.0207x slower
   switch-string-basic-big-var                       20.4855+-0.2578     ?     20.6018+-0.1379        ?
   switch-string-basic-big                           22.3702+-1.3497           21.9566+-1.1229          might be 1.0188x faster
   switch-string-basic-var                           20.2953+-0.0554     ?     20.3510+-0.1062        ?
   switch-string-basic                               21.9674+-0.7937     ?     22.0119+-0.7842        ?
   switch-string-big-length-tower-var                29.1287+-0.2100           29.0724+-0.1701        
   switch-string-length-tower-var                    21.8794+-0.2325     ?     21.9596+-0.2173        ?
   switch-string-length-tower                        16.5185+-0.1242     ?     16.5854+-0.0667        ?
   switch-string-short                               16.6181+-0.1483           16.6005+-0.1572        
   switch                                            13.5613+-0.1128     ?     13.5805+-0.1100        ?
   tear-off-arguments-simple                          2.3709+-0.0062     !      2.4853+-0.0024        ! definitely 1.0483x slower
   tear-off-arguments                                 3.6440+-0.0079     !      3.7214+-0.0089        ! definitely 1.0212x slower
   temporal-structure                                17.2226+-0.1039           17.1660+-0.0760        
   to-int32-boolean                                  21.6201+-0.1567           21.5986+-0.1536        
   undefined-test                                     4.5878+-0.0581     ?      4.6379+-0.0154        ? might be 1.0109x slower
   weird-inlining-const-prop                          2.3704+-0.0100     !      2.4334+-0.0232        ! definitely 1.0266x slower

   &lt;arithmetic&gt;                                     133.8280+-0.2644     !    135.1805+-0.6977        ! definitely 1.0101x slower
   &lt;geometric&gt; *                                     14.7482+-0.0154     !     14.8209+-0.0109        ! definitely 1.0049x slower
   &lt;harmonic&gt;                                         5.2911+-0.0312     !      5.3335+-0.0073        ! definitely 1.0080x slower

                                                        TipOfTree               NoMoreForward                                   
All benchmarks:
   &lt;arithmetic&gt;                                     202.9650+-0.2227     !    204.1826+-0.5335        ! definitely 1.0060x slower
   &lt;geometric&gt;                                       20.4908+-0.0166     !     20.5979+-0.0129        ! definitely 1.0052x slower
   &lt;harmonic&gt;                                         4.8264+-0.0202     !      4.8688+-0.0091        ! definitely 1.0088x slower

                                                        TipOfTree               NoMoreForward                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.2589+-0.0385     !     49.5846+-0.0640        ! definitely 1.0066x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963050</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-26 17:23:30 -0800</bug_when>
    <thetext>OK - it appears that the entire regression is due to graph size increase.  I will look at ways of reducing the graph size or compensating in other ways.  I think this is totally solvable and I should have expected this - what ToT is doing is essentially introducing a lot of IR awkwardness just to allow a SetLocal and a MovHint to be the same node.  But there are probably better ways of achieving the same effect...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963150</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-27 18:18:45 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; OK - it appears that the entire regression is due to graph size increase.  I will look at ways of reducing the graph size or compensating in other ways.  I think this is totally solvable and I should have expected this - what ToT is doing is essentially introducing a lot of IR awkwardness just to allow a SetLocal and a MovHint to be the same node.  But there are probably better ways of achieving the same effect...

Actually, this appears to be because I broke peephole branch optimization!  I have a fix and am testing it now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963173</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-28 06:30:50 -0800</bug_when>
    <thetext>OK, new performance numbers.  I believe these are solid enough to land.  Basically, we have a *slight* compile-time regression - but in return for this we get a lot of compiler sanity.  I&apos;ll still play with the compile-time regression but I think even if I don&apos;t find a solution, this is ready to go.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r161072)
&quot;NoMoreForward&quot; at /Volumes/Data/fromMiniMe/tertiary/OpenSource/WebKitBuild/Release/jsc (r161072)

Collected 10 samples per benchmark/VM, with 10 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               NoMoreForward                                   
SunSpider:
   3d-cube                                            7.7370+-0.0407     ?      7.7981+-0.0376        ?
   3d-morph                                           8.8103+-0.0665     ?      8.9125+-0.0736        ? might be 1.0116x slower
   3d-raytrace                                        8.9546+-0.1388     ?      9.0668+-0.1115        ? might be 1.0125x slower
   access-binary-trees                                2.1135+-0.0108     ?      2.1317+-0.0171        ?
   access-fannkuch                                    8.0254+-0.0728     ?      8.1135+-0.0431        ? might be 1.0110x slower
   access-nbody                                       4.2910+-0.0589            4.2756+-0.0072        
   access-nsieve                                      4.9995+-0.0422     ?      5.0113+-0.0473        ?
   bitops-3bit-bits-in-byte                           1.8870+-0.0182     ?      1.9072+-0.0048        ? might be 1.0107x slower
   bitops-bits-in-byte                                7.1521+-0.0826     ?      7.1591+-0.0648        ?
   bitops-bitwise-and                                 3.0063+-0.0811     ?      3.0806+-0.0288        ? might be 1.0247x slower
   bitops-nsieve-bits                                 4.6589+-0.0228     ?      4.6891+-0.0127        ?
   controlflow-recursive                              3.1725+-0.0256     ?      3.1865+-0.0253        ?
   crypto-aes                                         5.5718+-0.0262     !      5.6269+-0.0241        ! definitely 1.0099x slower
   crypto-md5                                         3.3458+-0.0113     !      3.4098+-0.0271        ! definitely 1.0191x slower
   crypto-sha1                                        3.0045+-0.0146     ?      3.0386+-0.0480        ? might be 1.0114x slower
   date-format-tofte                                 12.1441+-0.1843           12.0038+-0.2073          might be 1.0117x faster
   date-format-xparb                                  8.7549+-0.0591            8.7179+-0.0574        
   math-cordic                                        4.2854+-0.0238            4.2826+-0.0513        
   math-partial-sums                                 10.1684+-0.0649     ?     10.2828+-0.1159        ? might be 1.0113x slower
   math-spectral-norm                                 2.7670+-0.0101     !      2.7984+-0.0041        ! definitely 1.0113x slower
   regexp-dna                                        12.9764+-0.0814           12.9704+-0.0810        
   string-base64                                      5.7913+-0.0293     !      5.9404+-0.0357        ! definitely 1.0258x slower
   string-fasta                                      10.3990+-0.0442     ?     10.4592+-0.0934        ?
   string-tagcloud                                   15.5646+-0.1599           15.5487+-0.1611        
   string-unpack-code                                31.3105+-0.1309           31.1102+-0.1265        
   string-validate-input                              7.0962+-0.0773     ?      7.1452+-0.0911        ?

   &lt;arithmetic&gt; *                                     7.6149+-0.0181     ?      7.6410+-0.0195        ? might be 1.0034x slower
   &lt;geometric&gt;                                        6.0962+-0.0123     !      6.1370+-0.0123        ! definitely 1.0067x slower
   &lt;harmonic&gt;                                         4.9978+-0.0083     !      5.0422+-0.0085        ! definitely 1.0089x slower

                                                        TipOfTree               NoMoreForward                                   
LongSpider:
   3d-cube                                         2687.8397+-5.1710         2680.8112+-7.2138        
   3d-morph                                        1499.7998+-1.5775     ?   1500.1987+-1.8401        ?
   3d-raytrace                                     1513.2198+-10.5350        1512.8543+-22.4506       
   access-binary-trees                             2452.5323+-18.3547    ?   2471.6895+-10.5027       ?
   access-fannkuch                                  665.1397+-0.3717     ^    658.0128+-0.5343        ^ definitely 1.0108x faster
   access-nbody                                    1496.1419+-0.8738         1496.0277+-0.7509        
   access-nsieve                                   1548.6860+-4.3524     ?   1548.7072+-3.7352        ?
   bitops-3bit-bits-in-byte                         125.9811+-0.1221     ?    126.3846+-0.7199        ?
   bitops-bits-in-byte                              602.9040+-3.8246          600.7204+-4.0931        
   bitops-nsieve-bits                              1050.5088+-0.9646         1049.7785+-0.8109        
   controlflow-recursive                           1473.0015+-0.5669         1472.4836+-0.5062        
   crypto-aes                                      1661.2781+-4.9991     !   1687.3493+-8.6841        ! definitely 1.0157x slower
   crypto-md5                                      1171.2685+-16.2691    !   1240.0371+-3.5152        ! definitely 1.0587x slower
   crypto-sha1                                     1680.7231+-131.3260       1624.6520+-4.8496          might be 1.0345x faster
   date-format-tofte                               1232.2434+-7.0994         1218.1908+-7.1591          might be 1.0115x faster
   date-format-xparb                               1514.3265+-70.5821        1460.1894+-24.2241         might be 1.0371x faster
   math-cordic                                     1736.5387+-0.4024     ?   1740.4658+-4.4304        ?
   math-partial-sums                               1309.0154+-0.8354         1308.2350+-1.8905        
   math-spectral-norm                              1826.2699+-0.4439     ?   1826.3374+-0.5837        ?
   string-base64                                    591.1884+-3.0089     ?    594.4468+-2.2112        ?
   string-fasta                                    1000.5397+-9.1203          997.1832+-5.4043        
   string-tagcloud                                  392.0066+-1.9437          390.4587+-1.8079        

   &lt;arithmetic&gt;                                    1328.6888+-6.1195         1327.5097+-1.3461          might be 1.0009x faster
   &lt;geometric&gt; *                                   1133.7120+-3.8268         1133.1715+-0.9633          might be 1.0005x faster
   &lt;harmonic&gt;                                       820.5279+-1.5168     ?    820.8324+-1.4959        ? might be 1.0004x slower

                                                        TipOfTree               NoMoreForward                                   
V8Spider:
   crypto                                            79.2281+-0.2133     !     80.1773+-0.2365        ! definitely 1.0120x slower
   deltablue                                         98.1150+-0.5293     !     99.8364+-0.6674        ! definitely 1.0175x slower
   earley-boyer                                      72.8347+-0.3468     !     74.1789+-0.3027        ! definitely 1.0185x slower
   raytrace                                          44.4347+-0.8700     !     46.2000+-0.1712        ! definitely 1.0397x slower
   regexp                                           100.7230+-0.9069     ?    101.0771+-0.7770        ?
   richards                                         134.9995+-1.3492     ^    131.3913+-0.8325        ^ definitely 1.0275x faster
   splay                                             46.3375+-0.4017           46.3261+-0.3574        

   &lt;arithmetic&gt;                                      82.3818+-0.2923     ?     82.7410+-0.1528        ? might be 1.0044x slower
   &lt;geometric&gt; *                                     76.8586+-0.2977     !     77.5538+-0.1029        ! definitely 1.0090x slower
   &lt;harmonic&gt;                                        71.4418+-0.3575     !     72.3810+-0.1012        ! definitely 1.0131x slower

                                                        TipOfTree               NoMoreForward                                   
Octane and V8v7:
   encrypt                                           0.46555+-0.00047    !     0.46791+-0.00026       ! definitely 1.0051x slower
   decrypt                                           8.57806+-0.02120    ?     8.60319+-0.01067       ?
   deltablue                                x2       0.56448+-0.00656    ?     0.56603+-0.00820       ?
   earley                                            0.90517+-0.00683    ?     0.90991+-0.00576       ?
   boyer                                            12.46218+-0.04809    ?    12.49413+-0.03108       ?
   raytrace                                 x2       4.30932+-0.03232          4.30880+-0.06815       
   regexp                                   x2      32.81055+-0.12539         32.71625+-0.05464       
   richards                                 x2       0.43346+-0.00574          0.43291+-0.00555       
   splay                                    x2       0.63757+-0.00400          0.63755+-0.00774       
   navier-stokes                            x2      10.69834+-0.00480    !    10.83884+-0.12310       ! definitely 1.0131x slower
   closure                                           0.43340+-0.00086          0.43253+-0.00121       
   jquery                                            6.35426+-0.01745          6.35001+-0.00692       
   gbemu                                    x2      72.03080+-0.69386    ?    76.66918+-6.07321       ? might be 1.0644x slower
   mandreel                                 x2     136.48272+-0.56480        135.79060+-0.13469       
   pdfjs                                    x2     101.66569+-0.26926    ?   102.13125+-0.35527       ?
   box2d                                    x2      34.96345+-0.18150         34.82066+-0.16753       

V8v7:
   &lt;arithmetic&gt;                                      7.58240+-0.01811    ?     7.59224+-0.01566       ? might be 1.0013x slower
   &lt;geometric&gt; *                                     2.51157+-0.00795    ?     2.51754+-0.00982       ? might be 1.0024x slower
   &lt;harmonic&gt;                                        1.03512+-0.00637    ?     1.03661+-0.00721       ? might be 1.0014x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.47659+-0.06347    ?    31.81084+-0.50006       ? might be 1.0106x slower
   &lt;geometric&gt; *                                     6.97104+-0.01774    ?     7.00905+-0.05269       ? might be 1.0055x slower
   &lt;harmonic&gt;                                        1.44113+-0.00741    ?     1.44261+-0.00837       ? might be 1.0010x slower

                                                        TipOfTree               NoMoreForward                                   
Kraken:
   ai-astar                                          494.019+-0.733      ?     494.499+-0.455         ?
   audio-beat-detection                              224.665+-1.088      ?     226.655+-1.722         ?
   audio-dft                                         292.093+-5.819            291.118+-1.829         
   audio-fft                                         130.618+-0.072      !     131.250+-0.150         ! definitely 1.0048x slower
   audio-oscillator                                  244.391+-0.487            244.240+-0.257         
   imaging-darkroom                                  286.164+-0.266      ?     287.068+-2.095         ?
   imaging-desaturate                                158.497+-0.143            158.472+-0.255         
   imaging-gaussian-blur                             362.890+-0.342      ?     362.996+-0.130         ?
   json-parse-financial                               80.569+-0.270      ?      80.704+-0.398         ?
   json-stringify-tinderbox                          103.807+-0.239      ?     104.291+-0.479         ?
   stanford-crypto-aes                                91.267+-0.615      ?      92.045+-0.358         ?
   stanford-crypto-ccm                               102.191+-0.768            101.887+-1.234         
   stanford-crypto-pbkdf2                            261.040+-1.543      ?     261.411+-2.033         ?
   stanford-crypto-sha256-iterative                  114.681+-0.417            114.557+-0.622         

   &lt;arithmetic&gt; *                                    210.492+-0.463      ?     210.800+-0.339         ? might be 1.0015x slower
   &lt;geometric&gt;                                       180.760+-0.332      ?     181.098+-0.282         ? might be 1.0019x slower
   &lt;harmonic&gt;                                        156.340+-0.301      ?     156.688+-0.269         ? might be 1.0022x slower

                                                        TipOfTree               NoMoreForward                                   
JSRegress:
   adapt-to-double-divide                            22.7979+-0.1339     ?     22.8154+-0.1452        ?
   aliased-arguments-getbyval                         0.9994+-0.0057     !      1.0141+-0.0030        ! definitely 1.0146x slower
   allocate-big-object                                3.0500+-0.0203     ?      3.0582+-0.0208        ?
   arity-mismatch-inlining                            0.9727+-0.0234     ?      0.9857+-0.0071        ? might be 1.0133x slower
   array-access-polymorphic-structure                10.7340+-0.3908           10.5264+-0.4635          might be 1.0197x faster
   array-nonarray-polymorhpic-access                 57.9910+-0.1089     ?     58.2064+-0.1749        ?
   array-with-double-add                              5.7874+-0.0192            5.7823+-0.0554        
   array-with-double-increment                        4.3426+-0.0390     ?      4.3695+-0.0242        ?
   array-with-double-mul-add                          6.8497+-0.0426     ?      6.8502+-0.0596        ?
   array-with-double-sum                              8.0224+-0.1199     ?      8.0914+-0.1033        ?
   array-with-int32-add-sub                          10.4396+-0.0853     ?     10.4668+-0.1118        ?
   array-with-int32-or-double-sum                     8.0059+-0.1016     ?      8.0376+-0.0297        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    118.6983+-0.8969          118.2920+-0.9466        
   ArrayBuffer-DataView-alloc-long-lived             30.6334+-0.1587     ?     30.8729+-0.1941        ?
   ArrayBuffer-Int32Array-byteOffset                  6.3819+-0.1446     ^      6.0424+-0.0185        ^ definitely 1.0562x faster
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    216.2365+-1.3293     ?    217.8689+-4.1216        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    165.9004+-1.3675     ?    166.4141+-1.0180        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    119.5908+-1.7590          118.9133+-1.8228        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     49.1861+-0.8636           49.1026+-0.2429        
   ArrayBuffer-Int8Array-alloc-long-lived            30.3829+-0.1682     ?     30.7534+-0.2245        ? might be 1.0122x slower
   ArrayBuffer-Int8Array-alloc                       26.3094+-0.1785     ?     26.3680+-0.1488        ?
   asmjs_bool_bug                                     9.1604+-0.1709     ?      9.2350+-0.0880        ?
   basic-set                                         19.9898+-0.1402     ?     20.0876+-0.1816        ?
   big-int-mul                                        5.5323+-0.0259     !      6.0817+-0.0219        ! definitely 1.0993x slower
   boolean-test                                       4.4518+-0.0208     ?      4.4762+-0.0685        ?
   branch-fold                                        4.9649+-0.0591     ?      4.9724+-0.0796        ?
   by-val-generic                                    12.7185+-0.1698           12.5507+-0.1173          might be 1.0134x faster
   captured-assignments                               0.6499+-0.0191            0.6346+-0.0043          might be 1.0241x faster
   cast-int-to-double                                12.4343+-0.1006     ?     12.6085+-0.0991        ? might be 1.0140x slower
   cell-argument                                     15.7150+-0.4607     ?     16.2198+-0.3605        ? might be 1.0321x slower
   cfg-simplify                                       4.0055+-0.0199     ?      4.0105+-0.0070        ?
   chain-custom-getter                              164.1987+-7.3788          160.4344+-5.5917          might be 1.0235x faster
   chain-getter-access                              495.5537+-5.7366          494.2574+-2.5374        
   cmpeq-obj-to-obj-other                            12.6098+-0.3796           12.3684+-0.5670          might be 1.0195x faster
   constant-test                                      8.9679+-0.0973            8.9381+-0.0603        
   DataView-custom-properties                       125.4395+-0.6597     ?    126.5586+-0.9850        ?
   delay-tear-off-arguments-strictmode                3.6449+-0.0132     !      3.6981+-0.0306        ! definitely 1.0146x slower
   destructuring-arguments-length                   176.2906+-1.4916     ?    176.3650+-1.8792        ?
   destructuring-arguments                            8.8388+-0.1017     ?      9.0079+-0.0873        ? might be 1.0191x slower
   destructuring-swap                                 8.6667+-0.0458     ?      8.7604+-0.0977        ? might be 1.0108x slower
   direct-arguments-getbyval                          0.8738+-0.0223     ?      0.8916+-0.0265        ? might be 1.0204x slower
   double-get-by-val-out-of-bounds                    7.3917+-0.0575     ?      7.4300+-0.0431        ?
   double-pollution-getbyval                         11.1245+-0.0752           11.0324+-0.0911        
   double-pollution-putbyoffset                       6.0822+-0.0243     !      6.3514+-0.2296        ! definitely 1.0443x slower
   double-to-int32-typed-array-no-inline              2.5898+-0.0164     !      2.6479+-0.0078        ! definitely 1.0224x slower
   double-to-int32-typed-array                        2.2179+-0.0117     !      2.3100+-0.0116        ! definitely 1.0415x slower
   double-to-uint32-typed-array-no-inline             2.7513+-0.0115     !      2.8169+-0.0101        ! definitely 1.0238x slower
   double-to-uint32-typed-array                       2.4429+-0.0227     !      2.5688+-0.0130        ! definitely 1.0516x slower
   empty-string-plus-int                             10.8813+-0.0580     !     11.1137+-0.1353        ! definitely 1.0214x slower
   emscripten-cube2hash                              55.3991+-0.1541     ?     55.6979+-0.2447        ?
   emscripten-memops                               7054.4150+-1.8440     ?   7073.0583+-37.9971       ?
   external-arguments-getbyval                        2.1675+-0.0665     ?      2.1775+-0.0157        ?
   external-arguments-putbyval                        3.0630+-0.0113     ?      3.0913+-0.0267        ?
   fixed-typed-array-storage-var-index                1.4035+-0.0038     !      1.4206+-0.0058        ! definitely 1.0122x slower
   fixed-typed-array-storage                          0.9901+-0.0033     !      1.0103+-0.0062        ! definitely 1.0204x slower
   Float32Array-matrix-mult                           6.5740+-0.0341     ?      6.6176+-0.0301        ?
   Float32Array-to-Float64Array-set                  92.9186+-0.6410     ?     94.3479+-1.7139        ? might be 1.0154x slower
   Float64Array-alloc-long-lived                    103.2693+-0.8573     ?    103.8233+-0.8255        ?
   Float64Array-to-Int16Array-set                   116.9203+-0.5726          116.7661+-0.6653        
   fold-double-to-int                                20.6336+-0.1862     ?     20.7148+-0.2728        ?
   for-of-iterate-array-entries                       8.6304+-0.0697     ?      8.8116+-0.1821        ? might be 1.0210x slower
   for-of-iterate-array-keys                          3.4427+-0.0490     ?      3.4604+-0.0416        ?
   for-of-iterate-array-values                        3.0082+-0.0468            2.9680+-0.0362          might be 1.0135x faster
   function-dot-apply                                 3.1789+-0.0066     ^      3.1371+-0.0074        ^ definitely 1.0133x faster
   function-test                                      4.8959+-0.0529     ?      4.9256+-0.0412        ?
   get-by-id-chain-from-try-block                     7.9464+-0.1101     ?      8.0974+-0.1104        ? might be 1.0190x slower
   get-by-id-proto-or-self                           25.9583+-0.1939     ?     26.0492+-0.2332        ?
   get-by-id-self-or-proto                           23.7204+-0.6895           23.5455+-0.6211        
   get-by-val-out-of-bounds                           7.2490+-0.0916     ?      7.2790+-0.0573        ?
   get_callee_monomorphic                             4.9536+-0.0753     ?      4.9573+-0.0892        ?
   get_callee_polymorphic                             4.6743+-0.0114     !      4.8473+-0.0176        ! definitely 1.0370x slower
   global-var-const-infer-fire-from-opt               1.0627+-0.0573     ?      1.0785+-0.0271        ? might be 1.0148x slower
   global-var-const-infer                             0.8148+-0.0023     ?      0.8177+-0.0034        ?
   HashMap-put-get-iterate-keys                      42.2033+-0.2869     ?     42.6549+-0.3028        ? might be 1.0107x slower
   HashMap-put-get-iterate                           53.6342+-0.2413     !     54.4598+-0.1587        ! definitely 1.0154x slower
   HashMap-string-put-get-iterate                    51.4289+-0.9065     ?     52.4558+-1.2172        ? might be 1.0200x slower
   imul-double-only                                  18.1764+-0.9016           17.8054+-0.1354          might be 1.0208x faster
   imul-int-only                                     14.9094+-0.0562     ?     14.9713+-0.0721        ?
   imul-mixed                                        21.8089+-0.1310     ?     21.8315+-0.1342        ?
   in-four-cases                                     25.9292+-0.0762     ?     25.9538+-0.1179        ?
   in-one-case-false                                 12.0834+-0.1413     ?     12.2130+-0.1551        ? might be 1.0107x slower
   in-one-case-true                                  12.1514+-0.1243     ?     12.1708+-0.1179        ?
   in-two-cases                                      12.8937+-0.0821     ?     12.9872+-0.1155        ?
   indexed-properties-in-objects                      4.2305+-0.0101     ?      4.2578+-0.0258        ?
   infer-closure-const-then-mov-no-inline            15.3599+-0.0731           15.3459+-0.1020        
   infer-closure-const-then-mov                      28.9018+-0.0913     ?     29.0352+-0.0611        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.8592+-0.0883           17.8444+-0.0645        
   infer-closure-const-then-put-to-scope             35.8394+-0.2004     ?     36.1314+-0.2261        ?
   infer-closure-const-then-reenter-no-inline   
                                                     84.4838+-0.1440     ?     84.4934+-0.1485        ?
   infer-closure-const-then-reenter                  36.1502+-0.4437           35.9537+-0.2690        
   infer-one-time-closure-ten-vars                   28.9633+-0.0816     ?     29.0746+-0.1196        ?
   infer-one-time-closure-two-vars                   28.8226+-0.0885     ?     28.8870+-0.1003        ?
   infer-one-time-closure                            28.7719+-0.0978     ?     28.9587+-0.3235        ?
   infer-one-time-deep-closure                       58.6751+-0.0750           58.5470+-0.1391        
   inline-arguments-access                            1.6618+-0.0060     !      1.7106+-0.0070        ! definitely 1.0294x slower
   inline-arguments-aliased-access                    1.7622+-0.0036     !      1.8337+-0.0152        ! definitely 1.0406x slower
   inline-arguments-local-escape                     23.3260+-0.4183           23.1793+-0.1748        
   inline-get-scoped-var                              7.4388+-0.1023     ?      7.4947+-0.0895        ?
   inlined-put-by-id-transition                      15.5449+-0.2883     ?     15.6068+-0.3108        ?
   int-or-other-abs-then-get-by-val                   9.4265+-0.1164     ?      9.5470+-0.1233        ? might be 1.0128x slower
   int-or-other-abs-zero-then-get-by-val             37.3098+-0.1732     !     38.0776+-0.1568        ! definitely 1.0206x slower
   int-or-other-add-then-get-by-val                  10.6672+-0.0744           10.6438+-0.0880        
   int-or-other-add                                  10.9677+-0.0837           10.9650+-0.1418        
   int-or-other-div-then-get-by-val                   6.4069+-0.0626            6.3636+-0.1060        
   int-or-other-max-then-get-by-val                   8.8351+-0.1671     ?      8.8781+-0.1878        ?
   int-or-other-min-then-get-by-val                   7.0791+-0.0623     ?      7.1161+-0.0314        ?
   int-or-other-mod-then-get-by-val                   6.2676+-0.0130     ?      6.3010+-0.0250        ?
   int-or-other-mul-then-get-by-val                   6.6462+-0.0337     ?      6.6624+-0.0548        ?
   int-or-other-neg-then-get-by-val                   7.9849+-0.0905     ?      8.0055+-0.0801        ?
   int-or-other-neg-zero-then-get-by-val             36.9437+-0.0988     !     38.0377+-0.3241        ! definitely 1.0296x slower
   int-or-other-sub-then-get-by-val                  10.6721+-0.1657     ?     10.6946+-0.0762        ?
   int-or-other-sub                                   9.0009+-0.0858     ?      9.0273+-0.0968        ?
   int-overflow-local                                 6.5084+-0.0229     !      6.5537+-0.0214        ! definitely 1.0070x slower
   Int16Array-alloc-long-lived                       67.7097+-0.4817     ?     67.9172+-0.4538        ?
   Int16Array-bubble-sort-with-byteLength            48.8478+-0.1200     ?     48.9618+-0.0911        ?
   Int16Array-bubble-sort                            47.8567+-0.0629     ?     47.8974+-0.1543        ?
   Int16Array-load-int-mul                            1.8168+-0.0098     ?      1.8305+-0.0181        ?
   Int16Array-to-Int32Array-set                      92.9159+-1.1802     ^     88.7736+-0.4653        ^ definitely 1.0467x faster
   Int32Array-alloc-huge-long-lived                 705.6639+-3.8145     ?    705.6671+-2.7574        ?
   Int32Array-alloc-huge                            801.4405+-6.7298     ?    811.1174+-7.0368        ? might be 1.0121x slower
   Int32Array-alloc-large-long-lived                963.9104+-6.8320     ?    976.2686+-10.6170       ? might be 1.0128x slower
   Int32Array-alloc-large                            45.3267+-1.1212           44.9958+-0.9438        
   Int32Array-alloc-long-lived                       80.5703+-0.6999     ?     80.8712+-0.4614        ?
   Int32Array-alloc                                   4.5289+-0.0208     ?      4.5326+-0.0174        ?
   Int32Array-Int8Array-view-alloc                   14.8802+-0.0509     !     15.0645+-0.0708        ! definitely 1.0124x slower
   int52-spill                                       12.8061+-0.2173           12.7028+-0.1395        
   Int8Array-alloc-long-lived                        67.4405+-0.6475           67.4135+-0.4403        
   Int8Array-load-with-byteLength                     5.0603+-0.0071     !      5.0794+-0.0094        ! definitely 1.0038x slower
   Int8Array-load                                     5.0245+-0.0598     ?      5.0713+-0.0076        ?
   integer-divide                                    15.0958+-0.0718           15.0498+-0.1198        
   integer-modulo                                     2.0687+-0.0087            2.0660+-0.0106        
   large-int-captured                                 9.8063+-0.0981     ?      9.9441+-0.1006        ? might be 1.0141x slower
   large-int-neg                                     26.2267+-0.1478     ?     26.2848+-0.2060        ?
   large-int                                         23.1520+-0.1020     ?     23.1905+-0.1095        ?
   logical-not                                       10.7481+-0.1921           10.7373+-0.2451        
   lots-of-fields                                    12.6284+-0.0912     ?     12.7479+-0.0749        ?
   make-indexed-storage                               4.2975+-0.1355     ?      4.3597+-0.0309        ? might be 1.0145x slower
   make-rope-cse                                      6.1626+-0.0564            6.0941+-0.0655          might be 1.0112x faster
   marsaglia-larger-ints                            112.7334+-1.5025          111.8839+-0.1912        
   marsaglia-osr-entry                               47.1420+-0.1466           47.1069+-0.0916        
   marsaglia                                        463.5552+-0.2812     ?    463.6060+-0.1824        ?
   method-on-number                                  29.5792+-0.2109     ?     29.5941+-0.1213        ?
   negative-zero-divide                               0.4253+-0.0029     ?      0.4281+-0.0028        ?
   negative-zero-modulo                               0.4110+-0.0056            0.4085+-0.0021        
   negative-zero-negate                               0.3990+-0.0159            0.3943+-0.0041          might be 1.0120x faster
   nested-function-parsing-random                   382.9724+-0.6238     ?    383.6150+-0.6712        ?
   nested-function-parsing                           47.8245+-0.6605     ?     47.8551+-0.0906        ?
   new-array-buffer-dead                              3.8254+-0.0630            3.7745+-0.0116          might be 1.0135x faster
   new-array-buffer-push                             10.7291+-0.1681           10.6652+-0.1418        
   new-array-dead                                    28.5250+-0.0590     ?     28.5450+-0.1026        ?
   new-array-push                                     6.8914+-0.0359     ?      6.9116+-0.0641        ?
   number-test                                        4.3814+-0.0454     ?      4.4179+-0.0299        ?
   object-closure-call                               13.4986+-0.0633           13.4043+-0.0685        
   object-test                                        4.7361+-0.0127            4.7352+-0.0660        
   poly-stricteq                                     86.9439+-0.2516           86.8925+-0.3621        
   polymorphic-structure                             20.6187+-0.2777     !     21.4896+-0.3501        ! definitely 1.0422x slower
   polyvariant-monomorphic-get-by-id                 11.9526+-0.0692     ?     11.9696+-0.0823        ?
   proto-custom-getter                              160.2282+-5.6546          160.1928+-5.7260        
   proto-getter-access                              493.0336+-4.9171     ?    495.6034+-2.9902        ?
   put-by-id                                         19.5899+-0.3073     ?     19.6366+-0.2312        ?
   put-by-val-large-index-blank-indexing-type   
                                                     21.1444+-0.3351           20.7504+-0.1802          might be 1.0190x faster
   put-by-val-machine-int                             3.3443+-0.0101     !      3.3997+-0.0342        ! definitely 1.0166x slower
   rare-osr-exit-on-local                            20.3027+-0.0934           20.2775+-0.0909        
   register-pressure-from-osr                        31.3348+-0.0872     ?     31.4094+-0.1102        ?
   simple-activation-demo                            35.4655+-0.4542           35.2814+-0.0993        
   simple-custom-getter                             509.7294+-21.3770    ?    516.7259+-25.0231       ? might be 1.0137x slower
   simple-getter-access                             787.2423+-6.3859     ?    791.0633+-6.8770        ?
   slow-array-profile-convergence                     4.0780+-0.0393            4.0495+-0.0129        
   slow-convergence                                   4.4935+-0.0154     !      4.5860+-0.0215        ! definitely 1.0206x slower
   sparse-conditional                                 1.4686+-0.0037     !      1.4956+-0.0139        ! definitely 1.0184x slower
   splice-to-remove                                  76.7661+-0.1755     ?     77.3004+-0.8766        ?
   stepanov_container                             10170.5719+-34.1377    ?  10184.3170+-20.3829       ?
   string-concat-object                               3.2507+-0.0330            3.2418+-0.0208        
   string-concat-pair-object                          3.1466+-0.0131     ?      3.1815+-0.0242        ? might be 1.0111x slower
   string-concat-pair-simple                         16.9644+-0.3235     ?     17.0852+-0.3991        ?
   string-concat-simple                              17.3857+-0.2123           17.2326+-0.3637        
   string-cons-repeat                                10.8186+-0.0366     ?     10.9452+-0.1449        ? might be 1.0117x slower
   string-cons-tower                                 11.3058+-0.0517     ?     11.3214+-0.0406        ?
   string-equality                                   42.9872+-0.3900           42.9047+-0.3442        
   string-get-by-val-big-char                        12.7058+-0.1745     ?     12.9361+-0.1202        ? might be 1.0181x slower
   string-get-by-val-out-of-bounds-insane             5.8717+-0.0388     ?      5.9194+-0.1803        ?
   string-get-by-val-out-of-bounds                    5.3476+-0.0141     ^      5.2462+-0.0791        ^ definitely 1.0193x faster
   string-get-by-val                                  4.9828+-0.0310            4.9449+-0.0697        
   string-hash                                        2.7825+-0.0211     ^      2.6974+-0.0038        ^ definitely 1.0315x faster
   string-long-ident-equality                        39.0970+-0.1167     ?     39.2494+-0.2871        ?
   string-repeat-arith                               50.6061+-0.4740     ?     51.2458+-1.8089        ? might be 1.0126x slower
   string-sub                                       105.5550+-1.1782          105.3269+-0.6876        
   string-test                                        4.3789+-0.0655     ?      4.4287+-0.0419        ? might be 1.0114x slower
   string-var-equality                               70.1328+-0.1737     ?     70.2046+-0.2452        ?
   structure-hoist-over-transitions                   3.5490+-0.0447            3.5341+-0.0151        
   switch-char-constant                               3.5353+-0.0710     ?      3.5414+-0.0458        ?
   switch-char                                        8.1656+-0.0835     ?      8.2875+-0.0562        ? might be 1.0149x slower
   switch-constant                                    9.3335+-0.1342     ?      9.4512+-0.1343        ? might be 1.0126x slower
   switch-string-basic-big-var                       20.4201+-0.0225     ?     20.4668+-0.1011        ?
   switch-string-basic-big                           22.1810+-1.2241           21.7833+-1.1704          might be 1.0183x faster
   switch-string-basic-var                           20.3556+-0.1500           20.3348+-0.1209        
   switch-string-basic                               21.9028+-0.9033     ?     22.2716+-0.3790        ? might be 1.0168x slower
   switch-string-big-length-tower-var                29.3390+-0.4496           29.1082+-0.1524        
   switch-string-length-tower-var                    21.9693+-0.1025           21.9319+-0.0613        
   switch-string-length-tower                        16.5774+-0.0909           16.5717+-0.0790        
   switch-string-short                               16.6155+-0.0597           16.5795+-0.0951        
   switch                                            13.6382+-0.1323     ?     13.6925+-0.1206        ?
   tear-off-arguments-simple                          2.3758+-0.0055     !      2.4732+-0.0050        ! definitely 1.0410x slower
   tear-off-arguments                                 3.6354+-0.0054     !      3.7269+-0.0376        ! definitely 1.0252x slower
   temporal-structure                                17.1844+-0.0934     ?     17.2437+-0.0669        ?
   to-int32-boolean                                  21.4797+-0.1436     ?     21.5412+-0.1489        ?
   undefined-test                                     4.6071+-0.0183     !      4.6383+-0.0088        ! definitely 1.0068x slower
   weird-inlining-const-prop                          2.3755+-0.0090     !      2.4166+-0.0115        ! definitely 1.0173x slower

   &lt;arithmetic&gt;                                     133.7356+-0.2293     ?    134.0905+-0.3003        ? might be 1.0027x slower
   &lt;geometric&gt; *                                     14.7447+-0.0197     !     14.8143+-0.0118        ! definitely 1.0047x slower
   &lt;harmonic&gt;                                         5.2821+-0.0221     !      5.3155+-0.0080        ! definitely 1.0063x slower

                                                        TipOfTree               NoMoreForward                                   
All benchmarks:
   &lt;arithmetic&gt;                                     203.2610+-0.4389     ?    203.4725+-0.2671        ? might be 1.0010x slower
   &lt;geometric&gt;                                       20.4923+-0.0200     !     20.5853+-0.0216        ! definitely 1.0045x slower
   &lt;harmonic&gt;                                         4.8220+-0.0169     ?      4.8462+-0.0111        ? might be 1.0050x slower

                                                        TipOfTree               NoMoreForward                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.2988+-0.0424     !     49.4926+-0.0847        ! definitely 1.0039x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963174</commentid>
    <comment_count>19</comment_count>
      <attachid>220074</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-28 06:33:32 -0800</bug_when>
    <thetext>Created attachment 220074
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963176</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-28 09:15:46 -0800</bug_when>
    <thetext>Hmmm, it appears that there is a gbemu issue.  Here&apos;s the gbemu performance on my MBP with concurrent JIT disabled.  I will continue to look at this.  I suspect that the fix for this will be as small as the fix for the last perf pathology, so it&apos;s still useful to have the patch reviewed in its current form.


[pizlo@dethklok OpenSource] JSC_enableConcurrentJIT=false /Volumes/Data/pizlo/primary/Internal/Tools/Scripts/run-jsc-benchmarks TipOfTree:/Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc NoMoreForward:WebKitBuild/Release/jsc --benchmark gbemu --outer 10
72/72                                               
Generating benchmark report at /Volumes/Data/pizlo/tertiary/OpenSource/TipOfTree_NoMoreForward_Octane_dethklok_20131228_0914_report.txt
And raw data at /Volumes/Data/pizlo/tertiary/OpenSource/TipOfTree_NoMoreForward_Octane_dethklok_20131228_0914.json

Benchmark report for Octane on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r161072)
&quot;NoMoreForward&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r161072)

Collected 10 samples per benchmark/VM, with 10 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               NoMoreForward                                   
Octane and V8v7:
   gbemu          x2      43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower

V8v7:
   &lt;arithmetic&gt;                 ERROR                     ERROR             
   &lt;geometric&gt; *                ERROR                     ERROR             
   &lt;harmonic&gt;                   ERROR                     ERROR             

Octane including V8v7:
   &lt;arithmetic&gt;           43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
   &lt;geometric&gt; *          43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
   &lt;harmonic&gt;             43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963185</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-28 13:16:20 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Hmmm, it appears that there is a gbemu issue.  Here&apos;s the gbemu performance on my MBP with concurrent JIT disabled.  I will continue to look at this.  I suspect that the fix for this will be as small as the fix for the last perf pathology, so it&apos;s still useful to have the patch reviewed in its current form.
&gt; 
&gt; 
&gt; [pizlo@dethklok OpenSource] JSC_enableConcurrentJIT=false /Volumes/Data/pizlo/primary/Internal/Tools/Scripts/run-jsc-benchmarks TipOfTree:/Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc NoMoreForward:WebKitBuild/Release/jsc --benchmark gbemu --outer 10
&gt; 72/72                                               
&gt; Generating benchmark report at /Volumes/Data/pizlo/tertiary/OpenSource/TipOfTree_NoMoreForward_Octane_dethklok_20131228_0914_report.txt
&gt; And raw data at /Volumes/Data/pizlo/tertiary/OpenSource/TipOfTree_NoMoreForward_Octane_dethklok_20131228_0914.json
&gt; 
&gt; Benchmark report for Octane on dethklok (MacBookPro9,1).
&gt; 
&gt; VMs tested:
&gt; &quot;TipOfTree&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r161072)
&gt; &quot;NoMoreForward&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r161072)
&gt; 
&gt; Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc()
&gt; between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
&gt; jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
&gt; times with 95% confidence intervals in milliseconds.
&gt; 
&gt;                               TipOfTree               NoMoreForward                                   
&gt; Octane and V8v7:
&gt;    gbemu          x2      43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
&gt; 
&gt; V8v7:
&gt;    &lt;arithmetic&gt;                 ERROR                     ERROR             
&gt;    &lt;geometric&gt; *                ERROR                     ERROR             
&gt;    &lt;harmonic&gt;                   ERROR                     ERROR             
&gt; 
&gt; Octane including V8v7:
&gt;    &lt;arithmetic&gt;           43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
&gt;    &lt;geometric&gt; *          43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
&gt;    &lt;harmonic&gt;             43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower

It appears that, for some reason, the second time that we DFG-compile gbemu, it takes a lot longer to do it.  run-jsc-benchmarks will run gbemu in a sandbox and then run it again in a sandbox; it&apos;s that second run that gets measured.  And the first run appears to go as fast with this change as without.  But the second run regressed.  Furthermore, if I allow more per-run warm-up, then the regression disappears - so it&apos;s the warm-up of the second run that is the slow part.

Also the slow-down is greater with concurrent JIT.

So, the compiler is slower to compile the second time around.  Interesting.  Still investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963190</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-28 15:12:58 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; Hmmm, it appears that there is a gbemu issue.  Here&apos;s the gbemu performance on my MBP with concurrent JIT disabled.  I will continue to look at this.  I suspect that the fix for this will be as small as the fix for the last perf pathology, so it&apos;s still useful to have the patch reviewed in its current form.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; [pizlo@dethklok OpenSource] JSC_enableConcurrentJIT=false /Volumes/Data/pizlo/primary/Internal/Tools/Scripts/run-jsc-benchmarks TipOfTree:/Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc NoMoreForward:WebKitBuild/Release/jsc --benchmark gbemu --outer 10
&gt; &gt; 72/72                                               
&gt; &gt; Generating benchmark report at /Volumes/Data/pizlo/tertiary/OpenSource/TipOfTree_NoMoreForward_Octane_dethklok_20131228_0914_report.txt
&gt; &gt; And raw data at /Volumes/Data/pizlo/tertiary/OpenSource/TipOfTree_NoMoreForward_Octane_dethklok_20131228_0914.json
&gt; &gt; 
&gt; &gt; Benchmark report for Octane on dethklok (MacBookPro9,1).
&gt; &gt; 
&gt; &gt; VMs tested:
&gt; &gt; &quot;TipOfTree&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r161072)
&gt; &gt; &quot;NoMoreForward&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r161072)
&gt; &gt; 
&gt; &gt; Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc()
&gt; &gt; between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
&gt; &gt; jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
&gt; &gt; times with 95% confidence intervals in milliseconds.
&gt; &gt; 
&gt; &gt;                               TipOfTree               NoMoreForward                                   
&gt; &gt; Octane and V8v7:
&gt; &gt;    gbemu          x2      43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
&gt; &gt; 
&gt; &gt; V8v7:
&gt; &gt;    &lt;arithmetic&gt;                 ERROR                     ERROR             
&gt; &gt;    &lt;geometric&gt; *                ERROR                     ERROR             
&gt; &gt;    &lt;harmonic&gt;                   ERROR                     ERROR             
&gt; &gt; 
&gt; &gt; Octane including V8v7:
&gt; &gt;    &lt;arithmetic&gt;           43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
&gt; &gt;    &lt;geometric&gt; *          43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
&gt; &gt;    &lt;harmonic&gt;             43.64871+-1.18154    !    58.01383+-0.18044       ! definitely 1.3291x slower
&gt; 
&gt; It appears that, for some reason, the second time that we DFG-compile gbemu, it takes a lot longer to do it.  run-jsc-benchmarks will run gbemu in a sandbox and then run it again in a sandbox; it&apos;s that second run that gets measured.  And the first run appears to go as fast with this change as without.  But the second run regressed.  Furthermore, if I allow more per-run warm-up, then the regression disappears - so it&apos;s the warm-up of the second run that is the slow part.
&gt; 
&gt; Also the slow-down is greater with concurrent JIT.
&gt; 
&gt; So, the compiler is slower to compile the second time around.  Interesting.  Still investigating.

Found the issue.  And boy was I wrong.  It appears that MovHint wasn&apos;t accounted for in TypeCheckHoisting.  It&apos;s a mystery to me, why it was the second execution of gbemu that was affected and not the first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963191</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-28 16:39:02 -0800</bug_when>
    <thetext>Latest performance numbers.  All throughput regressions have been taken care of.  There is a *slight* compile-time regression, and I think we should eat it.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r161072)
&quot;NoMoreForward&quot; at /Volumes/Data/fromMiniMe/tertiary/OpenSource/WebKitBuild/Release/jsc (r161072)

Collected 10 samples per benchmark/VM, with 10 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               NoMoreForward                                   
SunSpider:
   3d-cube                                            7.7707+-0.0871     ?      7.8824+-0.1566        ? might be 1.0144x slower
   3d-morph                                           8.8038+-0.1084     ?      8.8590+-0.0708        ?
   3d-raytrace                                        8.9614+-0.1284     ?      9.0334+-0.0684        ?
   access-binary-trees                                2.1138+-0.0141     ?      2.1619+-0.0691        ? might be 1.0227x slower
   access-fannkuch                                    7.9563+-0.0835     ?      8.1200+-0.0969        ? might be 1.0206x slower
   access-nbody                                       4.2587+-0.0066     !      4.2919+-0.0236        ! definitely 1.0078x slower
   access-nsieve                                      5.0052+-0.0292     ?      5.0285+-0.0354        ?
   bitops-3bit-bits-in-byte                           1.8965+-0.0174     ?      1.9208+-0.0267        ? might be 1.0128x slower
   bitops-bits-in-byte                                7.2181+-0.0623            7.1711+-0.0499        
   bitops-bitwise-and                                 3.0131+-0.0589     ?      3.0677+-0.0380        ? might be 1.0181x slower
   bitops-nsieve-bits                                 4.6268+-0.0544     !      4.7203+-0.0218        ! definitely 1.0202x slower
   controlflow-recursive                              3.2028+-0.0191            3.1906+-0.0221        
   crypto-aes                                         5.5542+-0.0093     !      5.5987+-0.0321        ! definitely 1.0080x slower
   crypto-md5                                         3.3373+-0.0099     !      3.3952+-0.0118        ! definitely 1.0173x slower
   crypto-sha1                                        3.0063+-0.0087     !      3.0380+-0.0227        ! definitely 1.0105x slower
   date-format-tofte                                 12.1569+-0.2034           12.0294+-0.1489          might be 1.0106x faster
   date-format-xparb                                  8.7315+-0.1043            8.6873+-0.1072        
   math-cordic                                        4.2968+-0.0323     ?      4.3562+-0.0960        ? might be 1.0138x slower
   math-partial-sums                                 10.2246+-0.1458     ?     10.2996+-0.0990        ?
   math-spectral-norm                                 2.7763+-0.0286     ?      2.7953+-0.0054        ?
   regexp-dna                                        12.9987+-0.0911     ?     13.0022+-0.1049        ?
   string-base64                                      5.7871+-0.0302     !      5.9697+-0.0647        ! definitely 1.0315x slower
   string-fasta                                      10.4870+-0.0763           10.4587+-0.0828        
   string-tagcloud                                   15.6906+-0.1642           15.5980+-0.1377        
   string-unpack-code                                31.3225+-0.1378           31.1885+-0.0810        
   string-validate-input                              7.0844+-0.0522     ?      7.1627+-0.1045        ? might be 1.0111x slower

   &lt;arithmetic&gt; *                                     7.6262+-0.0126     !      7.6549+-0.0140        ! definitely 1.0038x slower
   &lt;geometric&gt;                                        6.1031+-0.0079     !      6.1503+-0.0164        ! definitely 1.0077x slower
   &lt;harmonic&gt;                                         5.0040+-0.0088     !      5.0568+-0.0199        ! definitely 1.0105x slower

                                                        TipOfTree               NoMoreForward                                   
LongSpider:
   3d-cube                                         2686.7349+-5.6732         2680.4095+-4.9259        
   3d-morph                                        1499.3344+-1.8816     ?   1500.0261+-1.7393        ?
   3d-raytrace                                     1513.7138+-11.5130        1498.6762+-5.4061          might be 1.0100x faster
   access-binary-trees                             2457.6009+-26.4828    ?   2483.5420+-31.6203       ? might be 1.0106x slower
   access-fannkuch                                  664.9965+-0.3552     ^    658.9932+-3.9321        ^ definitely 1.0091x faster
   access-nbody                                    1496.0395+-0.9849         1495.7793+-0.8817        
   access-nsieve                                   1547.0229+-3.5808     ?   1551.3904+-5.1761        ?
   bitops-3bit-bits-in-byte                         125.8471+-0.0819     ?    125.9064+-0.0997        ?
   bitops-bits-in-byte                              601.2117+-2.5347     ?    601.9310+-5.6803        ?
   bitops-nsieve-bits                              1069.3648+-30.0227        1049.4630+-0.6587          might be 1.0190x faster
   controlflow-recursive                           1473.0030+-0.4945     ?   1480.3208+-17.9566       ?
   crypto-aes                                      1667.9490+-15.4315        1664.7693+-10.0508       
   crypto-md5                                      1165.4767+-1.4507     !   1232.3499+-0.7388        ! definitely 1.0574x slower
   crypto-sha1                                     1611.4396+-6.0027         1608.3483+-3.7429        
   date-format-tofte                               1232.8215+-9.5833         1224.2186+-6.8218        
   date-format-xparb                               1500.9848+-16.2641    ^   1456.3645+-13.0716       ^ definitely 1.0306x faster
   math-cordic                                     1736.6626+-1.1812     ?   1750.5305+-23.1365       ?
   math-partial-sums                               1308.8438+-1.7715     ?   1309.0471+-2.3986        ?
   math-spectral-norm                              1833.2356+-13.4300        1826.6121+-0.4708        
   string-base64                                    590.2314+-2.2888          589.4660+-2.0555        
   string-fasta                                     992.8766+-7.1027     ?    996.0589+-4.7846        ?
   string-tagcloud                                  391.4510+-1.6624          389.6454+-1.3961        

   &lt;arithmetic&gt;                                    1325.7656+-1.4958     ?   1326.0840+-2.4506        ? might be 1.0002x slower
   &lt;geometric&gt; *                                   1131.7151+-1.2368         1131.5651+-1.6968          might be 1.0001x faster
   &lt;harmonic&gt;                                       819.4391+-0.5969          819.0512+-0.7493          might be 1.0005x faster

                                                        TipOfTree               NoMoreForward                                   
V8Spider:
   crypto                                            79.7771+-1.1944     ?     79.9386+-0.1388        ?
   deltablue                                         98.0596+-0.4655     !     99.6041+-0.5674        ! definitely 1.0158x slower
   earley-boyer                                      73.0492+-1.2485     ?     74.0662+-0.4442        ? might be 1.0139x slower
   raytrace                                          44.3350+-0.3555     !     46.1064+-0.2998        ! definitely 1.0400x slower
   regexp                                           100.1912+-0.1154          100.1866+-0.3198        
   richards                                         134.1635+-1.5732     ^    131.1238+-0.6062        ^ definitely 1.0232x faster
   splay                                             46.7470+-1.1223     ?     46.7613+-0.2829        ?

   &lt;arithmetic&gt;                                      82.3318+-0.3292     ?     82.5410+-0.1494        ? might be 1.0025x slower
   &lt;geometric&gt; *                                     76.9007+-0.3472     !     77.4393+-0.1201        ! definitely 1.0070x slower
   &lt;harmonic&gt;                                        71.5489+-0.4120     !     72.3610+-0.1201        ! definitely 1.0114x slower

                                                        TipOfTree               NoMoreForward                                   
Octane and V8v7:
   encrypt                                           0.46568+-0.00030    !     0.46824+-0.00035       ! definitely 1.0055x slower
   decrypt                                           8.57894+-0.00702    ?     8.58905+-0.01351       ?
   deltablue                                x2       0.56313+-0.00338    ?     0.56842+-0.00608       ?
   earley                                            0.90842+-0.00680          0.90778+-0.00782       
   boyer                                            12.44349+-0.03388    ?    12.51499+-0.04530       ?
   raytrace                                 x2       4.31395+-0.05929    ?     4.36641+-0.05867       ? might be 1.0122x slower
   regexp                                   x2      32.90332+-0.13148         32.87480+-0.26387       
   richards                                 x2       0.44132+-0.00713          0.43653+-0.00977         might be 1.0110x faster
   splay                                    x2       0.63789+-0.00369          0.63783+-0.00411       
   navier-stokes                            x2      10.76385+-0.13875    ?    10.76497+-0.14090       ?
   closure                                           0.43352+-0.00080          0.43241+-0.00109       
   jquery                                            6.35243+-0.00955          6.34127+-0.00999       
   gbemu                                    x2      71.65755+-1.10893    ?    71.76569+-1.21169       ?
   mandreel                                 x2     136.22167+-0.97786        135.78187+-0.61829       
   pdfjs                                    x2     102.02107+-0.54935    ?   102.26446+-0.37790       ?
   box2d                                    x2      34.97106+-0.38590    ?    35.04815+-0.44866       ?

V8v7:
   &lt;arithmetic&gt;                                      7.60272+-0.02015    ?     7.61112+-0.03893       ? might be 1.0011x slower
   &lt;geometric&gt; *                                     2.52008+-0.00734    ?     2.52493+-0.01534       ? might be 1.0019x slower
   &lt;harmonic&gt;                                        1.04057+-0.00538          1.04050+-0.00915         might be 1.0001x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.46816+-0.11611    ?    31.47200+-0.10195       ? might be 1.0001x slower
   &lt;geometric&gt; *                                     6.98359+-0.01601    ?     6.99220+-0.03204       ? might be 1.0012x slower
   &lt;harmonic&gt;                                        1.44768+-0.00640          1.44709+-0.01101         might be 1.0004x faster

                                                        TipOfTree               NoMoreForward                                   
Kraken:
   ai-astar                                          494.245+-0.733      ?     494.726+-0.459         ?
   audio-beat-detection                              224.925+-0.958      ?     224.986+-1.830         ?
   audio-dft                                         290.340+-0.812            289.982+-0.441         
   audio-fft                                         130.697+-0.117      ?     130.729+-0.162         ?
   audio-oscillator                                  244.433+-0.715            243.920+-0.430         
   imaging-darkroom                                  287.738+-3.945            287.587+-3.982         
   imaging-desaturate                                158.368+-0.257      ?     158.590+-0.263         ?
   imaging-gaussian-blur                             362.673+-0.211      ?     364.774+-3.893         ?
   json-parse-financial                               80.624+-0.516      ?      80.812+-0.405         ?
   json-stringify-tinderbox                          103.774+-0.317      ?     104.257+-0.405         ?
   stanford-crypto-aes                                91.329+-0.384      ?      91.781+-0.402         ?
   stanford-crypto-ccm                               102.150+-0.896            101.729+-1.292         
   stanford-crypto-pbkdf2                            260.090+-2.305      ?     261.708+-3.676         ?
   stanford-crypto-sha256-iterative                  115.559+-1.789            115.070+-1.015         

   &lt;arithmetic&gt; *                                    210.496+-0.389      ?     210.761+-0.467         ? might be 1.0013x slower
   &lt;geometric&gt;                                       180.824+-0.315      ?     181.010+-0.391         ? might be 1.0010x slower
   &lt;harmonic&gt;                                        156.447+-0.267      ?     156.602+-0.385         ? might be 1.0010x slower

                                                        TipOfTree               NoMoreForward                                   
JSRegress:
   adapt-to-double-divide                            22.7427+-0.1268     ?     22.8070+-0.0983        ?
   aliased-arguments-getbyval                         0.9999+-0.0130     ?      1.0202+-0.0154        ? might be 1.0203x slower
   allocate-big-object                                3.0367+-0.0098     ?      3.0629+-0.0212        ?
   arity-mismatch-inlining                            0.9637+-0.0040     !      0.9775+-0.0055        ! definitely 1.0143x slower
   array-access-polymorphic-structure                10.3905+-0.4230     ?     10.5821+-0.4108        ? might be 1.0184x slower
   array-nonarray-polymorhpic-access                 58.2568+-0.1692     ?     58.3820+-0.3411        ?
   array-with-double-add                              5.8134+-0.0376            5.8071+-0.0138        
   array-with-double-increment                        4.3291+-0.0299     ?      4.3531+-0.0468        ?
   array-with-double-mul-add                          6.8623+-0.0894            6.8239+-0.0837        
   array-with-double-sum                              7.9760+-0.1243     ?      8.0129+-0.1034        ?
   array-with-int32-add-sub                          10.3805+-0.0869     ?     10.4847+-0.0746        ? might be 1.0100x slower
   array-with-int32-or-double-sum                     8.0200+-0.0366     ?      8.0634+-0.0453        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    118.2480+-1.0564     ?    118.5870+-0.5100        ?
   ArrayBuffer-DataView-alloc-long-lived             30.6127+-0.1521     ?     30.9072+-0.1556        ?
   ArrayBuffer-Int32Array-byteOffset                  6.3678+-0.1423     ^      6.0835+-0.1164        ^ definitely 1.0467x faster
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    217.4163+-3.4889          216.6251+-1.9894        
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.4321+-0.8320          166.1120+-1.3279        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    117.6469+-1.2687     ?    118.2269+-1.1736        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     48.9378+-0.5204     ?     49.2790+-0.2798        ?
   ArrayBuffer-Int8Array-alloc-long-lived            30.4206+-0.1132     ?     30.6008+-0.1131        ?
   ArrayBuffer-Int8Array-alloc                       26.4590+-0.3060     ?     26.4628+-0.2584        ?
   asmjs_bool_bug                                     9.3014+-0.0801            9.2731+-0.0676        
   basic-set                                         19.8900+-0.1735           19.8848+-0.2593        
   big-int-mul                                        5.5439+-0.0200            5.5230+-0.0711        
   boolean-test                                       4.4316+-0.0494     ?      4.4874+-0.0189        ? might be 1.0126x slower
   branch-fold                                        4.9963+-0.0069     !      5.0220+-0.0089        ! definitely 1.0051x slower
   by-val-generic                                    12.6913+-0.1427           12.5254+-0.1162          might be 1.0132x faster
   captured-assignments                               0.6374+-0.0040     ?      0.6655+-0.0433        ? might be 1.0441x slower
   cast-int-to-double                                12.4756+-0.1211     ?     12.5516+-0.1285        ?
   cell-argument                                     15.7582+-0.3975     ?     15.8793+-0.4241        ?
   cfg-simplify                                       4.0086+-0.0393     ?      4.0105+-0.0181        ?
   chain-custom-getter                              162.8260+-7.4455          160.2959+-5.6059          might be 1.0158x faster
   chain-getter-access                              500.2018+-6.5513          495.1475+-5.1070          might be 1.0102x faster
   cmpeq-obj-to-obj-other                            12.8920+-0.4636           12.3184+-0.4649          might be 1.0466x faster
   constant-test                                      9.0254+-0.0721            8.9036+-0.1302          might be 1.0137x faster
   DataView-custom-properties                       126.3695+-0.8445          126.2512+-0.6817        
   delay-tear-off-arguments-strictmode                3.6470+-0.0143     !      3.6884+-0.0052        ! definitely 1.0113x slower
   destructuring-arguments-length                   175.6819+-2.3269     ?    177.5190+-1.8969        ? might be 1.0105x slower
   destructuring-arguments                            8.8559+-0.0928     ?      8.9486+-0.1074        ? might be 1.0105x slower
   destructuring-swap                                 8.7100+-0.0828     ?      8.7927+-0.0745        ?
   direct-arguments-getbyval                          0.8763+-0.0129     ?      0.8823+-0.0124        ?
   double-get-by-val-out-of-bounds                    7.4235+-0.0701            7.3951+-0.0587        
   double-pollution-getbyval                         11.1518+-0.0671           11.1029+-0.0897        
   double-pollution-putbyoffset                       6.0825+-0.0410     !      6.4924+-0.2225        ! definitely 1.0674x slower
   double-to-int32-typed-array-no-inline              2.5928+-0.0194     !      2.6488+-0.0083        ! definitely 1.0216x slower
   double-to-int32-typed-array                        2.2288+-0.0131     !      2.2998+-0.0051        ! definitely 1.0319x slower
   double-to-uint32-typed-array-no-inline             2.7502+-0.0133     !      2.8129+-0.0155        ! definitely 1.0228x slower
   double-to-uint32-typed-array                       2.4529+-0.0255     !      2.5709+-0.0071        ! definitely 1.0481x slower
   empty-string-plus-int                             10.8984+-0.0792     !     11.1141+-0.1159        ! definitely 1.0198x slower
   emscripten-cube2hash                              55.6869+-0.5751     ?     55.7474+-0.7519        ?
   emscripten-memops                               7055.2471+-1.2636         7052.4138+-12.4688       
   external-arguments-getbyval                        2.1319+-0.0170     !      2.1682+-0.0152        ! definitely 1.0170x slower
   external-arguments-putbyval                        3.0689+-0.0109     ?      3.1305+-0.1219        ? might be 1.0201x slower
   fixed-typed-array-storage-var-index                1.4140+-0.0192     ?      1.4203+-0.0075        ?
   fixed-typed-array-storage                          0.9939+-0.0056     !      1.0188+-0.0095        ! definitely 1.0250x slower
   Float32Array-matrix-mult                           6.5604+-0.0596     ?      6.6268+-0.0154        ? might be 1.0101x slower
   Float32Array-to-Float64Array-set                  92.9188+-0.5070     ?     94.3849+-1.5358        ? might be 1.0158x slower
   Float64Array-alloc-long-lived                    103.7086+-0.5559     ?    103.7479+-0.4745        ?
   Float64Array-to-Int16Array-set                   117.6815+-1.6012          116.7557+-0.6259        
   fold-double-to-int                                20.6970+-0.1931           20.6781+-0.2092        
   for-of-iterate-array-entries                       8.6394+-0.1221     ?      8.6831+-0.1296        ?
   for-of-iterate-array-keys                          3.4580+-0.0432     ?      3.4594+-0.0564        ?
   for-of-iterate-array-values                        2.9744+-0.0583     ?      3.0058+-0.0373        ? might be 1.0105x slower
   function-dot-apply                                 3.1969+-0.0387     ^      3.1339+-0.0065        ^ definitely 1.0201x faster
   function-test                                      4.8656+-0.0585     ?      4.9009+-0.0606        ?
   get-by-id-chain-from-try-block                     7.9878+-0.0888     ?      8.0966+-0.0901        ? might be 1.0136x slower
   get-by-id-proto-or-self                           25.9654+-0.3094           25.8907+-0.2234        
   get-by-id-self-or-proto                           23.8658+-0.7419     ?     24.0109+-0.6687        ?
   get-by-val-out-of-bounds                           7.2371+-0.0506     ?      7.2829+-0.0596        ?
   get_callee_monomorphic                             4.8865+-0.0491     ?      5.0059+-0.1125        ? might be 1.0245x slower
   get_callee_polymorphic                             4.6928+-0.0215     !      4.8507+-0.0247        ! definitely 1.0336x slower
   global-var-const-infer-fire-from-opt               1.0951+-0.0362            1.0463+-0.0461          might be 1.0466x faster
   global-var-const-infer                             0.8142+-0.0054     ?      0.8197+-0.0050        ?
   HashMap-put-get-iterate-keys                      41.9820+-0.1880     !     42.6426+-0.3409        ! definitely 1.0157x slower
   HashMap-put-get-iterate                           53.6611+-0.3064     !     54.4919+-0.3173        ! definitely 1.0155x slower
   HashMap-string-put-get-iterate                    51.1104+-0.6247     !     52.4024+-0.3899        ! definitely 1.0253x slower
   imul-double-only                                  17.7427+-0.1347     ?     17.7727+-0.0620        ?
   imul-int-only                                     14.8241+-0.1606     ?     14.9155+-0.0984        ?
   imul-mixed                                        21.8230+-0.0612     ?     21.8854+-0.1352        ?
   in-four-cases                                     26.0243+-0.1555           25.9413+-0.1530        
   in-one-case-false                                 12.1930+-0.2111           12.0696+-0.0880          might be 1.0102x faster
   in-one-case-true                                  12.1702+-0.1818           12.0379+-0.0915          might be 1.0110x faster
   in-two-cases                                      12.8646+-0.1009           12.8434+-0.1182        
   indexed-properties-in-objects                      4.2034+-0.0486     ?      4.2369+-0.0148        ?
   infer-closure-const-then-mov-no-inline            15.3924+-0.1092     ?     15.4089+-0.1186        ?
   infer-closure-const-then-mov                      28.9156+-0.0993     ?     29.1696+-0.3726        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.8068+-0.1231     ?     17.8792+-0.1363        ?
   infer-closure-const-then-put-to-scope             35.9304+-0.2532     ?     35.9792+-0.2175        ?
   infer-closure-const-then-reenter-no-inline   
                                                     84.3723+-0.1810     ?     84.4449+-0.1023        ?
   infer-closure-const-then-reenter                  36.0461+-0.3386     ?     36.3387+-0.2174        ?
   infer-one-time-closure-ten-vars                   29.0508+-0.0669           29.0302+-0.0652        
   infer-one-time-closure-two-vars                   28.8723+-0.0558           28.8016+-0.1769        
   infer-one-time-closure                            28.7812+-0.1184           28.7693+-0.1046        
   infer-one-time-deep-closure                       58.3046+-0.3957     ?     58.4623+-0.3578        ?
   inline-arguments-access                            1.6652+-0.0217     !      1.7322+-0.0364        ! definitely 1.0402x slower
   inline-arguments-aliased-access                    1.7682+-0.0159     !      1.8452+-0.0230        ! definitely 1.0436x slower
   inline-arguments-local-escape                     23.0904+-0.2141     ?     23.5501+-0.3133        ? might be 1.0199x slower
   inline-get-scoped-var                              7.4664+-0.1039     ?      7.4814+-0.0594        ?
   inlined-put-by-id-transition                      15.4099+-0.3138     ?     15.5037+-0.1969        ?
   int-or-other-abs-then-get-by-val                   9.5045+-0.0561     ?      9.5367+-0.1196        ?
   int-or-other-abs-zero-then-get-by-val             37.5077+-0.4739     ?     38.2695+-0.3040        ? might be 1.0203x slower
   int-or-other-add-then-get-by-val                  10.6737+-0.0944           10.6133+-0.0755        
   int-or-other-add                                  11.1091+-0.1866           10.9473+-0.1322          might be 1.0148x faster
   int-or-other-div-then-get-by-val                   6.4487+-0.0293            6.4325+-0.0258        
   int-or-other-max-then-get-by-val                   8.8599+-0.2454     ?      8.9147+-0.2137        ?
   int-or-other-min-then-get-by-val                   7.0839+-0.0805            7.0781+-0.0967        
   int-or-other-mod-then-get-by-val                   6.2138+-0.0775     ?      6.3002+-0.0245        ? might be 1.0139x slower
   int-or-other-mul-then-get-by-val                   6.6526+-0.0342     ?      6.6610+-0.0733        ?
   int-or-other-neg-then-get-by-val                   7.9921+-0.0823     ?      8.0008+-0.0156        ?
   int-or-other-neg-zero-then-get-by-val             36.9343+-0.1202     !     37.7557+-0.2722        ! definitely 1.0222x slower
   int-or-other-sub-then-get-by-val                  10.6918+-0.0845           10.6610+-0.1030        
   int-or-other-sub                                   8.9964+-0.0875     ?      9.0404+-0.0926        ?
   int-overflow-local                                 6.4880+-0.0818     ?      6.5154+-0.0468        ?
   Int16Array-alloc-long-lived                       67.5609+-0.4870     ?     68.2969+-0.4374        ? might be 1.0109x slower
   Int16Array-bubble-sort-with-byteLength            48.9817+-0.1798     ?     49.2759+-0.6091        ?
   Int16Array-bubble-sort                            47.9183+-0.1540     ?     47.9507+-0.1160        ?
   Int16Array-load-int-mul                            1.8140+-0.0066     ?      1.8306+-0.0112        ?
   Int16Array-to-Int32Array-set                      91.7691+-0.8777           89.8468+-1.9884          might be 1.0214x faster
   Int32Array-alloc-huge-long-lived                 704.7210+-1.9232          702.6489+-3.0684        
   Int32Array-alloc-huge                            801.8112+-9.1708     ?    812.0109+-5.8820        ? might be 1.0127x slower
   Int32Array-alloc-large-long-lived                974.6950+-9.3393          971.4815+-9.2652        
   Int32Array-alloc-large                            45.5516+-1.0413           45.5341+-1.0939        
   Int32Array-alloc-long-lived                       80.8311+-0.9737           80.7990+-0.4171        
   Int32Array-alloc                                   4.5260+-0.0065     ?      4.5369+-0.0088        ?
   Int32Array-Int8Array-view-alloc                   14.9161+-0.0569     !     15.0835+-0.0517        ! definitely 1.0112x slower
   int52-spill                                       12.7781+-0.1083           12.7601+-0.1259        
   Int8Array-alloc-long-lived                        67.3676+-0.4653           67.2302+-0.6704        
   Int8Array-load-with-byteLength                     5.0598+-0.0062     ?      5.0705+-0.0068        ?
   Int8Array-load                                     5.0234+-0.0556     ?      5.0482+-0.0598        ?
   integer-divide                                    15.0283+-0.1240     ?     15.1857+-0.0876        ? might be 1.0105x slower
   integer-modulo                                     2.0616+-0.0101     ?      2.0706+-0.0088        ?
   large-int-captured                                 9.8416+-0.0969     !      9.9855+-0.0311        ! definitely 1.0146x slower
   large-int-neg                                     26.1120+-0.1628     ?     26.2685+-0.2313        ?
   large-int                                         23.1722+-0.1403           23.1427+-0.1821        
   logical-not                                       10.6172+-0.2857           10.5604+-0.2835        
   lots-of-fields                                    12.6732+-0.1015     ?     12.6803+-0.1372        ?
   make-indexed-storage                               4.3678+-0.0466            4.2985+-0.1309          might be 1.0161x faster
   make-rope-cse                                      6.1243+-0.0644     ?      6.1931+-0.1501        ? might be 1.0112x slower
   marsaglia-larger-ints                            111.9808+-0.1205     ?    112.0232+-0.3242        ?
   marsaglia-osr-entry                               46.9977+-0.1310           46.9961+-0.1573        
   marsaglia                                        466.1451+-5.7049     ?    466.3019+-6.0786        ?
   method-on-number                                  30.1759+-0.8705           29.8363+-0.6955          might be 1.0114x faster
   negative-zero-divide                               0.4271+-0.0081     ?      0.4285+-0.0033        ?
   negative-zero-modulo                               0.4068+-0.0021     ?      0.4129+-0.0042        ? might be 1.0149x slower
   negative-zero-negate                               0.3924+-0.0040     ?      0.3936+-0.0022        ?
   nested-function-parsing-random                   381.9590+-0.8553     !    383.1846+-0.3498        ! definitely 1.0032x slower
   nested-function-parsing                           47.5205+-0.0543     !     47.8634+-0.1086        ! definitely 1.0072x slower
   new-array-buffer-dead                              3.7685+-0.0438     ?      3.8131+-0.0460        ? might be 1.0118x slower
   new-array-buffer-push                             10.6199+-0.1555           10.6150+-0.2313        
   new-array-dead                                    28.7165+-0.3851           28.5535+-0.1193        
   new-array-push                                     6.9363+-0.0560     ?      6.9612+-0.0578        ?
   number-test                                        4.4178+-0.0303     ?      4.4439+-0.0271        ?
   object-closure-call                               13.5192+-0.0782     ?     13.5818+-0.0949        ?
   object-test                                        4.7393+-0.0185     ?      4.7488+-0.0270        ?
   poly-stricteq                                     87.3225+-0.6516           86.8721+-0.5674        
   polymorphic-structure                             20.8079+-0.5797     ?     21.3885+-0.0805        ? might be 1.0279x slower
   polyvariant-monomorphic-get-by-id                 12.0300+-0.1178           12.0234+-0.1440        
   proto-custom-getter                              157.7544+-0.0608     ?    161.1137+-5.7821        ? might be 1.0213x slower
   proto-getter-access                              494.2127+-4.0239     ?    494.4868+-4.9632        ?
   put-by-id                                         19.8108+-0.2635           19.6645+-0.3838        
   put-by-val-large-index-blank-indexing-type   
                                                     21.0484+-0.2499           20.7587+-0.1179          might be 1.0140x faster
   put-by-val-machine-int                             3.3388+-0.0076     !      3.3696+-0.0150        ! definitely 1.0092x slower
   rare-osr-exit-on-local                            20.2268+-0.1453     ?     20.3922+-0.1128        ?
   register-pressure-from-osr                        31.3952+-0.0791     ?     31.4557+-0.0710        ?
   simple-activation-demo                            35.2751+-0.1041           35.2554+-0.1019        
   simple-custom-getter                             517.8108+-26.9562         509.9667+-21.4592         might be 1.0154x faster
   simple-getter-access                             790.1361+-10.3817         790.0570+-4.7424        
   slow-array-profile-convergence                     4.1169+-0.0651            4.0492+-0.0194          might be 1.0167x faster
   slow-convergence                                   4.4743+-0.0258     !      4.6213+-0.0573        ! definitely 1.0329x slower
   sparse-conditional                                 1.4738+-0.0081     ?      1.5029+-0.0213        ? might be 1.0197x slower
   splice-to-remove                                  76.8394+-0.1419     ?     77.2979+-0.9268        ?
   stepanov_container                             10162.0477+-18.7154    ?  10203.5277+-56.2890       ?
   string-concat-object                               3.2269+-0.0124     ?      3.2407+-0.0190        ?
   string-concat-pair-object                          3.1847+-0.0469     ?      3.1940+-0.0430        ?
   string-concat-pair-simple                         17.0686+-0.2588     ?     17.3539+-0.2940        ? might be 1.0167x slower
   string-concat-simple                              17.5087+-0.2340           17.2734+-0.4672          might be 1.0136x faster
   string-cons-repeat                                10.8532+-0.0430     ?     10.8821+-0.0429        ?
   string-cons-tower                                 11.3388+-0.0340     ?     11.3790+-0.0412        ?
   string-equality                                   42.7407+-0.2897     ?     42.7701+-0.1059        ?
   string-get-by-val-big-char                        12.6794+-0.0757     !     12.8562+-0.0573        ! definitely 1.0139x slower
   string-get-by-val-out-of-bounds-insane             5.8974+-0.1030            5.7710+-0.1212          might be 1.0219x faster
   string-get-by-val-out-of-bounds                    5.3206+-0.0652     ?      5.3341+-0.0320        ?
   string-get-by-val                                  4.9626+-0.0237            4.9374+-0.0342        
   string-hash                                        2.7838+-0.0205     ?      2.7897+-0.0041        ?
   string-long-ident-equality                        39.1227+-0.0819     ?     39.1705+-0.2771        ?
   string-repeat-arith                               50.3878+-0.5745     ?     50.4924+-0.3274        ?
   string-sub                                       104.8552+-0.8673     ?    104.8911+-0.4349        ?
   string-test                                        4.3379+-0.0549     ?      4.4135+-0.0229        ? might be 1.0174x slower
   string-var-equality                               71.8989+-3.4223           70.0436+-0.1551          might be 1.0265x faster
   structure-hoist-over-transitions                   3.5131+-0.0088     !      3.5463+-0.0229        ! definitely 1.0095x slower
   switch-char-constant                               3.4924+-0.0062     !      3.5066+-0.0074        ! definitely 1.0041x slower
   switch-char                                        8.1731+-0.0399            8.1526+-0.0580        
   switch-constant                                    9.4787+-0.1028            9.3911+-0.1064        
   switch-string-basic-big-var                       20.3829+-0.0961     ?     20.4764+-0.1473        ?
   switch-string-basic-big                           22.2445+-1.0974     ?     22.3371+-1.3547        ?
   switch-string-basic-var                           20.1984+-0.0861     ?     20.3442+-0.0758        ?
   switch-string-basic                               21.8081+-0.7406           21.5628+-0.7483          might be 1.0114x faster
   switch-string-big-length-tower-var                29.4119+-0.4712           29.0871+-0.0982          might be 1.0112x faster
   switch-string-length-tower-var                    22.0609+-0.2785           21.9725+-0.1338        
   switch-string-length-tower                        16.5795+-0.0798           16.5795+-0.1014        
   switch-string-short                               16.6371+-0.2308           16.5920+-0.1364        
   switch                                            13.6430+-0.1834           13.6220+-0.1305        
   tear-off-arguments-simple                          2.3823+-0.0118     !      2.5251+-0.1111        ! definitely 1.0600x slower
   tear-off-arguments                                 3.6465+-0.0148     !      3.7044+-0.0063        ! definitely 1.0159x slower
   temporal-structure                                17.1798+-0.1177     ?     17.2641+-0.1325        ?
   to-int32-boolean                                  21.4377+-0.1297     !     21.7617+-0.1010        ! definitely 1.0151x slower
   undefined-test                                     4.6360+-0.0533     ?      4.6463+-0.0200        ?
   weird-inlining-const-prop                          2.3766+-0.0133     !      2.4241+-0.0103        ! definitely 1.0200x slower

   &lt;arithmetic&gt;                                     133.8209+-0.1897     ?    134.0238+-0.2902        ? might be 1.0015x slower
   &lt;geometric&gt; *                                     14.7484+-0.0139     !     14.8129+-0.0157        ! definitely 1.0044x slower
   &lt;harmonic&gt;                                         5.2757+-0.0061     !      5.3253+-0.0184        ! definitely 1.0094x slower

                                                        TipOfTree               NoMoreForward                                   
All benchmarks:
   &lt;arithmetic&gt;                                     203.1066+-0.1605     ?    203.2889+-0.2777        ? might be 1.0009x slower
   &lt;geometric&gt;                                       20.4989+-0.0148     !     20.5802+-0.0218        ! definitely 1.0040x slower
   &lt;harmonic&gt;                                         4.8251+-0.0078     !      4.8572+-0.0147        ! definitely 1.0066x slower

                                                        TipOfTree               NoMoreForward                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.3180+-0.0403     !     49.4617+-0.0643        ! definitely 1.0029x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963192</commentid>
    <comment_count>24</comment_count>
      <attachid>220080</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-28 16:40:35 -0800</bug_when>
    <thetext>Created attachment 220080
the patch

This fixes the gbemu regression by adding MovHint to the list of ignored opcodes in TypeCheckHoisting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963238</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-29 13:47:32 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/161126</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219944</attachid>
            <date>2013-12-23 17:10:17 -0800</date>
            <delta_ts>2013-12-24 05:59:01 -0800</delta_ts>
            <desc>first parts</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7223</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDEyICsyMzUsMTYgQEAgcHJp
dmF0ZToKICAgICBlbnVtIFNldE1vZGUgeyBOb3JtYWxTZXQsIFNldE9uRW50cnkgfTsKICAgICBO
b2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRN
b2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAgICAvLyBJcyB0aGlzIGFuIGFy
Z3VtZW50PwotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2V0QXJndW1lbnQob3BlcmFuZCwgdmFsdWUsIHNldE1vZGUpOwotCi0gICAgICAgIC8v
IE11c3QgYmUgYSBsb2NhbC4KLSAgICAgICAgcmV0dXJuIHNldExvY2FsKG9wZXJhbmQsIHZhbHVl
LCBzZXRNb2RlKTsKKyAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQgPSBEZWxheWVkU2V0
TG9jYWwob3BlcmFuZCwgdmFsdWUpOworICAgICAgICAKKyAgICAgICAgaWYgKHNldE1vZGUgPT0g
Tm9ybWFsU2V0KSB7CisgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKGRlbGF5ZWQp
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGFk
ZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQtPmxvY2FsKCkpLCBub2RlKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1dGUoc2V0TW9kZSk7CiAgICAgfQogCiAg
ICAgTm9kZSogc2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQpAQCAtMTEyMSw2ICsxMTI1LDI3IEBAIHByaXZhdGU6CiAg
ICAgfTsKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5KiBtX2lubGluZVN0YWNrVG9wOworICAg
IAorICAgIHN0cnVjdCBEZWxheWVkU2V0TG9jYWwgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9vcGVyYW5kOworICAgICAgICBOb2RlKiBtX3ZhbHVlOworICAgICAgICAKKyAgICAgICAgRGVs
YXllZFNldExvY2FsKCkgeyB9CisgICAgICAgIERlbGF5ZWRTZXRMb2NhbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUpCisgICAgICAgICAgICA6IG1fb3BlcmFuZChvcGVyYW5k
KQorICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIE5vZGUqIGV4ZWN1dGUoQnl0ZUNvZGVQYXJzZXIqIHBhcnNlciwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9v
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRB
cmd1bWVudChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgICAgICByZXR1cm4gcGFy
c2VyLT5zZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgIH0KKyAgICB9
OworICAgIAorICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWw+IG1fc2V0TG9jYWxRdWV1ZTsKIAog
ICAgIC8vIEhhdmUgd2UgYnVpbHQgb3BlcmFuZCBtYXBzPyBXZSBpbml0aWFsaXplIHRoZW0gbGF6
aWx5LCBhbmQgb25seSB3aGVuIGRvaW5nCiAgICAgLy8gaW5saW5pbmcuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDE2MTAzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDEzICs0Myw3IEBAIGlubGluZSBib29sIGJlbG9uZ3NJbk1pbmlmaWVkR3Jh
cGgoTm9kZVQKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAg
Y2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICBjYXNlIElu
dDMyVG9Eb3VibGU6Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIERvdWJsZUFz
SW50MzI6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgotICAgIGNhc2UgSW50NTJUb1ZhbHVl
OgotICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgQVNTRVJUKCFwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyh0eXBlKSAm
JiAhcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyh0eXBlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDYgQEAg
Ym9vbCBOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmIAogICAgIGNhc2UgR2V0TG9j
YWw6CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICBjYXNlIFNldExvY2FsOgotICAgIGNhc2Ug
TW92SGludDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6
CiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRv
bUxvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2
MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MzEsOSArNTMxLDcgQEAgc3RydWN0IE5vZGUgewogICAgIGJvb2wgY29udGFpbnNN
b3ZIaW50KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFNl
dExvY2FsOgogICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgIGNhc2UgTW92SGludEFuZENo
ZWNrOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgZGVmYXVsdDoKQEAgLTU2Nyw2ICs1NjUsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAg
ICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAg
ICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTkwLDExICsxMTkwLDYg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIE1v
dkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6Ci0gICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBWYWx1ZVRv
SW50MzI6Ci0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91Ymxl
QXNJbnQzMjoKICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGNhc2UgUGhhbnRvbToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogVmFyaWFibGVBY2Nlc3NE
YXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhHZXRM
b2NhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVFeGl0c0Zvcndh
cmQpIFwKLSAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
RXhpdHNGb3J3YXJkKSBcCiAgICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAg
ICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oR2V0QXJn
dW1lbnQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKQEAgLTMxOCw4MCArMzE3
LDYgQEAgaW5saW5lIE5vZGVGbGFncyBkZWZhdWx0RmxhZ3MoTm9kZVR5cGUgbwogICAgIH0KIH0K
IAotaW5saW5lIGJvb2wgcGVybWl0c09TUkJhY2t3YXJkUmV3aXJpbmcoTm9kZVR5cGUgb3ApCi17
Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6Ci0gICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgY2FzZSBJbnQ1MlRvRG91
YmxlOgotICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIG9ubHkgbm9kZSB3aGVyZSB3ZSBkbzoKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gICAgIGI6IFVJbnQzMlRvTnVtYmVyKEBhKQotICAgICAgICAv
LyAgICAgYzogU2V0TG9jYWwoQGIpCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGFuZCB0aGVuIGFs
c28gaGF2ZSBzb21lIHVzZXMgb2YgQGEgd2l0aG91dCBQaGFudG9tJ2luZyBAYi4KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotLy8gUmV0dXJucyB0aGUgcHJpb3JpdHkgd2l0aCB3aGljaCB3ZSBzaG91bGQgc2VsZWN0
IHRoZSBnaXZlbiBub2RlIGZvciBmb3J3YXJkCi0vLyByZXdpcmluZy4gSGlnaGVyIGlzIGJldHRl
ci4gWmVybyBtZWFucyB0aGF0IHRoZSBub2RlIGlzIG5vdCB1c2VmdWwgZm9yIHJld2lyaW5nLgot
Ly8gQnkgY29udmVudGlvbiwgd2UgdXNlIDEwMCB0byBtZWFuIHRoYXQgdGhlIG5vZGUgaXMgdG90
YWxseSBlcXVpdmFsZW50IHRvIGl0cwotLy8gaW5wdXQgd2l0aCBubyBpbmZvcm1hdGlvbiBsb3Nz
LgotaW5saW5lIHVuc2lnbmVkIGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKE5vZGVUeXBl
IG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIElkZW50aXR5OgotICAgICAgICAv
LyBXZSBzaG91bGRuJ3Qgc2VlIHRoZXNlIGJ5IHRoZSB0aW1lIHdlIGdldCB0byBPU1IgZXZlbiB0
aG91Z2ggaXQgY2xlYXJseQotICAgICAgICAvLyBpcyBhIHBlcmZlY3QgaWRlbnRpdHkgZnVuY3Rp
b24uCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgLy8gVGhp
cyBzcGVjdWxhdGVzIHRoYXQgdGhlIGluY29taW5nIGRvdWJsZSBpcyBjb252ZXJ0aWJsZSB0byBh
biBpbnQzMi4gU28KLSAgICAgICAgLy8gaXRzIHJlc3VsdCBpcyB0b3RhbGx5IGVxdWl2YWxlbnQu
Ci0gICAgICAgIHJldHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgSW50MzJUb0RvdWJsZToK
LSAgICAgICAgLy8gVGhpcyBjb252ZXJ0cyBhbiBpbnQzMiB0byBhIGRvdWJsZSwgYnV0IHRoYXQg
bG9zZXMgYSBiaXQgb2YgaW5mb3JtYXRpb24uCi0gICAgICAgIC8vIE9UT0ggaXQncyBzdGlsbCBh
biBlcXVpdmFsZW50IG51bWJlci4KLSAgICAgICAgcmV0dXJuIDc1OwotICAgICAgICAKLSAgICBj
YXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAvLyBJdCdzIGNvbXBsZXRlbHkgZmluZSB0byB1
c2UgdGhpcyBmb3IgT1NSIGV4aXQsIHNpbmNlIHRoZSB1aW50MzIgaXNuJ3QKLSAgICAgICAgLy8g
YWN0dWFsbHkgcmVwcmVzZW50YWJsZSBpbiBieXRlY29kZS4KLSAgICAgICAgcmV0dXJuIDEwMDsK
LQotICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAvLyBUaGlzIGxvc2VzIGluZm9ybWF0
aW9uLiBPbmx5IHVzZSBpdCBpZiB0aGVyZSBhcmUgbm8gYmV0dGVyIGFsdGVybmF0aXZlcy4KLSAg
ICAgICAgcmV0dXJuIDI1OwotICAgICAgICAKLSAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICAg
ICAgLy8gTG9zZXMgbm8gaW5mb3JtYXRpb24uIEl0IGp1c3QgYm94ZXMgdGhlIHZhbHVlLCB3aGlj
aCBpcyB3aGF0IE9TUiB3YW50cwotICAgICAgICAvLyB0byBkbyBhbnl3YXkuCi0gICAgICAgIHJl
dHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgSW50NTJUb0RvdWJsZToKLSAgICAgICAgLy8g
VGhpcyBpcyBsaWtlIEludDMyVG9Eb3VibGU7IHdlIGNhbiB1c2UgaXQgYmVjYXVzZSBpdCBnaXZl
cyBhIHNlbWFudGljYWxseQotICAgICAgICAvLyBlcXVpdmFsZW50IHZhbHVlIGJ1dCB0aGF0IHZh
bHVlIG1heSBiZSBhbiBpbnQzMiBpbiBhIGRvdWJsZSwgc28gd2UnZAotICAgICAgICAvLyByYXRo
ZXIgbm90IGlmIHdlIGNhbiBhdm9pZCBpdC4KLSAgICAgICAgcmV0dXJuIDc1OwotICAgICAgICAK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWlubGluZSBib29s
IHBlcm1pdHNPU1JGb3J3YXJkUmV3aXJpbmcoTm9kZVR5cGUgb3ApCi17Ci0gICAgcmV0dXJuIGZv
cndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKG9wKSA+IDA7Ci19Ci0KIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219968</attachid>
            <date>2013-12-24 05:59:01 -0800</date>
            <delta_ts>2013-12-24 11:32:38 -0800</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18326</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk1LDEwICsxOTUsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92
SGludDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAvLyBEb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQg
dGhlIFNldExvY2FsCi0gICAgICAgIC8vIHdhcyBkZWFkLgorICAgIGNhc2UgTW92SGludDogewor
ICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgb25seSBpbmZv
cm1zIHVzIGFib3V0IHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZAorICAgICAgICAvLyBpbiBieXRl
Y29kZSwgYnV0IHRoaXMgY29kZSBpcyBqdXN0IGNvbmNlcm5lZCB3aXRoIHdoYXQgaXMgYWN0dWFs
bHkgaGFwcGVuaW5nIGR1cmluZworICAgICAgICAvLyBERkcgZXhlY3V0aW9uLgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBCaXRBbmQ6CiAgICAgICAgIGNhc2UgQml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxNiBAQCBwcml2
YXRlOgogICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgU2V0T25FbnRyeSB9OwogICAgIE5v
ZGUqIHNldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1v
ZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7Ci0gICAgICAgIC8vIElzIHRoaXMgYW4gYXJn
dW1lbnQ/Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBzZXRBcmd1bWVudChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7Ci0KLSAgICAgICAgLy8g
TXVzdCBiZSBhIGxvY2FsLgotICAgICAgICByZXR1cm4gc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUs
IHNldE1vZGUpOworICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZCA9IERlbGF5ZWRTZXRM
b2NhbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2V0TW9kZSA9PSBO
b3JtYWxTZXQpIHsKKyAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoZGVsYXllZCk7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC0+bG9jYWwoKSksIG5vZGUpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZShzZXRNb2RlKTsKICAgICB9CiAKICAg
ICBOb2RlKiBzZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC0xMTIxLDYgKzExMjUsMjcgQEAgcHJpdmF0ZToKICAg
ICB9OwogICAgIAogICAgIElubGluZVN0YWNrRW50cnkqIG1faW5saW5lU3RhY2tUb3A7CisgICAg
CisgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBt
X29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAgICAgIAorICAgICAgICBEZWxh
eWVkU2V0TG9jYWwoKSB7IH0KKyAgICAgICAgRGVsYXllZFNldExvY2FsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9vcGVyYW5kKG9wZXJhbmQp
CisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgTm9kZSogZXhlY3V0ZShCeXRlQ29kZVBhcnNlciogcGFyc2VyLCBTZXRN
b2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX29w
ZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldEFy
Z3VtZW50KG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJz
ZXItPnNldExvY2FsKG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgCisgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRMb2NhbFF1ZXVlOwog
CiAgICAgLy8gSGF2ZSB3ZSBidWlsdCBvcGVyYW5kIG1hcHM/IFdlIGluaXRpYWxpemUgdGhlbSBs
YXppbHksIGFuZCBvbmx5IHdoZW4gZG9pbmcKICAgICAvLyBpbmxpbmluZy4KQEAgLTE4OTEsNiAr
MTkxNiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uOyAvLyBTb21lIG1l
dGhvZHMgd2FudCB0byB1c2UgdGhpcywgYW5kIHdlJ2QgcmF0aGVyIG5vdCB0aHJlYWQgaXQgdGhy
b3VnaCBjYWxscy4KICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAgICAgIG1f
c2V0TG9jYWxRdWV1ZS5yZXNpemUoMCk7CisgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5j
b21waWxhdGlvbigpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENvdW50RXhlY3V0aW9uLCBP
cEluZm8obV9ncmFwaC5jb21waWxhdGlvbigpLT5leGVjdXRpb25Db3VudGVyRm9yKAogICAgICAg
ICAgICAgICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLCBtX2NvZGVCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSkpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTYxMDM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSw3ICsxMzEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAot
ICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpv
bWJpZUhpbnQ6CiAgICAgY2FzZSBVcHNpbG9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDYgQEAgZW51bSBS
ZWZDb3VudFN0YXRlIHsKIAogZW51bSBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIHsgQXV0b21hdGlj
T3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfTsKIAotZW51bSBT
cGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwgQmFja3dhcmRTcGVjdWxh
dGlvbiB9OwotCiBlbnVtIFByb29mU3RhdHVzIHsgTmVlZHNDaGVjaywgSXNQcm92ZWQgfTsKIAog
aW5saW5lIGJvb2wgaXNQcm92ZWQoUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSwzNyArMTU5LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpID09IChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS53aWxsTm90SGF2ZUNoZWNrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29u
c2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRz
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3Vs
ZCBNb3ZIaW50IHRoZSBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+c2hvdWxkR2VuZXJhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcGVybWl0
c09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+Y2hpbGQxKCktPm9wKCkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
Wm9tYmllSGludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVk
Z2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhp
bnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxk
R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhab21iaWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBF
ZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50QW5kQ2hlY2sp
OwotICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkg
d2UgYXNzdW1lIHRoYXQgRENFIHJ1bnMgb25seSBvbmNlLgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OiB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGls
ZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7
IGNoaWxkSWR4KyspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDkgKzkwNyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
Ci0gICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0g
ICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoK
ICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrVGll
clVwQW5kT1NSRW50ZXI6CkBAIC0xMDA1LDYgKzEwMDIsOCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25SZWVu
dHJ5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKKyAgICAg
ICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBi
cmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNTkyLDggKzE1OTEsNiBAQCBwcml2
YXRlOgogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91YmxlLCBJbnQzMlRvRG91
YmxlLAogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5v
ZGUoKSwgTnVtYmVyVXNlKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1
bGF0aW9uKQotICAgICAgICAgICAgcmVzdWx0LT5tZXJnZUZsYWdzKE5vZGVFeGl0c0ZvcndhcmQp
OwogICAgICAgICAKICAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJl
dmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0Myw3IEBAIGlubGluZSBib29sIGJlbG9u
Z3NJbk1pbmlmaWVkR3JhcGgoTm9kZVQKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKLSAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAg
ICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgotICAgIGNh
c2UgSW50NTJUb1ZhbHVlOgotICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKCFwZXJtaXRzT1NSQmFja3dhcmRS
ZXdpcmluZyh0eXBlKSAmJiAhcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyh0eXBlKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDkgKzQ2LDYgQEAgYm9vbCBOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmIAog
ICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICBjYXNlIFNldExv
Y2FsOgotICAgIGNhc2UgTW92SGludDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICBj
YXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICBjYXNlIEZsdXNoOgog
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNDIgKzI3NCwyNCBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIHJldHVybiBmaWx0ZXJGbGFncyh+ZmxhZ3MpOwogICAgIH0KICAgICAKLSAgICBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBzcGVjdWxhdGlvbkRpcmVjdGlvbigpCi0gICAgewotICAgICAgICBp
ZiAoZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpCi0gICAgICAgICAgICByZXR1cm4gRm9yd2Fy
ZFNwZWN1bGF0aW9uOwotICAgICAgICByZXR1cm4gQmFja3dhcmRTcGVjdWxhdGlvbjsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCi0gICAgewotICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAg
ICAgICBjYXNlIEZvcndhcmRTcGVjdWxhdGlvbjoKLSAgICAgICAgICAgIG1lcmdlRmxhZ3MoTm9k
ZUV4aXRzRm9yd2FyZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgQmFja3dh
cmRTcGVjdWxhdGlvbjoKLSAgICAgICAgICAgIGNsZWFyRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBzZXRPcEFuZERlZmF1bHRGbGFn
cyhOb2RlVHlwZSBvcCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKICAgICAgICAgbV9mbGFn
cyA9IGRlZmF1bHRGbGFncyhvcCk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEdldCByaWQgb2Yg
dGhpcy4KICAgICB2b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFncyhOb2RlVHlwZSBvcCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAg
ICAgICBzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3NVbmNoZWNrZWQob3ApOwogICAgIH0KIAor
ICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgdm9pZCBzZXRPcEFuZERlZmF1bHRO
b25FeGl0RmxhZ3NVbmNoZWNrZWQoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBtX29wID0g
b3A7Ci0gICAgICAgIG1fZmxhZ3MgPSAoZGVmYXVsdEZsYWdzKG9wKSAmIH5Ob2RlRXhpdHNGb3J3
YXJkKSB8IChtX2ZsYWdzICYgTm9kZUV4aXRzRm9yd2FyZCk7CisgICAgICAgIG1fZmxhZ3MgPSBk
ZWZhdWx0RmxhZ3Mob3ApOwogICAgIH0KIAogICAgIHZvaWQgY29udmVydFRvUGhhbnRvbSgpCkBA
IC01MzEsOSArNTEzLDcgQEAgc3RydWN0IE5vZGUgewogICAgIGJvb2wgY29udGFpbnNNb3ZIaW50
KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFNldExvY2Fs
OgogICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgog
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw2ICs1NDcsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHN3
aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAg
Y2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTkwLDExICsxMTcyLDYgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIE1vdkhpbnQ6
CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
Ci0gICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
Ci0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQz
MjoKICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGNhc2UgUGhhbnRvbToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgTm9kZVJlbGV2YW50VG9P
U1IgICAgICAgICAgICAgICAgMHg0MDAwCiAKLSNkZWZpbmUgTm9kZUV4aXRzRm9yd2FyZCAgICAg
ICAgICAgICAgICAgMHg4MDAwCi0KLSNkZWZpbmUgTm9kZUlzU3RhdGljQ29uc3RhbnQgICAgICAg
ICAgICAweDEwMDAwIC8vIFVzZWQgb25seSBieSB0aGUgcGFyc2VyLCB0byBkZXRlcm1pbmUgaWYg
YSBjb25zdGFudCBhcm9zZSBzdGF0aWNhbGx5IGFuZCBoZW5jZSBjb3VsZCBiZSBmb2xkZWQgYXQg
cGFyc2UtdGltZS4KKyNkZWZpbmUgTm9kZUlzU3RhdGljQ29uc3RhbnQgICAgICAgICAgICAgMHg4
MDAwIC8vIFVzZWQgb25seSBieSB0aGUgcGFyc2VyLCB0byBkZXRlcm1pbmUgaWYgYSBjb25zdGFu
dCBhcm9zZSBzdGF0aWNhbGx5IGFuZCBoZW5jZSBjb3VsZCBiZSBmb2xkZWQgYXQgcGFyc2UtdGlt
ZS4KIAogdHlwZWRlZiB1aW50MzJfdCBOb2RlRmxhZ3M7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogVmFyaWFibGVBY2Nl
c3NEYXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhH
ZXRMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVFeGl0c0Zv
cndhcmQpIFwKLSAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlRXhpdHNGb3J3YXJkKSBcCiAgICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNOb3RFeGl0KSBc
CiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oR2V0
QXJndW1lbnQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKQEAgLTMxOCw4MCAr
MzE3LDYgQEAgaW5saW5lIE5vZGVGbGFncyBkZWZhdWx0RmxhZ3MoTm9kZVR5cGUgbwogICAgIH0K
IH0KIAotaW5saW5lIGJvb2wgcGVybWl0c09TUkJhY2t3YXJkUmV3aXJpbmcoTm9kZVR5cGUgb3Ap
Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6Ci0gICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgY2FzZSBJbnQ1MlRv
RG91YmxlOgotICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIG9ubHkgbm9kZSB3aGVyZSB3ZSBkbzoK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gICAgIGI6IFVJbnQzMlRvTnVtYmVyKEBhKQotICAgICAg
ICAvLyAgICAgYzogU2V0TG9jYWwoQGIpCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGFuZCB0aGVu
IGFsc28gaGF2ZSBzb21lIHVzZXMgb2YgQGEgd2l0aG91dCBQaGFudG9tJ2luZyBAYi4KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotLy8gUmV0dXJucyB0aGUgcHJpb3JpdHkgd2l0aCB3aGljaCB3ZSBzaG91bGQgc2Vs
ZWN0IHRoZSBnaXZlbiBub2RlIGZvciBmb3J3YXJkCi0vLyByZXdpcmluZy4gSGlnaGVyIGlzIGJl
dHRlci4gWmVybyBtZWFucyB0aGF0IHRoZSBub2RlIGlzIG5vdCB1c2VmdWwgZm9yIHJld2lyaW5n
LgotLy8gQnkgY29udmVudGlvbiwgd2UgdXNlIDEwMCB0byBtZWFuIHRoYXQgdGhlIG5vZGUgaXMg
dG90YWxseSBlcXVpdmFsZW50IHRvIGl0cwotLy8gaW5wdXQgd2l0aCBubyBpbmZvcm1hdGlvbiBs
b3NzLgotaW5saW5lIHVuc2lnbmVkIGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKE5vZGVU
eXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIElkZW50aXR5OgotICAgICAg
ICAvLyBXZSBzaG91bGRuJ3Qgc2VlIHRoZXNlIGJ5IHRoZSB0aW1lIHdlIGdldCB0byBPU1IgZXZl
biB0aG91Z2ggaXQgY2xlYXJseQotICAgICAgICAvLyBpcyBhIHBlcmZlY3QgaWRlbnRpdHkgZnVu
Y3Rpb24uCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgLy8g
VGhpcyBzcGVjdWxhdGVzIHRoYXQgdGhlIGluY29taW5nIGRvdWJsZSBpcyBjb252ZXJ0aWJsZSB0
byBhbiBpbnQzMi4gU28KLSAgICAgICAgLy8gaXRzIHJlc3VsdCBpcyB0b3RhbGx5IGVxdWl2YWxl
bnQuCi0gICAgICAgIHJldHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgSW50MzJUb0RvdWJs
ZToKLSAgICAgICAgLy8gVGhpcyBjb252ZXJ0cyBhbiBpbnQzMiB0byBhIGRvdWJsZSwgYnV0IHRo
YXQgbG9zZXMgYSBiaXQgb2YgaW5mb3JtYXRpb24uCi0gICAgICAgIC8vIE9UT0ggaXQncyBzdGls
bCBhbiBlcXVpdmFsZW50IG51bWJlci4KLSAgICAgICAgcmV0dXJuIDc1OwotICAgICAgICAKLSAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAvLyBJdCdzIGNvbXBsZXRlbHkgZmluZSB0
byB1c2UgdGhpcyBmb3IgT1NSIGV4aXQsIHNpbmNlIHRoZSB1aW50MzIgaXNuJ3QKLSAgICAgICAg
Ly8gYWN0dWFsbHkgcmVwcmVzZW50YWJsZSBpbiBieXRlY29kZS4KLSAgICAgICAgcmV0dXJuIDEw
MDsKLQotICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAvLyBUaGlzIGxvc2VzIGluZm9y
bWF0aW9uLiBPbmx5IHVzZSBpdCBpZiB0aGVyZSBhcmUgbm8gYmV0dGVyIGFsdGVybmF0aXZlcy4K
LSAgICAgICAgcmV0dXJuIDI1OwotICAgICAgICAKLSAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAg
ICAgICAgLy8gTG9zZXMgbm8gaW5mb3JtYXRpb24uIEl0IGp1c3QgYm94ZXMgdGhlIHZhbHVlLCB3
aGljaCBpcyB3aGF0IE9TUiB3YW50cwotICAgICAgICAvLyB0byBkbyBhbnl3YXkuCi0gICAgICAg
IHJldHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgSW50NTJUb0RvdWJsZToKLSAgICAgICAg
Ly8gVGhpcyBpcyBsaWtlIEludDMyVG9Eb3VibGU7IHdlIGNhbiB1c2UgaXQgYmVjYXVzZSBpdCBn
aXZlcyBhIHNlbWFudGljYWxseQotICAgICAgICAvLyBlcXVpdmFsZW50IHZhbHVlIGJ1dCB0aGF0
IHZhbHVlIG1heSBiZSBhbiBpbnQzMiBpbiBhIGRvdWJsZSwgc28gd2UnZAotICAgICAgICAvLyBy
YXRoZXIgbm90IGlmIHdlIGNhbiBhdm9pZCBpdC4KLSAgICAgICAgcmV0dXJuIDc1OwotICAgICAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWlubGluZSBi
b29sIHBlcm1pdHNPU1JGb3J3YXJkUmV3aXJpbmcoTm9kZVR5cGUgb3ApCi17Ci0gICAgcmV0dXJu
IGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKG9wKSA+IDA7Ci19Ci0KIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsMTAgKzEwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgICAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAv
LyBjb21waWxhdGlvbiwgc28gd2UgY29vayBvbmUgdXAgYnkgY3JlYXRpbmcgYSBuZXcgVmFyaWFi
bGVBY2Nlc3NEYXRhCiAgICAgICAgICAgICAvLyB0aGF0IGlzbid0IHVuaWZpZWQgd2l0aCBhbnkg
b2YgdGhlIG90aGVycy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhpcwogICAgICAgICAgICAgLy8gU2V0
TG9jYWwgd2lsbCB0dXJuIGludG8gYSBNb3ZIaW50IGFuZCB3aWxsIG5vdCBoYXZlIGFueSB0eXBl
IGNoZWNrcy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIGEgTW92SGludCBkaXJl
Y3RseSEKICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKAog
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZS0+bG9jYWwoKSwgdmFy
aWFibGUtPmlzQ2FwdHVyZWQoKSkpOwogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBu
ZXdWYXJpYWJsZSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTA0LDkgKzUwNCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJh
eToKICAgICAgICAgY2FzZSBBcnJheWlmeToKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0
dXJlOgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgIGNhc2UgTW92SGludEFuZENoZWNr
OgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxv
b3A6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICAgICAgY2FzZSBDaGVj
a1RpZXJVcEFuZE9TUkVudGVyOgpAQCAtNTg1LDYgKzU4Miw4IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5
V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgorICAgICAg
ICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2Ug
aXQgYWxyZWFkeSBoYXMgYSBwcmVkaWN0aW9uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219974</attachid>
            <date>2013-12-24 11:32:38 -0800</date>
            <delta_ts>2013-12-25 11:18:25 -0800</delta_ts>
            <desc>got something that makes some sense</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31966</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk1LDEwICsxOTUsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92
SGludDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAvLyBEb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQg
dGhlIFNldExvY2FsCi0gICAgICAgIC8vIHdhcyBkZWFkLgorICAgIGNhc2UgTW92SGludDogewor
ICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgb25seSBpbmZv
cm1zIHVzIGFib3V0IHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZAorICAgICAgICAvLyBpbiBieXRl
Y29kZSwgYnV0IHRoaXMgY29kZSBpcyBqdXN0IGNvbmNlcm5lZCB3aXRoIHdoYXQgaXMgYWN0dWFs
bHkgaGFwcGVuaW5nIGR1cmluZworICAgICAgICAvLyBERkcgZXhlY3V0aW9uLgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBCaXRBbmQ6CiAgICAgICAgIGNhc2UgQml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxNiBAQCBwcml2
YXRlOgogICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgU2V0T25FbnRyeSB9OwogICAgIE5v
ZGUqIHNldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1v
ZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7Ci0gICAgICAgIC8vIElzIHRoaXMgYW4gYXJn
dW1lbnQ/Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBzZXRBcmd1bWVudChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7Ci0KLSAgICAgICAgLy8g
TXVzdCBiZSBhIGxvY2FsLgotICAgICAgICByZXR1cm4gc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUs
IHNldE1vZGUpOworICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZCA9IERlbGF5ZWRTZXRM
b2NhbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2V0TW9kZSA9PSBO
b3JtYWxTZXQpIHsKKyAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoZGVsYXllZCk7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC0+bG9jYWwoKSksIG5vZGUpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZShzZXRNb2RlKTsKICAgICB9CiAKICAg
ICBOb2RlKiBzZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC0xMTIxLDYgKzExMjUsMjcgQEAgcHJpdmF0ZToKICAg
ICB9OwogICAgIAogICAgIElubGluZVN0YWNrRW50cnkqIG1faW5saW5lU3RhY2tUb3A7CisgICAg
CisgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBt
X29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAgICAgIAorICAgICAgICBEZWxh
eWVkU2V0TG9jYWwoKSB7IH0KKyAgICAgICAgRGVsYXllZFNldExvY2FsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9vcGVyYW5kKG9wZXJhbmQp
CisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgTm9kZSogZXhlY3V0ZShCeXRlQ29kZVBhcnNlciogcGFyc2VyLCBTZXRN
b2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX29w
ZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldEFy
Z3VtZW50KG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJz
ZXItPnNldExvY2FsKG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgCisgICAgVmVjdG9yPERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRMb2NhbFF1ZXVlOwog
CiAgICAgLy8gSGF2ZSB3ZSBidWlsdCBvcGVyYW5kIG1hcHM/IFdlIGluaXRpYWxpemUgdGhlbSBs
YXppbHksIGFuZCBvbmx5IHdoZW4gZG9pbmcKICAgICAvLyBpbmxpbmluZy4KQEAgLTE4OTEsNiAr
MTkxNiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uOyAvLyBTb21lIG1l
dGhvZHMgd2FudCB0byB1c2UgdGhpcywgYW5kIHdlJ2QgcmF0aGVyIG5vdCB0aHJlYWQgaXQgdGhy
b3VnaCBjYWxscy4KICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAgICAgIG1f
c2V0TG9jYWxRdWV1ZS5yZXNpemUoMCk7CisgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5j
b21waWxhdGlvbigpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENvdW50RXhlY3V0aW9uLCBP
cEluZm8obV9ncmFwaC5jb21waWxhdGlvbigpLT5leGVjdXRpb25Db3VudGVyRm9yKAogICAgICAg
ICAgICAgICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLCBtX2NvZGVCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSkpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTYxMDM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSw3ICsxMzEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAot
ICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpv
bWJpZUhpbnQ6CiAgICAgY2FzZSBVcHNpbG9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDYgQEAgZW51bSBS
ZWZDb3VudFN0YXRlIHsKIAogZW51bSBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIHsgQXV0b21hdGlj
T3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfTsKIAotZW51bSBT
cGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwgQmFja3dhcmRTcGVjdWxh
dGlvbiB9OwotCiBlbnVtIFByb29mU3RhdHVzIHsgTmVlZHNDaGVjaywgSXNQcm92ZWQgfTsKIAog
aW5saW5lIGJvb2wgaXNQcm92ZWQoUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSwzNyArMTU5LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpID09IChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS53aWxsTm90SGF2ZUNoZWNrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29u
c2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRz
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3Vs
ZCBNb3ZIaW50IHRoZSBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+c2hvdWxkR2VuZXJhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgcGVybWl0
c09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+Y2hpbGQxKCktPm9wKCkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
Wm9tYmllSGludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVk
Z2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhp
bnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxk
R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhab21iaWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBF
ZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50QW5kQ2hlY2sp
OwotICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkg
d2UgYXNzdW1lIHRoYXQgRENFIHJ1bnMgb25seSBvbmNlLgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OiB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGls
ZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7
IGNoaWxkSWR4KyspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDkgKzkwNyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
Ci0gICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0g
ICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoK
ICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrVGll
clVwQW5kT1NSRW50ZXI6CkBAIC0xMDA1LDYgKzEwMDIsOCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25SZWVu
dHJ5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKKyAgICAg
ICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBi
cmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNTkyLDggKzE1OTEsNiBAQCBwcml2
YXRlOgogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91YmxlLCBJbnQzMlRvRG91
YmxlLAogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5v
ZGUoKSwgTnVtYmVyVXNlKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1
bGF0aW9uKQotICAgICAgICAgICAgcmVzdWx0LT5tZXJnZUZsYWdzKE5vZGVFeGl0c0ZvcndhcmQp
OwogICAgICAgICAKICAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJl
dmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0Myw3IEBAIGlubGluZSBib29sIGJlbG9u
Z3NJbk1pbmlmaWVkR3JhcGgoTm9kZVQKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKLSAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAg
ICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgotICAgIGNh
c2UgSW50NTJUb1ZhbHVlOgotICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKCFwZXJtaXRzT1NSQmFja3dhcmRS
ZXdpcmluZyh0eXBlKSAmJiAhcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyh0eXBlKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDkgKzQ2LDYgQEAgYm9vbCBOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmIAog
ICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICBjYXNlIFNldExv
Y2FsOgotICAgIGNhc2UgTW92SGludDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICBj
YXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICBjYXNlIEZsdXNoOgog
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNDIgKzI3NCwyNCBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIHJldHVybiBmaWx0ZXJGbGFncyh+ZmxhZ3MpOwogICAgIH0KICAgICAKLSAgICBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBzcGVjdWxhdGlvbkRpcmVjdGlvbigpCi0gICAgewotICAgICAgICBp
ZiAoZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpCi0gICAgICAgICAgICByZXR1cm4gRm9yd2Fy
ZFNwZWN1bGF0aW9uOwotICAgICAgICByZXR1cm4gQmFja3dhcmRTcGVjdWxhdGlvbjsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCi0gICAgewotICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAg
ICAgICBjYXNlIEZvcndhcmRTcGVjdWxhdGlvbjoKLSAgICAgICAgICAgIG1lcmdlRmxhZ3MoTm9k
ZUV4aXRzRm9yd2FyZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgQmFja3dh
cmRTcGVjdWxhdGlvbjoKLSAgICAgICAgICAgIGNsZWFyRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBzZXRPcEFuZERlZmF1bHRGbGFn
cyhOb2RlVHlwZSBvcCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKICAgICAgICAgbV9mbGFn
cyA9IGRlZmF1bHRGbGFncyhvcCk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEdldCByaWQgb2Yg
dGhpcy4KICAgICB2b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFncyhOb2RlVHlwZSBvcCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAg
ICAgICBzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3NVbmNoZWNrZWQob3ApOwogICAgIH0KIAor
ICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgdm9pZCBzZXRPcEFuZERlZmF1bHRO
b25FeGl0RmxhZ3NVbmNoZWNrZWQoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBtX29wID0g
b3A7Ci0gICAgICAgIG1fZmxhZ3MgPSAoZGVmYXVsdEZsYWdzKG9wKSAmIH5Ob2RlRXhpdHNGb3J3
YXJkKSB8IChtX2ZsYWdzICYgTm9kZUV4aXRzRm9yd2FyZCk7CisgICAgICAgIG1fZmxhZ3MgPSBk
ZWZhdWx0RmxhZ3Mob3ApOwogICAgIH0KIAogICAgIHZvaWQgY29udmVydFRvUGhhbnRvbSgpCkBA
IC01MzEsOSArNTEzLDcgQEAgc3RydWN0IE5vZGUgewogICAgIGJvb2wgY29udGFpbnNNb3ZIaW50
KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFNldExvY2Fs
OgogICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgog
ICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw2ICs1NDcsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHN3
aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAg
Y2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTkwLDExICsxMTcyLDYgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIE1vdkhpbnQ6
CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
Ci0gICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
Ci0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQz
MjoKICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGNhc2UgUGhhbnRvbToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgTm9kZVJlbGV2YW50VG9P
U1IgICAgICAgICAgICAgICAgMHg0MDAwCiAKLSNkZWZpbmUgTm9kZUV4aXRzRm9yd2FyZCAgICAg
ICAgICAgICAgICAgMHg4MDAwCi0KLSNkZWZpbmUgTm9kZUlzU3RhdGljQ29uc3RhbnQgICAgICAg
ICAgICAweDEwMDAwIC8vIFVzZWQgb25seSBieSB0aGUgcGFyc2VyLCB0byBkZXRlcm1pbmUgaWYg
YSBjb25zdGFudCBhcm9zZSBzdGF0aWNhbGx5IGFuZCBoZW5jZSBjb3VsZCBiZSBmb2xkZWQgYXQg
cGFyc2UtdGltZS4KKyNkZWZpbmUgTm9kZUlzU3RhdGljQ29uc3RhbnQgICAgICAgICAgICAgMHg4
MDAwIC8vIFVzZWQgb25seSBieSB0aGUgcGFyc2VyLCB0byBkZXRlcm1pbmUgaWYgYSBjb25zdGFu
dCBhcm9zZSBzdGF0aWNhbGx5IGFuZCBoZW5jZSBjb3VsZCBiZSBmb2xkZWQgYXQgcGFyc2UtdGlt
ZS4KIAogdHlwZWRlZiB1aW50MzJfdCBOb2RlRmxhZ3M7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogVmFyaWFibGVBY2Nl
c3NEYXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhH
ZXRMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVFeGl0c0Zv
cndhcmQpIFwKLSAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlRXhpdHNGb3J3YXJkKSBcCiAgICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNOb3RFeGl0KSBc
CiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oR2V0
QXJndW1lbnQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKQEAgLTMxOCw4MCAr
MzE3LDYgQEAgaW5saW5lIE5vZGVGbGFncyBkZWZhdWx0RmxhZ3MoTm9kZVR5cGUgbwogICAgIH0K
IH0KIAotaW5saW5lIGJvb2wgcGVybWl0c09TUkJhY2t3YXJkUmV3aXJpbmcoTm9kZVR5cGUgb3Ap
Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6Ci0gICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgY2FzZSBJbnQ1MlRv
RG91YmxlOgotICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIG9ubHkgbm9kZSB3aGVyZSB3ZSBkbzoK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gICAgIGI6IFVJbnQzMlRvTnVtYmVyKEBhKQotICAgICAg
ICAvLyAgICAgYzogU2V0TG9jYWwoQGIpCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGFuZCB0aGVu
IGFsc28gaGF2ZSBzb21lIHVzZXMgb2YgQGEgd2l0aG91dCBQaGFudG9tJ2luZyBAYi4KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotLy8gUmV0dXJucyB0aGUgcHJpb3JpdHkgd2l0aCB3aGljaCB3ZSBzaG91bGQgc2Vs
ZWN0IHRoZSBnaXZlbiBub2RlIGZvciBmb3J3YXJkCi0vLyByZXdpcmluZy4gSGlnaGVyIGlzIGJl
dHRlci4gWmVybyBtZWFucyB0aGF0IHRoZSBub2RlIGlzIG5vdCB1c2VmdWwgZm9yIHJld2lyaW5n
LgotLy8gQnkgY29udmVudGlvbiwgd2UgdXNlIDEwMCB0byBtZWFuIHRoYXQgdGhlIG5vZGUgaXMg
dG90YWxseSBlcXVpdmFsZW50IHRvIGl0cwotLy8gaW5wdXQgd2l0aCBubyBpbmZvcm1hdGlvbiBs
b3NzLgotaW5saW5lIHVuc2lnbmVkIGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKE5vZGVU
eXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIElkZW50aXR5OgotICAgICAg
ICAvLyBXZSBzaG91bGRuJ3Qgc2VlIHRoZXNlIGJ5IHRoZSB0aW1lIHdlIGdldCB0byBPU1IgZXZl
biB0aG91Z2ggaXQgY2xlYXJseQotICAgICAgICAvLyBpcyBhIHBlcmZlY3QgaWRlbnRpdHkgZnVu
Y3Rpb24uCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgLy8g
VGhpcyBzcGVjdWxhdGVzIHRoYXQgdGhlIGluY29taW5nIGRvdWJsZSBpcyBjb252ZXJ0aWJsZSB0
byBhbiBpbnQzMi4gU28KLSAgICAgICAgLy8gaXRzIHJlc3VsdCBpcyB0b3RhbGx5IGVxdWl2YWxl
bnQuCi0gICAgICAgIHJldHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgSW50MzJUb0RvdWJs
ZToKLSAgICAgICAgLy8gVGhpcyBjb252ZXJ0cyBhbiBpbnQzMiB0byBhIGRvdWJsZSwgYnV0IHRo
YXQgbG9zZXMgYSBiaXQgb2YgaW5mb3JtYXRpb24uCi0gICAgICAgIC8vIE9UT0ggaXQncyBzdGls
bCBhbiBlcXVpdmFsZW50IG51bWJlci4KLSAgICAgICAgcmV0dXJuIDc1OwotICAgICAgICAKLSAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAvLyBJdCdzIGNvbXBsZXRlbHkgZmluZSB0
byB1c2UgdGhpcyBmb3IgT1NSIGV4aXQsIHNpbmNlIHRoZSB1aW50MzIgaXNuJ3QKLSAgICAgICAg
Ly8gYWN0dWFsbHkgcmVwcmVzZW50YWJsZSBpbiBieXRlY29kZS4KLSAgICAgICAgcmV0dXJuIDEw
MDsKLQotICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAvLyBUaGlzIGxvc2VzIGluZm9y
bWF0aW9uLiBPbmx5IHVzZSBpdCBpZiB0aGVyZSBhcmUgbm8gYmV0dGVyIGFsdGVybmF0aXZlcy4K
LSAgICAgICAgcmV0dXJuIDI1OwotICAgICAgICAKLSAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAg
ICAgICAgLy8gTG9zZXMgbm8gaW5mb3JtYXRpb24uIEl0IGp1c3QgYm94ZXMgdGhlIHZhbHVlLCB3
aGljaCBpcyB3aGF0IE9TUiB3YW50cwotICAgICAgICAvLyB0byBkbyBhbnl3YXkuCi0gICAgICAg
IHJldHVybiAxMDA7Ci0gICAgICAgIAotICAgIGNhc2UgSW50NTJUb0RvdWJsZToKLSAgICAgICAg
Ly8gVGhpcyBpcyBsaWtlIEludDMyVG9Eb3VibGU7IHdlIGNhbiB1c2UgaXQgYmVjYXVzZSBpdCBn
aXZlcyBhIHNlbWFudGljYWxseQotICAgICAgICAvLyBlcXVpdmFsZW50IHZhbHVlIGJ1dCB0aGF0
IHZhbHVlIG1heSBiZSBhbiBpbnQzMiBpbiBhIGRvdWJsZSwgc28gd2UnZAotICAgICAgICAvLyBy
YXRoZXIgbm90IGlmIHdlIGNhbiBhdm9pZCBpdC4KLSAgICAgICAgcmV0dXJuIDc1OwotICAgICAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWlubGluZSBi
b29sIHBlcm1pdHNPU1JGb3J3YXJkUmV3aXJpbmcoTm9kZVR5cGUgb3ApCi17Ci0gICAgcmV0dXJu
IGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKG9wKSA+IDA7Ci19Ci0KIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsMTAgKzEwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgICAgICAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNCwxNyArMTA0LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDcmVhdGUgYSBNb3ZIaW50
LiBXZSBjYW4ndCB1c2UgTW92SGludCdzIGRpcmVjdGx5IGF0IHRoaXMgc3RhZ2Ugb2YKLSAgICAg
ICAgICAgIC8vIGNvbXBpbGF0aW9uLCBzbyB3ZSBjb29rIG9uZSB1cCBieSBjcmVhdGluZyBhIG5l
dyBWYXJpYWJsZUFjY2Vzc0RhdGEKLSAgICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgdW5pZmllZCB3
aXRoIGFueSBvZiB0aGUgb3RoZXJzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlzCi0gICAgICAgICAg
ICAvLyBTZXRMb2NhbCB3aWxsIHR1cm4gaW50byBhIE1vdkhpbnQgYW5kIHdpbGwgbm90IGhhdmUg
YW55IHR5cGUgY2hlY2tzLgotICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0
YS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlLT5s
b2NhbCgpLCB2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSk7Ci0gICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIG5ld1ZhcmlhYmxlID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGFz
dCgpOwotICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBuZXdSb290LT5hcHBlbmROb2RlKAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwg
T3BJbmZvKG5ld1ZhcmlhYmxlKSwKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIGNvZGVPcmlnaW4sIE9w
SW5mbyh2YXJpYWJsZS0+bG9jYWwoKSksCiAgICAgICAgICAgICAgICAgRWRnZShsb2NhbHNbbG9j
YWxdKSk7Ci0gICAgICAgICAgICBzZXRMb2NhbC0+c2V0U3BlY3VsYXRpb25EaXJlY3Rpb24oQmFj
a3dhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAw
OyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewogICAg
ICAgICAgICAgTm9kZSogcHJldmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9j
YWwobG9jYWwpOwpAQCAtMTI0LDcgKzExNiw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBsb2NhbHNbbG9jYWxdOwogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBuZXdS
b290LT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRM
b2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7Ci0gICAgICAg
ICAgICBzZXRMb2NhbC0+c2V0U3BlY3VsYXRpb25EaXJlY3Rpb24oQmFja3dhcmRTcGVjdWxhdGlv
bik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE2
MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDI2ICs2OCw2IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlu
a0J1ZmZlciYgbGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNl
dE9mKGxhYmVsKTsKIH0KIAotdm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxv
Y2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBW
YWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIE5vZGUqIG5vZGU7Ci0gICAgTm9k
ZSogbGFzdE1vdkhpbnQ7Ci0gICAgaWYgKCFkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKGJs
b2NrLCBjdXJyZW50Tm9kZSwgbm9kZUluZGV4LCAhIXZhbHVlUmVjb3ZlcnksIG5vZGUsIGxhc3RN
b3ZIaW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW4g
IT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIAotICAgIG1fY29kZU9yaWdpbiA9IG5v
ZGUtPmNvZGVPcmlnaW47Ci0gICAgCi0gICAgaWYgKCF2YWx1ZVJlY292ZXJ5KQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKGxhc3RNb3ZIaW50KTsKLSAgICBBU1NFUlQobGFzdE1v
dkhpbnQtPmNoaWxkMSgpID09IGN1cnJlbnROb2RlKTsKLSAgICBtX3ZhbHVlUmVjb3ZlcnlPdmVy
cmlkZSA9IGFkb3B0UmVmKAotICAgICAgICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKGxhc3RN
b3ZIaW50LT5sb2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAx
LDYgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKICAgICBD
b2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7
CiAgICAgdm9pZCBjb3JyZWN0SnVtcChMaW5rQnVmZmVyJik7Ci0gICAgCi0gICAgdm9pZCBjb252
ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxvY2sqLCBOb2RlKiwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25z
dCBWYWx1ZVJlY292ZXJ5Jik7CiAKICAgICB1bnNpZ25lZCBtX3N0cmVhbUluZGV4OwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHJl
dmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw0NSArNDYsNiBAQCBib29sIE9TUkV4aXRCYXNl
Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlCiAgICAgICAgICAgICBGcmVxdWVudEV4aXRTaXRlKG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCkpOwogfQogCi1i
b29sIE9TUkV4aXRCYXNlOjpkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKAotICAgIEJhc2lj
QmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29s
IGhhc1ZhbHVlUmVjb3ZlcnksCi0gICAgTm9kZSomIG5vZGUsIE5vZGUqJiBsYXN0TW92SGludCkK
LXsKLSAgICAvLyBDaGVjayB0aGF0IGVpdGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9j
YWwsIG9yIHRoZSBwcmVjZWRpbmcgbm9kZSB3YXMgYQotICAgIC8vIFNldExvY2FsIHdpdGggdGhl
IHNhbWUgY29kZSBvcmlnaW4sIG9yIHRoYXQgd2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5
LgotICAgIGlmICghQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICYmICFoYXNWYWx1ZVJlY292ZXJ5
Ci0gICAgICAgICYmICFjdXJyZW50Tm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAg
Tm9kZSogc2V0TG9jYWwgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCA9PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQpOwotICAgIH0KLSAgICAK
LSAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVj
dGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAotICAgIC8vIG9uIHRoaXMgbm9kZS4K
LSAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAxOwotICAgIG5vZGUgPSAw
OwotICAgIGxhc3RNb3ZIaW50ID0gMDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRl
eEluQmxvY2sgPT0gYmxvY2stPnNpemUoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBp
bmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhp
cyBpcyBzYWZlCi0gICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0
cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAg
IC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVjb2RlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gSnVtcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICBpZiAobm9kZS0+Y29u
dGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCi0gICAgICAg
ICAgICBsYXN0TW92SGludCA9IG5vZGU7Ci0gICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luRm9y
RXhpdFRhcmdldCAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgaW5kZXhJbkJsb2NrKys7Ci0gICAgfQotICAgIAotICAg
IEFTU0VSVChub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCAhPSBjdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQpOwotICAgIHJldHVybiB0cnVlOwotfQotCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDE2MTAzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsMTEgKzY0LDYgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlU2xvdyhwcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQotICAgIAotICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZm9yd2FyZCBjb252ZXJzaW9uIGlzIHJlYWxseSBuZWVkZWQuCi0gICAg
Ym9vbCBkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKAotICAgICAgICBCYXNpY0Jsb2NrKiwg
Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNWYWx1ZVJlY292
ZXJ5LAotICAgICAgICBOb2RlKiYgbmV4dEJDTm9kZSwgTm9kZSomIGxhc3RNb3ZIaW50KTsKIAog
cHJpdmF0ZToKICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhD
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDkgKzUwNCw2
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2FzZSBBcnJh
eWlmeToKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICBjYXNlIE1v
dkhpbnQ6Ci0gICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJp
ZUhpbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CiAgICAgICAgIGNhc2UgQ2hl
Y2tUaWVyVXBBdFJldHVybjoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgpA
QCAtNTg1LDYgKzU4Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5
V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKICAgICAgICAg
Y2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAg
ICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMgYSBwcmVk
aWN0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODYsNyArMTg2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRo
ZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCiAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBN
b3ZIaW50LCBDb2RlT3JpZ2luKCksIE9wSW5mbyh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBDb2RlT3JpZ2luKCksIE9wSW5m
byh2YXJpYWJsZS0+bG9jYWwoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVk
Z2Uobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0yNjksNyArMjY5LDcgQEAgcHVibGljOgogICAgICAgICAvLyAtIEdldExvY2FsIG92
ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVu
Y2VzCiAgICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVh
ZC4KICAgICAgICAgLy8gLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYgaXQncyBm
bHVzaGVkLCBvciB0dXJucyBpbnRvIGEKLSAgICAgICAgLy8gICBNb3ZIaW50IG90aGVyd2lzZS4K
KyAgICAgICAgLy8gICBQaGFudG9tIG90aGVyd2lzZS4KICAgICAgICAgLy8gLSBGbHVzaCBsb3Nl
cyBpdHMgY2hpbGRyZW4gYnV0IHJlbWFpbnMsIGJlY2F1c2Ugd2Ugd2FudCB0byBrbm93IHdoZW4g
YQogICAgICAgICAvLyAgIGZsdXNoZWQgU2V0TG9jYWwncyB2YWx1ZSBpcyBubyBsb25nZXIgbmVl
ZGVkLiBUaGlzIGFsc28gbWFrZXMgaXQgc2ltcGxlcgogICAgICAgICAvLyAgIHRvIHJlYXNvbiBh
Ym91dCB0aGUgZm9ybWF0IG9mIGEgbG9jYWwsIHNpbmNlIHdlIGNhbiBqdXN0IGRvIGEgYmFja3dh
cmRzCkBAIC0zMDgsNyArMzA4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2Rl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5l
cmF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBub2Rl
LT5taXNjLnJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOyAvLyBPbmx5IGZvciBV
cHNpbG9ucy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJl
dmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDYgQEAgYm9vbCBzYWZlVG9FeGVj
dXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2Ug
R2V0TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoK
ICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgR2V0QXJn
dW1lbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5MjAsMTEgKzE5MjAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7
Ci0gICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2sobm9kZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDog
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTkzMiwxMiArMTky
Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBo
aW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKLSAgICAgICAgLy8gYXMg
YSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3JlIHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhh
dCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJlIHRoZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMg
dG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAgICAgLy8gc3RhY2suCi0gICAgICAgIGNvbXBpbGVN
b3ZIaW50KG5vZGUpOwotICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwpAQCAtMTk4OCwxNSArMTk3NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxv
YWRHUFIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS0+bWFjaGluZUxvY2FsKCkpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjp0
YWdGb3Iobm9kZS0+bWFjaGluZUxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUp
OwotICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gSWYgd2UncmUgc3RvcmluZyBhbiBhcmd1bWVudHMgb2JqZWN0IHRo
YXQgaGFzIGJlZW4gb3B0aW1pemVkIGF3YXksCi0gICAgICAgICAgICAvLyBvdXIgdmFyaWFibGUg
ZXZlbnQgc3RyZWFtIGZvciBPU1IgZXhpdCBub3cgcmVmbGVjdHMgdGhlIG9wdGltaXplZAotICAg
ICAgICAgICAgLy8gdmFsdWUgKEpTVmFsdWUoKSkuIE9uIHRoZSBzbG93IHBhdGgsIHdlIHdhbnQg
YW4gYXJndW1lbnRzIG9iamVjdAotICAgICAgICAgICAgLy8gaW5zdGVhZC4gV2UgYWRkIGFuIGFk
ZGl0aW9uYWwgbW92ZSBoaW50IHRvIHNob3cgT1NSIGV4aXQgdGhhdCBpdAotICAgICAgICAgICAg
Ly8gbmVlZHMgdG8gcmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvYmplY3QuCi0gICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50cykKLSAgICAgICAg
ICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKKyAgICAgICAgICAgIC8vIG91ciB2YXJpYWJs
ZSBldmVudCBzdHJlYW0gZm9yIE9TUiBleGl0IHNob3VsZCBjb250aW51ZSB0byByZWZsZWN0Cisg
ICAgICAgICAgICAvLyB0aGUgTW92SGl0biBhbmQgbm90IHRoZSBmbHVzaGVkIHZhbHVlLCB3aGlj
aCBpcyBKU1ZhbHVlKCkuCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0g
UGhhbnRvbUFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChEYXRhRm9y
bWF0SlMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM2LDExICsyMjM2LDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAgICAgIGNv
bXBpbGVNb3ZIaW50QW5kQ2hlY2sobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAg
ICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI0OCwxMiArMjI0Myw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFNl
dExvY2FsOiB7Ci0gICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdo
ZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKLSAgICAgICAgLy8gYXMgYSBzcGVjdWxhdGlv
biBwb2ludC4gU28gYmVmb3JlIHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3ZQotICAgICAg
ICAvLyBrbm93IHdoZXJlIHRoZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMgdG8gZ28gaW4gdGhl
IHZpcnR1YWwKLSAgICAgICAgLy8gc3RhY2suCi0gICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUp
OwotICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpA
QCAtMjMwNCwxNSArMjI5MywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcihub2RlLT5tYWNoaW5lTG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1
bHQobm9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlY29yZFNldExvY2FsKERhdGFG
b3JtYXRKUyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHN0b3Jpbmcg
YW4gYXJndW1lbnRzIG9iamVjdCB0aGF0IGhhcyBiZWVuIG9wdGltaXplZCBhd2F5LAotICAgICAg
ICAgICAgLy8gb3VyIHZhcmlhYmxlIGV2ZW50IHN0cmVhbSBmb3IgT1NSIGV4aXQgbm93IHJlZmxl
Y3RzIHRoZSBvcHRpbWl6ZWQKLSAgICAgICAgICAgIC8vIHZhbHVlIChKU1ZhbHVlKCkpLiBPbiB0
aGUgc2xvdyBwYXRoLCB3ZSB3YW50IGFuIGFyZ3VtZW50cyBvYmplY3QKLSAgICAgICAgICAgIC8v
IGluc3RlYWQuIFdlIGFkZCBhbiBhZGRpdGlvbmFsIG1vdmUgaGludCB0byBzaG93IE9TUiBleGl0
IHRoYXQgaXQKLSAgICAgICAgICAgIC8vIG5lZWRzIHRvIHJlY29uc3RydWN0IHRoZSBhcmd1bWVu
dHMgb2JqZWN0LgotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50
b21Bcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CisgICAg
ICAgICAgICAvLyBvdXIgdmFyaWFibGUgZXZlbnQgc3RyZWFtIGZvciBPU1IgZXhpdCBzaG91bGQg
Y29udGludWUgdG8gcmVmbGVjdAorICAgICAgICAgICAgLy8gdGhlIE1vdkhpdG4gYW5kIG5vdCB0
aGUgZmx1c2hlZCB2YWx1ZSwgd2hpY2ggaXMgSlNWYWx1ZSgpLgorICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5vcCgpICE9IFBoYW50b21Bcmd1bWVudHMpCisgICAgICAgICAgICAgICAg
cmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4
MCwxNCArMTM4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUK
ICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JC
aXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2
ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT5sb2NhbCgpKSk7Ci19Ci0KLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soTm9kZSogbm9kZSkKLXsK
LSAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIG5vUmVzdWx0KG5vZGUpOworICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2co
VmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRM
b2NhbCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDUsMTAgKzI0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBl
ZGdlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5v
cCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgp
ID09IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaQot
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBab21iaWVIaW50Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IE1vdkhpbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGludEFuZENoZWNrKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRn
ZS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219998</attachid>
            <date>2013-12-25 11:18:25 -0800</date>
            <delta_ts>2013-12-25 15:39:15 -0800</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55503</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEzLTEyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIFBoYW50b21Bcmd1bWVudHMgc2hvdWxkbid0IHJlbHkgb24gYSBkZWFkIFBoaSBncmFwaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MjE4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNoYW5nZSBkcmFtYXRpY2FsbHkgcmF0aW9uYWxpemVzIG91ciBoYW5kbGluZyBvZiBQaGFu
dG9tQXJndW1lbnRzIChpLmUuCisgICAgICAgIHNwZWN1bGF0aXZlIGVsaXNpb24gb2YgYXJndW1l
bnRzIG9iamVjdCBhbGxvY2F0aW9uKS4KKyAgICAgICAgCisgICAgICAgIEl0J3Mgbm93IHRoZSBj
YXNlIHRoYXQgaWYgd2UgZGVjaWRlIHRoYXQgd2UgY2FuIGVsaWRlIGFyZ3VtZW50cyBhbGxvY2F0
aW9uLCB3ZSBqdXN0CisgICAgICAgIHR1cm4gdGhlIGFyZ3VtZW50cy1jcmVhdGluZyBub2RlIGlu
dG8gYSBQaGFudG9tQXJndW1lbnRzIGFuZCBtYXJrIGFsbCBsb2NhbHMgdGhhdAorICAgICAgICBp
dCdzIHN0b3JlZCB0byBhcyBiZWluZyBhcmd1bWVudHMgYWxpYXNlcy4gQmVpbmcgYW4gYXJndW1l
bnRzIGFsaWFzIGFuZCBiZWluZyBhCisgICAgICAgIFBoYW50b21Bcmd1bWVudHMgbWVhbnMgYmFz
aWNhbGx5IHRoZSBzYW1lIHRoaW5nOiBpbiBERkcgZXhlY3V0aW9uIHlvdSBoYXZlIHRoZSBlbXB0
eQorICAgICAgICB2YWx1ZSwgb24gT1NSIGV4aXQgYW4gYXJndW1lbnRzIG9iamVjdCBpcyBhbGxv
Y2F0ZWQgaW4geW91ciBwbGFjZSwgYW5kIGFsbCBvcGVyYXRpb25zCisgICAgICAgIHRoYXQgdXNl
IHRoZSB2YWx1ZSBub3cganVzdCByZWZlciBkaXJlY3RseSB0byB0aGUgYWN0dWFsIGFyZ3VtZW50
cyBpbiB0aGUgY2FsbCBmcmFtZQorICAgICAgICBoZWFkZXIgKG9yIHRoZSBhcmd1bWVudHMgd2Ug
a25vdyB0aGF0IHdlIHBhc3NlZCB0byB0aGUgY2FsbCwgaW4gY2FzZSBvZiBpbmxpbmluZykuCisg
ICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgd2Ugbm8gbG9uZ2VyIGhhdmUgYXJndW1l
bnRzIHNpbXBsaWZpY2F0aW9uIGNyZWF0aW5nIGEgZGVhZCBQaGkgZ3JhcGgKKyAgICAgICAgdGhh
dCB0aGVuIGhhcyB0byBiZSBpbnRlcnByZXRlZCBieSB0aGUgT1NSIGV4aXQgbG9naWMuIFRoYXQg
c29ydCBvZiBuZXZlciBtYWRlIGFueQorICAgICAgICBzZW5zZS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgbWVhbnMgdGhhdCBQaGFudG9tQXJndW1lbnRzIG5vdyBoYXMgYSBjbGVhciBzdG9yeSBp
biBTU0E6IGJhc2ljYWxseSBTU0EganVzdAorICAgICAgICBnZXRzIHJpZCBvZiB0aGUgImxvY2Fs
cyIgYnV0IGV2ZXJ5dGhpbmcgZWxzZSBpcyB0aGUgc2FtZS4KKyAgICAgICAgCisgICAgICAgIEZp
bmFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gbW9yZSBlYXNpbHkgZ2V0IHJpZCBvZiBmb3J3
YXJkIGV4aXRpbmcuIEFzIEkgd2FzCisgICAgICAgIHdvcmtpbmcgb24gdGhlIGNvZGUgdG8gZ2V0
IHJpZCBvZiBmb3J3YXJkIGV4aXRpbmcsIEkgcmVhbGl6ZWQgdGhhdCBJJ2QgaGF2ZSB0bworICAg
ICAgICBjYXJlZnVsbHkgcHJlc2VydmUgdGhlIHNwZWNpYWwgbWVhbmluZ3Mgb2YgTW92SGludCBh
bmQgU2V0TG9jYWwgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgUGhhbnRvbUFyZ3VtZW50cy4gSXQg
d2FzIHJlYWxseSBiaXphcnJlOiBldmVuIHRoZSBzZW1hbnRpY3Mgb2YgTW92SGludCB3ZXJlIHRp
ZWQgdG8KKyAgICAgICAgb3VyIHNwZWNpZmljIHRyZWF0bWVudCBvZiBQaGFudG9tQXJndW1lbnRz
LiBBZnRlciB0aGlzIGNoYW5nZSB0aGlzIGlzIG5vIGxvbmdlciB0aGUKKyAgICAgICAgY2FzZS4K
KyAgICAgICAgCisgICAgICAgIE9uZSBvZiB0aGUgcmVhbGx5IGNvb2wgdGhpbmdzIGFib3V0IHRo
aXMgY2hhbmdlIGlzIHRoYXQgYXJndW1lbnRzIHJlaWZpY2F0aW9uIG5vdworICAgICAgICBqdXN0
IGJlY29tZXMgYSBzcGVjaWFsIGtpbmQgb2YgRmx1c2hGb3JtYXQuIFRoaXMgZnVydGhlciB1bmlm
aWVzIHRoaW5nczogaXQgbWVhbnMKKyAgICAgICAgdGhhdCBhIE1vdkhpbnQoUGhhbnRvbUFyZ3Vt
ZW50cykgYW5kIGEgU2V0TG9jYWwoUGhhbnRvbUFyZ3VtZW50cykgYm90aCBoYXZlIHRoZSBzYW1l
CisgICAgICAgIG1lYW5pbmcsIHNpbmNlIGJvdGggb2YgdGhlbSBkaWN0YXRlIHRoYXQgdGhlIHdh
eSB3ZSByZWNvdmVyIHRoZSBsb2NhbCBvbiBleGl0IGlzIGJ5CisgICAgICAgIHJlaWZ5aW5nIGFy
Z3VtZW50cy4gUHJldmlvdXNseSwgdGhlIFNldExvY2FsKFBoYW50b21Bcmd1bWVudHMpIGNhc2Ug
bmVlZGVkIHNvbWUKKyAgICAgICAgc3BlY2lhbCBoYW5kbGluZyB0byBhY2NvbXBsaXNoIHRoaXMu
CisgICAgICAgIAorICAgICAgICBBIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3
ZSB3aWxsIG5vdyBlbWl0IGNvZGUgdG8gc3RvcmUgdGhlIGVtcHR5IHZhbHVlCisgICAgICAgIGlu
dG8gYWxpYXNlZCBhcmd1bWVudHMgdmFyaWFibGVzLCBhbmQgd2Ugd2lsbCBldmVuIGVtaXQgY29k
ZSB0byBsb2FkIHRoYXQgZW1wdHkgdmFsdWUKKyAgICAgICAgYXMgd2VsbC4gQXMgZmFyIGFzIEkg
Y2FuIHRlbGwgdGhpcyBkb2Vzbid0IGNvc3QgYW55dGhpbmcsIHNpbmNlIFBoYW50b21Bcmd1bWVu
dHMgYXJlCisgICAgICAgIG1vc3QgcHJvZml0YWJsZSBpbiBjYXNlcyB3aGVyZSBpdCBhbGxvd3Mg
dXMgdG8gc2ltcGxpZnkgY29udHJvbCBmbG93IGFuZCBraWxsIHRoZQorICAgICAgICBhcmd1bWVu
dHMgbG9jYWxzIGVudGlyZWx5LiBPZiBjb3Vyc2UsIHRoaXMgaXNuJ3QgYW4gaXNzdWUgaW4gU1NB
IGZvcm0gc2luY2UgU1NBIGZvcm0KKyAgICAgICAgYWxzbyBlbGltaW5hdGVzIHRoZSBsb2NhbHMu
CisKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpkZXR5cGVBcmd1
bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoRm9y
bWF0LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R0ZsdXNoRm9ybWF0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6cmVzdWx0Rm9yKToKKyAgICAgICAg
KEpTQzo6REZHOjp1c2VLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkYXRhRm9ybWF0Rm9y
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OlZh
bHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRmx1c2hGb3Jt
YXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpidWlsZEV4aXRBcmd1bWVudHMpOgorCiAyMDEzLTEyLTIzICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgUHV0UHJvcGVydHlTbG90IHRvIGJlIGF3
YXJlIG9mIGN1c3RvbSBwcm9wZXJ0aWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxMCArMTk1LDEwIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
IHsKLSAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gQSBNb3ZIaW50IGlzIGVm
ZmVjdGl2ZWx5IGEgcHJvbWlzZSB0aGF0IHRoZSBTZXRMb2NhbAotICAgICAgICAvLyB3YXMgZGVh
ZC4KKyAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZy4gQSBNb3ZIaW50IG9ubHkgaW5mb3JtcyB1cyBhYm91dCB3aGF0IHdvdWxkIGhhdmUgaGFw
cGVuZWQKKyAgICAgICAgLy8gaW4gYnl0ZWNvZGUsIGJ1dCB0aGlzIGNvZGUgaXMganVzdCBjb25j
ZXJuZWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IGhhcHBlbmluZyBkdXJpbmcKKyAgICAgICAgLy8g
REZHIGV4ZWN1dGlvbi4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk1LDE2ICszOTUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3RvcmUgaW50byBh
IFZhcmlhYmxlQWNjZXNzRGF0YSogdGhhdCBpcyBtYXJrZWQgYXMKLSAgICAgICAgICAgICAgICAg
ICAgLy8gYXJndW1lbnRzIGFsaWFzaW5nIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUqIHRoYXQgZG9l
cyBub3QgY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cywgdGhlbiBmbGFn
IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYXMgYmVpbmcgYW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gYXJndW1lbnRzLWFsaWFzZWQuIFRoaXMnbGwgbGV0IHRoZSBPU1IgZXhpdCBtYWNoaW5lcnkg
ZG8gdGhlIHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNvIHRo
YXQgdGhlIFNldExvY2FsIHNob3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHdlIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRoIEdl
dE15QXJndW1lbnRzTGVuZ3RoIGFuZAotICAgICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3Vt
ZW50QnlWYWwuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFzaW5n
LmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKHRy
dWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIApAQCAtNDIwLDIyICs0MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKLSAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgIW1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52
YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFR1cm4gUGhhbnRvbUxvY2FscyBpbnRvIGp1c3QgR2V0TG9jYWxzLiBUaGlz
IHdpbGwgcHJlc2VydmUgdGhlIHRocmVhZGluZwotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgbG9jYWwgdGhyb3VnaCB0byB0aGlzIHBvaW50LCBidXQgd2lsbCBhbGxvdyBpdCB0byBkaWUs
IGNhdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBPU1IgdG8ga25vdyBhYm91dCBp
dC4KLQotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRM
b2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC00NTksNyArNDMzLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyAyKSBUaGUgUGhhbnRvbSBtYXkga2VlcCB0aGUgQ3JlYXRl
QXJndW1lbnRzIG5vZGUgYWxpdmUsIHdoaWNoIGlzCiAgICAgICAgICAgICAgICAgICAgIC8vICAg
IHByZWNpc2VseSB3aGF0IHdlIGRvbid0IHdhbnQuCiAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZW1vdmVBcmd1bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZChub2Rl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldHlwZUFyZ3VtZW50c1JlZmVyZW5jaW5n
UGhhbnRvbUNoaWxkKG5vZGUsIGkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcwLDcgKzQ0NCw2IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC00ODgsOCAr
NDYxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNp
ZGVyYXRpb24gb2YgdGhpcyBvcCBub3cgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgpA
QCAtNTAzLDcgKzQ3OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkg
PSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KEdldE15QXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNp
ZGVyYXRpb24gb2YgdGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3Ro
LgpAQCAtNTgwLDggKzU1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC01OTEsOCArNTY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
UGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
QEAgLTYyNyw2ICs2MDQsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGlu
ZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IFBoYW50b20pCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lM
aXN0OjpTaXplOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGRldHlwZUFyZ3VtZW50c1JlZmVy
ZW5jaW5nUGhhbnRvbUNoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgbV9ncmFwaC5kZXRo
cmVhZCgpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7CkBAIC03NjQs
MzUgKzc1NCwyMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSog
bm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgZGV0eXBlQXJndW1lbnRzUmVmZXJl
bmNpbmdQaGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQogICAgIHsK
ICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKICAg
ICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAg
c3dpdGNoIChlZGdlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMgaWYgd2Ug
aGFkIENTRSBvbiBhIEdldExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCi0gICAgICAg
IGNhc2UgR2V0TG9jYWw6IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3VtZW50cyBh
Y2Nlc3MgdG8gYSB2YXJpYWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCi0gICAgICAgIGNh
c2UgU2V0TG9jYWw6IHsgLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBvZiB0
aGUgYXJndW1lbnRzIHJlZ2lzdGVyLgorICAgICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGVkZ2UtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgYm9vbCBpc0RlYWRBcmd1bWVudHNSZWdpc3Rl
ciA9Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoZWRn
ZS0+Y29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGJv
b2wgaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgICF2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKLSAgICAg
ICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGlmICghaXNEZWFkQXJndW1lbnRzUmVn
aXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQorICAgICAgICAgICAgaWYgKCF2
YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQXJndW1lbnRzQWxpYXMoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoZWRnZUluZGV4KTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCkuc2V0VXNlS2luZChV
bnR5cGVkVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsgLy8gQXJpc2VzIGlmIHdlIENTRSB0d28g
R2V0TG9jYWxzIHRvIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIgYW5kIHRoZW4gQ1NFIHRoZSBzZWNv
bmQgdXNlIG9mIHRoZSBHZXRMb2NhbCB0byB0aGUgZmlyc3QuCi0gICAgICAgICAgICBpZiAobV9j
cmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
bW92ZUVkZ2UoZWRnZUluZGV4KTsKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLnNldFVzZUtpbmQoVW50
eXBlZFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Nyw2ICsxODcsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJpdEFuZDoKICAgICAgICAgY2Fz
ZSBCaXRPcjoKICAgICAgICAgY2FzZSBCaXRYb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNSwxMiArMjM1LDE2IEBAIHByaXZhdGU6CiAgICAgZW51bSBTZXRNb2RlIHsg
Tm9ybWFsU2V0LCBTZXRPbkVudHJ5IH07CiAgICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQog
ICAgIHsKLSAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KLSAgICAgICAgaWYgKG9wZXJh
bmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHNldEFyZ3VtZW50KG9wZXJhbmQs
IHZhbHVlLCBzZXRNb2RlKTsKLQotICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAg
IHJldHVybiBzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgIERlbGF5
ZWRTZXRMb2NhbCBkZWxheWVkID0gRGVsYXllZFNldExvY2FsKG9wZXJhbmQsIHZhbHVlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChzZXRNb2RlID09IE5vcm1hbFNldCkgeworICAgICAgICAgICAg
bV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChkZWxheWVkKTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhv
cGVyYW5kLT5sb2NhbCgpKSwgbm9kZSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZGVsYXll
ZC5leGVjdXRlKHNldE1vZGUpOwogICAgIH0KIAogICAgIE5vZGUqIHNldChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKQEAg
LTExMjEsNiArMTEyNSwyNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgSW5saW5lU3Rh
Y2tFbnRyeSogbV9pbmxpbmVTdGFja1RvcDsKKyAgICAKKyAgICBzdHJ1Y3QgRGVsYXllZFNldExv
Y2FsIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSog
bV92YWx1ZTsKKyAgICAgICAgCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQorICAgICAg
ICBEZWxheWVkU2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlKQor
ICAgICAgICAgICAgOiBtX29wZXJhbmQob3BlcmFuZCkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBleGVj
dXRlKEJ5dGVDb2RlUGFyc2VyKiBwYXJzZXIsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQob3BlcmFuZCwgdmFsdWUsIHNl
dE1vZGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0TG9jYWwob3BlcmFuZCwgdmFs
dWUsIHNldE1vZGUpOworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8RGVsYXll
ZFNldExvY2FsLCAyPiBtX3NldExvY2FsUXVldWU7CiAKICAgICAvLyBIYXZlIHdlIGJ1aWx0IG9w
ZXJhbmQgbWFwcz8gV2UgaW5pdGlhbGl6ZSB0aGVtIGxhemlseSwgYW5kIG9ubHkgd2hlbiBkb2lu
ZwogICAgIC8vIGlubGluaW5nLgpAQCAtMTg5MSw2ICsxOTE2LDEwIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24g
PSBjdXJyZW50SW5zdHJ1Y3Rpb247IC8vIFNvbWUgbWV0aG9kcyB3YW50IHRvIHVzZSB0aGlzLCBh
bmQgd2UnZCByYXRoZXIgbm90IHRocmVhZCBpdCB0aHJvdWdoIGNhbGxzLgogICAgICAgICBPcGNv
ZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rp
b24tPnUub3Bjb2RlKTsKICAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3NldExvY2FsUXVl
dWVbaV0uZXhlY3V0ZSh0aGlzKTsKKyAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLnJlc2l6ZSgwKTsK
KyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpIHsKICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ291bnRFeGVjdXRpb24sIE9wSW5mbyhtX2dyYXBoLmNvbXBpbGF0aW9u
KCktPmV4ZWN1dGlvbkNvdW50ZXJGb3IoCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdp
blN0YWNrKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrLCBjdXJyZW50
Q29kZU9yaWdpbigpKSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw2IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFVwc2ls
b246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE2
MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Miw4ICsxODIsNiBAQCBlbnVtIFJlZkNvdW50U3RhdGUgewogCiBlbnVtIE9w
ZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24sIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB9OwogCi1lbnVtIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHsgRm9y
d2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uIH07Ci0KIGVudW0gUHJvb2ZTdGF0
dXMgeyBOZWVkc0NoZWNrLCBJc1Byb3ZlZCB9OwogCiBpbmxpbmUgYm9vbCBpc1Byb3ZlZChQcm9v
ZlN0YXR1cyBwcm9vZlN0YXR1cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDM3ICsxNTksMjMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKICAgICAgICAgICAgIGNhc2UgTW92SGludDogewotICAgICAgICAgICAgICAgIEFTU0VSVCgo
bm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2so
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhh
dCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMKLSAgICAgICAgICAgICAgICAgICAgLy8g
Y2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAmJiBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2Rl
LT5jaGlsZDEoKS0+b3AoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KSA9IG5vZGUtPmNoaWxkMSgpLT5jaGlsZDEoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhab21iaWVIaW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKE1vdkhpbnRBbmRDaGVjayk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+
c2V0UmVmQ291bnQoMSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoTW92SGludCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnQ6IHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0g
PT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBu
b3Qgc2hvdWxkR2VuZXJhdGUuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDog
eworICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBEQ0UgcnVucyBv
bmx5IG9uY2UuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmly
c3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEw
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDcsOSArOTA3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zm
c2V0OgogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgY2FzZSBNb3ZIaW50Ogot
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50Ogog
ICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgICAgICBjYXNlIENoZWNrVGllclVw
QXRSZXR1cm46CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKQEAgLTEwMDUs
NiArMTAwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxD
aGVjazoKICAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBj
YXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAg
IGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVm
YXVsdDoKQEAgLTE1OTIsOCArMTU5MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgU3BlY0ludDUyQXNEb3VibGUsIEludDMyVG9Eb3VibGUsCiAgICAgICAgICAgICBtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luLCBFZGdlKGVkZ2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKLSAgICAg
ICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgICAgICByZXN1
bHQtPm1lcmdlRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7CiAgICAgICAgIAogICAgICAgICBlZGdl
ID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRmx1
CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSlNW
YWx1ZSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgorICAg
ICAgICBvdXQucHJpbnQoIkZsdXNoZWRBcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKICAgICAgICAgb3V0LnByaW50KCJDb25mbGljdGluZ0Zs
dXNoIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBA
QCBlbnVtIEZsdXNoRm9ybWF0IHsKICAgICBGbHVzaGVkQ2VsbCwKICAgICBGbHVzaGVkQm9vbGVh
biwKICAgICBGbHVzaGVkSlNWYWx1ZSwKKyAgICBGbHVzaGVkQXJndW1lbnRzLAogICAgIENvbmZs
aWN0aW5nRmx1c2gKIH07CiAKQEAgLTU2LDYgKzU3LDcgQEAgaW5saW5lIE5vZGVGbGFncyByZXN1
bHRGb3IoRmx1c2hGb3JtYXQgZgogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CiAgICAgY2FzZSBG
bHVzaGVkQ2VsbDoKICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgY2FzZSBGbHVzaGVk
QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEpTOwogICAgIGNhc2UgRmx1c2hl
ZEludDMyOgogICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEludDMyOwpAQCAtNzYsNiArNzgsNyBA
QCBpbmxpbmUgVXNlS2luZCB1c2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvCiAgICAgY2FzZSBEZWFk
Rmx1c2g6CiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICBjYXNlIENvbmZsaWN0aW5nRmx1
c2g6CisgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gVW50eXBlZFVz
ZTsKICAgICBjYXNlIEZsdXNoZWRDZWxsOgogICAgICAgICByZXR1cm4gQ2VsbFVzZTsKQEAgLTEx
MCw2ICsxMTMsOCBAQCBpbmxpbmUgRGF0YUZvcm1hdCBkYXRhRm9ybWF0Rm9yKEZsdXNoRm9yCiAg
ICAgICAgIHJldHVybiBEYXRhRm9ybWF0Q2VsbDsKICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgog
ICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEJvb2xlYW47CisgICAgY2FzZSBGbHVzaGVkQXJndW1l
bnRzOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEFyZ3VtZW50czsKICAgICB9CiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gRGF0YUZvcm1hdERlYWQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShy
ZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE1ICszOCwxMyBAQCBNaW5pZmllZE5vZGUg
TWluaWZpZWROb2RlOjpmcm9tTm9kZShOb2RlCiAgICAgTWluaWZpZWROb2RlIHJlc3VsdDsKICAg
ICByZXN1bHQubV9pZCA9IE1pbmlmaWVkSUQobm9kZSk7CiAgICAgcmVzdWx0Lm1fb3AgPSBub2Rl
LT5vcCgpOwotICAgIGlmIChoYXNDaGlsZChub2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0Lm1f
Y2hpbGRPckluZm8gPSBNaW5pZmllZElEKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkubV9pZDsKLSAg
ICBlbHNlIGlmIChoYXNDb25zdGFudE51bWJlcihub2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0
Lm1fY2hpbGRPckluZm8gPSBub2RlLT5jb25zdGFudE51bWJlcigpOworICAgIGlmIChoYXNDb25z
dGFudE51bWJlcihub2RlLT5vcCgpKSkKKyAgICAgICAgcmVzdWx0Lm1faW5mbyA9IG5vZGUtPmNv
bnN0YW50TnVtYmVyKCk7CiAgICAgZWxzZSBpZiAoaGFzV2Vha0NvbnN0YW50KG5vZGUtPm9wKCkp
KQotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAgICAgICAgcmVzdWx0Lm1faW5mbyA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtDb25zdGFudCgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50cyk7Ci0gICAgICAgIHJlc3Vs
dC5tX2NoaWxkT3JJbmZvID0gMDsKKyAgICAgICAgcmVzdWx0Lm1faW5mbyA9IDA7CiAgICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0Myw3
IEBAIGlubGluZSBib29sIGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgoTm9kZVQKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoK
LSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgY2Fz
ZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgY2FzZSBQaGFu
dG9tQXJndW1lbnRzOgotICAgIGNhc2UgSW50NTJUb1ZhbHVlOgotICAgIGNhc2UgSW50NTJUb0Rv
dWJsZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
KCFwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyh0eXBlKSAmJiAhcGVybWl0c09TUkZvcndhcmRS
ZXdpcmluZyh0eXBlKSk7CkBAIC02NiwxNCArNjAsNiBAQCBwdWJsaWM6CiAgICAgTWluaWZpZWRJ
RCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3A7IH0KICAgICAKLSAgICBib29sIGhhc0NoaWxkMSgpIGNvbnN0IHsgcmV0dXJu
IGhhc0NoaWxkKG1fb3ApOyB9Ci0gICAgCi0gICAgTWluaWZpZWRJRCBjaGlsZDEoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG1fb3ApKTsKLSAgICAgICAgcmV0dXJuIE1p
bmlmaWVkSUQ6OmZyb21CaXRzKG1fY2hpbGRPckluZm8pOwotICAgIH0KLSAgICAKICAgICBib29s
IGhhc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIoKSB8fCBoYXNX
ZWFrQ29uc3RhbnQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoKSBjb25z
dCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQpAQCAtODEsNyArNjcsNyBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgY29uc3RhbnROdW1iZXIoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc0NvbnN0YW50TnVtYmVyKG1fb3ApKTsKLSAgICAgICAgcmV0dXJuIG1fY2hp
bGRPckluZm87CisgICAgICAgIHJldHVybiBtX2luZm87CiAgICAgfQogICAgIAogICAgIGJvb2wg
aGFzV2Vha0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzV2Vha0NvbnN0YW50KG1fb3ApOyB9
CkBAIC04OSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzV2Vha0NvbnN0YW50KG1fb3ApKTsKLSAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX2NoaWxkT3JJbmZvKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX2luZm8pOwogICAgIH0KICAgICAKICAgICBz
dGF0aWMgTWluaWZpZWRJRCBnZXRJRChNaW5pZmllZE5vZGUqIG5vZGUpIHsgcmV0dXJuIG5vZGUt
PmlkKCk7IH0KQEAgLTk5LDIwICs4NSw2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRl
OgotICAgIHN0YXRpYyBib29sIGhhc0NoaWxkKE5vZGVUeXBlIHR5cGUpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgIGNh
c2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAg
Y2FzZSBEb3VibGVBc0ludDMyOgotICAgICAgICBjYXNlIEludDUyVG9Eb3VibGU6Ci0gICAgICAg
IGNhc2UgSW50NTJUb1ZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CiAgICAg
c3RhdGljIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoTm9kZVR5cGUgdHlwZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0eXBlID09IEpTQ29uc3RhbnQ7CkBAIC0xMjMsNyArOTUsNyBAQCBwcml2YXRl
OgogICAgIH0KICAgICAKICAgICBNaW5pZmllZElEIG1faWQ7Ci0gICAgdWludHB0cl90IG1fY2hp
bGRPckluZm87IC8vIE5vZGVzIGluIHRoZSBtaW5pZmllZCBncmFwaCBoYXZlIG9ubHkgb25lIGNo
aWxkIGVhY2guCisgICAgdWludHB0cl90IG1faW5mbzsKICAgICBOb2RlVHlwZSBtX29wOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAxNjEw
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw5ICs0Niw2IEBAIGJvb2wgTm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRhKEdy
YXBoJiAKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgY2Fz
ZSBTZXRMb2NhbDoKLSAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
Ci0gICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDQyICsyNzQsMjQgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gZmlsdGVyRmxhZ3MofmZsYWdzKTsKICAgICB9CiAgICAgCi0g
ICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gc3BlY3VsYXRpb25EaXJlY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKGZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKQotICAgICAgICAgICAgcmV0dXJu
IEZvcndhcmRTcGVjdWxhdGlvbjsKLSAgICAgICAgcmV0dXJuIEJhY2t3YXJkU3BlY3VsYXRpb247
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0U3BlY3VsYXRpb25EaXJlY3Rpb24oU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24p
IHsKLSAgICAgICAgY2FzZSBGb3J3YXJkU3BlY3VsYXRpb246Ci0gICAgICAgICAgICBtZXJnZUZs
YWdzKE5vZGVFeGl0c0ZvcndhcmQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNl
IEJhY2t3YXJkU3BlY3VsYXRpb246Ci0gICAgICAgICAgICBjbGVhckZsYWdzKE5vZGVFeGl0c0Zv
cndhcmQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgc2V0T3BBbmREZWZh
dWx0RmxhZ3MoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBtX29wID0gb3A7CiAgICAgICAg
IG1fZmxhZ3MgPSBkZWZhdWx0RmxhZ3Mob3ApOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBHZXQg
cmlkIG9mIHRoaXMuCiAgICAgdm9pZCBzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3MoTm9kZVR5
cGUgb3ApCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3Mp
KTsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVja2VkKG9wKTsKICAg
ICB9CiAKKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIHZvaWQgc2V0T3BBbmRE
ZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVja2VkKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAg
bV9vcCA9IG9wOwotICAgICAgICBtX2ZsYWdzID0gKGRlZmF1bHRGbGFncyhvcCkgJiB+Tm9kZUV4
aXRzRm9yd2FyZCkgfCAobV9mbGFncyAmIE5vZGVFeGl0c0ZvcndhcmQpOworICAgICAgICBtX2Zs
YWdzID0gZGVmYXVsdEZsYWdzKG9wKTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50
b20oKQpAQCAtNTMxLDkgKzUxMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICBib29sIGNvbnRhaW5z
TW92SGludCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKLSAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICBjYXNlIE1vdkhpbnRBbmRD
aGVjazoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC01NjcsNiArNTQ3LDggQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAg
ICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAgICBjYXNlIE1vdkhpbnQ6Cisg
ICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE5MCwxMSArMTE3Miw2
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgY2FzZSBN
b3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgIGNhc2UgTW92SGludEFu
ZENoZWNrOgotICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgICAgIGNhc2UgVmFsdWVU
b0ludDMyOgotICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICBjYXNlIERvdWJs
ZUFzSW50MzI6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBjYXNlIFBoYW50b206CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVGbGFncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVmaW5lIE5vZGVSZWxl
dmFudFRvT1NSICAgICAgICAgICAgICAgIDB4NDAwMAogCi0jZGVmaW5lIE5vZGVFeGl0c0Zvcndh
cmQgICAgICAgICAgICAgICAgIDB4ODAwMAotCi0jZGVmaW5lIE5vZGVJc1N0YXRpY0NvbnN0YW50
ICAgICAgICAgICAgMHgxMDAwMCAvLyBVc2VkIG9ubHkgYnkgdGhlIHBhcnNlciwgdG8gZGV0ZXJt
aW5lIGlmIGEgY29uc3RhbnQgYXJvc2Ugc3RhdGljYWxseSBhbmQgaGVuY2UgY291bGQgYmUgZm9s
ZGVkIGF0IHBhcnNlLXRpbWUuCisjZGVmaW5lIE5vZGVJc1N0YXRpY0NvbnN0YW50ICAgICAgICAg
ICAgIDB4ODAwMCAvLyBVc2VkIG9ubHkgYnkgdGhlIHBhcnNlciwgdG8gZGV0ZXJtaW5lIGlmIGEg
Y29uc3RhbnQgYXJvc2Ugc3RhdGljYWxseSBhbmQgaGVuY2UgY291bGQgYmUgZm9sZGVkIGF0IHBh
cnNlLXRpbWUuCiAKIHR5cGVkZWYgdWludDMyX3QgTm9kZUZsYWdzOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDcgKzU4LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIFZhcmlh
YmxlQWNjZXNzRGF0YSwgYW5kIHRodXMgd2lsbCBzaGFyZSBwcmVkaWN0aW9ucy4gKi9cCiAgICAg
bWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFNldExvY2FsLCBOb2Rl
RXhpdHNGb3J3YXJkKSBcCi0gICAgbWFjcm8oTW92SGludEFuZENoZWNrLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUV4aXRzRm9yd2FyZCkgXAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVEb2VzTm90
RXhpdCkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1h
Y3JvKEdldEFyZ3VtZW50LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkBAIC0z
MTgsODAgKzMxNyw2IEBAIGlubGluZSBOb2RlRmxhZ3MgZGVmYXVsdEZsYWdzKE5vZGVUeXBlIG8K
ICAgICB9CiB9CiAKLWlubGluZSBib29sIHBlcm1pdHNPU1JCYWNrd2FyZFJld2lyaW5nKE5vZGVU
eXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIElkZW50aXR5OgotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2UgSW50NTJUb1ZhbHVlOgotICAgIGNhc2Ug
SW50NTJUb0RvdWJsZToKLSAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBvbmx5IG5vZGUgd2hlcmUg
d2UgZG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBiOiBVSW50MzJUb051bWJlcihAYSkK
LSAgICAgICAgLy8gICAgIGM6IFNldExvY2FsKEBiKQotICAgICAgICAvLwotICAgICAgICAvLyBh
bmQgdGhlbiBhbHNvIGhhdmUgc29tZSB1c2VzIG9mIEBhIHdpdGhvdXQgUGhhbnRvbSdpbmcgQGIu
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdGhlIHByaW9yaXR5IHdpdGggd2hpY2ggd2Ugc2hv
dWxkIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZSBmb3IgZm9yd2FyZAotLy8gcmV3aXJpbmcuIEhpZ2hl
ciBpcyBiZXR0ZXIuIFplcm8gbWVhbnMgdGhhdCB0aGUgbm9kZSBpcyBub3QgdXNlZnVsIGZvciBy
ZXdpcmluZy4KLS8vIEJ5IGNvbnZlbnRpb24sIHdlIHVzZSAxMDAgdG8gbWVhbiB0aGF0IHRoZSBu
b2RlIGlzIHRvdGFsbHkgZXF1aXZhbGVudCB0byBpdHMKLS8vIGlucHV0IHdpdGggbm8gaW5mb3Jt
YXRpb24gbG9zcy4KLWlubGluZSB1bnNpZ25lZCBmb3J3YXJkUmV3aXJpbmdTZWxlY3Rpb25TY29y
ZShOb2RlVHlwZSBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBJZGVudGl0eToK
LSAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHNlZSB0aGVzZSBieSB0aGUgdGltZSB3ZSBnZXQgdG8g
T1NSIGV2ZW4gdGhvdWdoIGl0IGNsZWFybHkKLSAgICAgICAgLy8gaXMgYSBwZXJmZWN0IGlkZW50
aXR5IGZ1bmN0aW9uLgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gMTAwOwotICAgICAgICAKLSAgICBjYXNlIERvdWJsZUFzSW50MzI6Ci0gICAg
ICAgIC8vIFRoaXMgc3BlY3VsYXRlcyB0aGF0IHRoZSBpbmNvbWluZyBkb3VibGUgaXMgY29udmVy
dGlibGUgdG8gYW4gaW50MzIuIFNvCi0gICAgICAgIC8vIGl0cyByZXN1bHQgaXMgdG90YWxseSBl
cXVpdmFsZW50LgotICAgICAgICByZXR1cm4gMTAwOwotICAgICAgICAKLSAgICBjYXNlIEludDMy
VG9Eb3VibGU6Ci0gICAgICAgIC8vIFRoaXMgY29udmVydHMgYW4gaW50MzIgdG8gYSBkb3VibGUs
IGJ1dCB0aGF0IGxvc2VzIGEgYml0IG9mIGluZm9ybWF0aW9uLgotICAgICAgICAvLyBPVE9IIGl0
J3Mgc3RpbGwgYW4gZXF1aXZhbGVudCBudW1iZXIuCi0gICAgICAgIHJldHVybiA3NTsKLSAgICAg
ICAgCi0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgLy8gSXQncyBjb21wbGV0ZWx5
IGZpbmUgdG8gdXNlIHRoaXMgZm9yIE9TUiBleGl0LCBzaW5jZSB0aGUgdWludDMyIGlzbid0Ci0g
ICAgICAgIC8vIGFjdHVhbGx5IHJlcHJlc2VudGFibGUgaW4gYnl0ZWNvZGUuCi0gICAgICAgIHJl
dHVybiAxMDA7Ci0KLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgLy8gVGhpcyBsb3Nl
cyBpbmZvcm1hdGlvbi4gT25seSB1c2UgaXQgaWYgdGhlcmUgYXJlIG5vIGJldHRlciBhbHRlcm5h
dGl2ZXMuCi0gICAgICAgIHJldHVybiAyNTsKLSAgICAgICAgCi0gICAgY2FzZSBJbnQ1MlRvVmFs
dWU6Ci0gICAgICAgIC8vIExvc2VzIG5vIGluZm9ybWF0aW9uLiBJdCBqdXN0IGJveGVzIHRoZSB2
YWx1ZSwgd2hpY2ggaXMgd2hhdCBPU1Igd2FudHMKLSAgICAgICAgLy8gdG8gZG8gYW55d2F5Lgot
ICAgICAgICByZXR1cm4gMTAwOwotICAgICAgICAKLSAgICBjYXNlIEludDUyVG9Eb3VibGU6Ci0g
ICAgICAgIC8vIFRoaXMgaXMgbGlrZSBJbnQzMlRvRG91YmxlOyB3ZSBjYW4gdXNlIGl0IGJlY2F1
c2UgaXQgZ2l2ZXMgYSBzZW1hbnRpY2FsbHkKLSAgICAgICAgLy8gZXF1aXZhbGVudCB2YWx1ZSBi
dXQgdGhhdCB2YWx1ZSBtYXkgYmUgYW4gaW50MzIgaW4gYSBkb3VibGUsIHNvIHdlJ2QKLSAgICAg
ICAgLy8gcmF0aGVyIG5vdCBpZiB3ZSBjYW4gYXZvaWQgaXQuCi0gICAgICAgIHJldHVybiA3NTsK
LSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1p
bmxpbmUgYm9vbCBwZXJtaXRzT1NSRm9yd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9wKQotewotICAg
IHJldHVybiBmb3J3YXJkUmV3aXJpbmdTZWxlY3Rpb25TY29yZShvcCkgPiAwOwotfQotCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDogeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTAzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTcgKzEwNCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBFeHRyYWN0T1NSRW50
cnlMb2NhbCwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxv
Y2FsKCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ3JlYXRlIGEg
TW92SGludC4gV2UgY2FuJ3QgdXNlIE1vdkhpbnQncyBkaXJlY3RseSBhdCB0aGlzIHN0YWdlIG9m
Ci0gICAgICAgICAgICAvLyBjb21waWxhdGlvbiwgc28gd2UgY29vayBvbmUgdXAgYnkgY3JlYXRp
bmcgYSBuZXcgVmFyaWFibGVBY2Nlc3NEYXRhCi0gICAgICAgICAgICAvLyB0aGF0IGlzbid0IHVu
aWZpZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVycy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhpcwotICAg
ICAgICAgICAgLy8gU2V0TG9jYWwgd2lsbCB0dXJuIGludG8gYSBNb3ZIaW50IGFuZCB3aWxsIG5v
dCBoYXZlIGFueSB0eXBlIGNoZWNrcy4KLSAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEuYXBwZW5kKAotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSh2YXJp
YWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkpOwotICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLmxhc3QoKTsKLSAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbmV3Um9vdC0+YXBwZW5k
Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVP
cmlnaW4sIE9wSW5mbyhuZXdWYXJpYWJsZSksCisgICAgICAgICAgICBuZXdSb290LT5hcHBlbmRO
b2RlKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBjb2RlT3Jp
Z2luLCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkpLAogICAgICAgICAgICAgICAgIEVkZ2UobG9j
YWxzW2xvY2FsXSkpOwotICAgICAgICAgICAgc2V0TG9jYWwtPnNldFNwZWN1bGF0aW9uRGlyZWN0
aW9uKEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGxv
Y2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwp
IHsKICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzSGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRI
ZWFkLmxvY2FsKGxvY2FsKTsKQEAgLTEyNCw3ICsxMTYsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbG9jYWxzW2xvY2FsXTsKICAgICAgICAgICAgIE5vZGUqIHNldExvY2Fs
ID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOwot
ICAgICAgICAgICAgc2V0TG9jYWwtPnNldFNwZWN1bGF0aW9uRGlyZWN0aW9uKEJhY2t3YXJkU3Bl
Y3VsYXRpb24pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBuZXdSb290LT5hcHBlbmRO
b2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZp
c2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCwyNiArNjgsNiBAQCB2b2lkIE9TUkV4aXQ6OmNvcnJlY3RK
dW1wKExpbmtCdWZmZXImIGxpCiAgICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZl
ci5vZmZzZXRPZihsYWJlbCk7CiB9CiAKLXZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZChC
YXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBOb2RlKiBub2RlOwot
ICAgIE5vZGUqIGxhc3RNb3ZIaW50OwotICAgIGlmICghZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVy
c2lvbihibG9jaywgY3VycmVudE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZVJlY292ZXJ5LCBub2Rl
LCBsYXN0TW92SGludCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChub2RlLT5jb2Rl
T3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKLSAgICAKLSAgICBtX2NvZGVPcmln
aW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgIAotICAgIGlmICghdmFsdWVSZWNvdmVyeSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChsYXN0TW92SGludCk7Ci0gICAgQVNTRVJU
KGxhc3RNb3ZIaW50LT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSk7Ci0gICAgbV92YWx1ZVJlY292
ZXJ5T3ZlcnJpZGUgPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IFZhbHVlUmVjb3ZlcnlPdmVycmlk
ZShsYXN0TW92SGludC0+bG9jYWwoKSwgdmFsdWVSZWNvdmVyeSkpOwotfQotCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAx
LDggKzEwMSw2IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBnZXRQYXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7
CiAgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayop
IGNvbnN0OwogICAgIHZvaWQgY29ycmVjdEp1bXAoTGlua0J1ZmZlciYpOwotICAgIAotICAgIHZv
aWQgY29udmVydFRvRm9yd2FyZChCYXNpY0Jsb2NrKiwgTm9kZSosIHVuc2lnbmVkIG5vZGVJbmRl
eCwgY29uc3QgVmFsdWVSZWNvdmVyeSYpOwogCiAgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2Uu
Y3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNDUgKzQ2LDYgQEAgYm9vbCBPU1JF
eGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZQogICAgICAgICAgICAgRnJlcXVlbnRFeGl0
U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4LCBtX2tpbmQpKTsK
IH0KIAotYm9vbCBPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKLSAg
ICBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRl
eCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAotICAgIE5vZGUqJiBub2RlLCBOb2RlKiYgbGFzdE1v
dkhpbnQpCi17Ci0gICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBh
IFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKLSAgICAvLyBTZXRMb2NhbCB3
aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFsdWVS
ZWNvdmVyeS4KLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAmJiAhaGFzVmFsdWVS
ZWNvdmVyeQotICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7Ci0g
ICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOwot
ICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbkZvckV4
aXRUYXJnZXQgPT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0KTsKLSAgICB9
Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIG5leHQgYnl0ZWNvZGUg
aW5zdHJ1Y3Rpb24uIEFsc28gdHJhY2sgdGhlIGxhc3QgbW92IGhpbnQKLSAgICAvLyBvbiB0aGlz
IG5vZGUuCi0gICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrID0gbm9kZUluZGV4ICsgMTsKLSAgICBu
b2RlID0gMDsKLSAgICBsYXN0TW92SGludCA9IDA7Ci0gICAgZm9yICg7OykgewotICAgICAgICBp
ZiAoaW5kZXhJbkJsb2NrID09IGJsb2NrLT5zaXplKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgYW4gaW5saW5lIHJldHVybi4gR2l2ZSB1cCBhbmQgZG8gYSBiYWNrd2FyZHMgc3BlY3VsYXRp
b24uIFRoaXMgaXMgc2FmZQotICAgICAgICAgICAgLy8gYmVjYXVzZSBhbiBpbmxpbmUgcmV0dXJu
IGhhcyBpdHMgb3duIGJ5dGVjb2RlIGluZGV4IGFuZCBpdCdzIGFsd2F5cyBzYWZlIHRvCi0gICAg
ICAgICAgICAvLyByZWV4ZWN1dGUgdGhhdCBieXRlY29kZS4KLSAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IEp1bXApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgaWYgKG5v
ZGUtPmNvbnRhaW5zTW92SGludCgpICYmIG5vZGUtPmNoaWxkMSgpID09IGN1cnJlbnROb2RlKQot
ICAgICAgICAgICAgbGFzdE1vdkhpbnQgPSBub2RlOwotICAgICAgICBpZiAobm9kZS0+Y29kZU9y
aWdpbkZvckV4aXRUYXJnZXQgIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAgIH0KLSAg
ICAKLSAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgIT0gY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCShyZXZpc2lvbiAx
NjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDExICs2NCw2IEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJl
cXVlbnRFeGl0U2l0ZVNsb3cocHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KLSAgICAKLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvcndhcmQgY29udmVyc2lvbiBpcyByZWFsbHkgbmVlZGVk
LgotICAgIGJvb2wgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKLSAgICAgICAgQmFzaWNC
bG9jayosIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGJvb2wgaGFzVmFs
dWVSZWNvdmVyeSwKLSAgICAgICAgTm9kZSomIG5leHRCQ05vZGUsIE5vZGUqJiBsYXN0TW92SGlu
dCk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3coQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNCw5
ICs1MDQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNh
c2UgQXJyYXlpZnk6CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKLSAgICAgICAg
Y2FzZSBNb3ZIaW50OgotICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2Fz
ZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgICAgICBj
YXNlIENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JF
bnRlcjoKQEAgLTU4NSw2ICs1ODIsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEZ1bmN0aW9u
UmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAg
ICAgICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKKyAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFz
IGEgcHJlZGljdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg2LDcgKzE4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgdmFsdWUgd2FzIGFscmVhZHkgb24gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTcGVj
Tm9uZSwgTW92SGludCwgQ29kZU9yaWdpbigpLCBPcEluZm8odmFyaWFibGUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgQ29kZU9yaWdpbigp
LCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFZGdlKG5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gLSBHZXRM
b2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJlcGxhY2VkIHdpdGgg
cmVmZXJlbmNlcwogICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNwZWNpZmllZCBieSB2YXJpYWJs
ZXNBdEhlYWQuCiAgICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVzdEdlbmVyYXRlIGlm
IGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhCi0gICAgICAgIC8vICAgTW92SGludCBvdGhl
cndpc2UuCisgICAgICAgIC8vICAgUGhhbnRvbSBvdGhlcndpc2UuCiAgICAgICAgIC8vIC0gRmx1
c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1haW5zLCBiZWNhdXNlIHdlIHdhbnQgdG8ga25v
dyB3aGVuIGEKICAgICAgICAgLy8gICBmbHVzaGVkIFNldExvY2FsJ3MgdmFsdWUgaXMgbm8gbG9u
Z2VyIG5lZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0IHNpbXBsZXIKICAgICAgICAgLy8gICB0byBy
ZWFzb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxvY2FsLCBzaW5jZSB3ZSBjYW4ganVzdCBkbyBh
IGJhY2t3YXJkcwpAQCAtMzA4LDcgKzMwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVzaGVkTG9jYWxPcHMuY29udGFp
bnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVN
dXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+bWlzYy5yZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsgLy8gT25s
eSBmb3IgVXBzaWxvbnMuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw2IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldENhbGxlZToKICAg
ICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNl
IEdldEFyZ3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTIwLDExICsxOTIwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIE1vdkhpbnRBbmRD
aGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKG5vZGUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJp
ZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE5MzIs
MTIgKzE5MjcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVz
IGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCi0gICAgICAg
IC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBz
dXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2YgdGhpcyBub2Rl
IG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAgICAgIC8vIHN0YWNrLgotICAgICAgICBj
b21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgY2FzZSBGbHVzaGVk
RG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKQEAgLTE5ODgsMTUgKzE5NzcsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVl
LnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS0+bWFjaGluZUxvY2Fs
KCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIEpJVENvbXBp
bGVyOjp0YWdGb3Iobm9kZS0+bWFjaGluZUxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwotICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdEpTKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gSWYgd2UncmUgc3RvcmluZyBhbiBhcmd1bWVudHMgb2Jq
ZWN0IHRoYXQgaGFzIGJlZW4gb3B0aW1pemVkIGF3YXksCi0gICAgICAgICAgICAvLyBvdXIgdmFy
aWFibGUgZXZlbnQgc3RyZWFtIGZvciBPU1IgZXhpdCBub3cgcmVmbGVjdHMgdGhlIG9wdGltaXpl
ZAotICAgICAgICAgICAgLy8gdmFsdWUgKEpTVmFsdWUoKSkuIE9uIHRoZSBzbG93IHBhdGgsIHdl
IHdhbnQgYW4gYXJndW1lbnRzIG9iamVjdAotICAgICAgICAgICAgLy8gaW5zdGVhZC4gV2UgYWRk
IGFuIGFkZGl0aW9uYWwgbW92ZSBoaW50IHRvIHNob3cgT1NSIGV4aXQgdGhhdCBpdAotICAgICAg
ICAgICAgLy8gbmVlZHMgdG8gcmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvYmplY3QuCi0gICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50cykKLSAg
ICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIzNiwxMSArMjIzNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIE1v
dkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKG5vZGUpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgTW92SGludDoKICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTIyNDgsMTIgKzIyNDMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAvLyBTZXRMb2Nh
bCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5k
Ci0gICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxh
dGUgbWFrZSBzdXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2Yg
dGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAgICAgIC8vIHN0YWNrLgot
ICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHN3aXRjaCAo
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgY2Fz
ZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTIyOTksMjAgKzIyODgsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7Cisg
ICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50
czogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Iobm9kZS0+bWFjaGluZUxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZWNvcmRTZXRMb2NhbChEYXRhRm9y
bWF0SlMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBzdG9yaW5nIGFu
IGFyZ3VtZW50cyBvYmplY3QgdGhhdCBoYXMgYmVlbiBvcHRpbWl6ZWQgYXdheSwKLSAgICAgICAg
ICAgIC8vIG91ciB2YXJpYWJsZSBldmVudCBzdHJlYW0gZm9yIE9TUiBleGl0IG5vdyByZWZsZWN0
cyB0aGUgb3B0aW1pemVkCi0gICAgICAgICAgICAvLyB2YWx1ZSAoSlNWYWx1ZSgpKS4gT24gdGhl
IHNsb3cgcGF0aCwgd2Ugd2FudCBhbiBhcmd1bWVudHMgb2JqZWN0Ci0gICAgICAgICAgICAvLyBp
bnN0ZWFkLiBXZSBhZGQgYW4gYWRkaXRpb25hbCBtb3ZlIGhpbnQgdG8gc2hvdyBPU1IgZXhpdCB0
aGF0IGl0Ci0gICAgICAgICAgICAvLyBuZWVkcyB0byByZWNvbnN0cnVjdCB0aGUgYXJndW1lbnRz
IG9iamVjdC4KLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9t
QXJndW1lbnRzKQotICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2MTAz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgwLDE0ICsxMzgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1vdkhpbnQoTm9kZQogICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgIG5vdGljZU9TUkJpcnRoKGNoaWxkKTsKICAgICAKLSAgICBtX3N0cmVhbS0+YXBw
ZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUt
PmxvY2FsKCkpKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnRBbmRD
aGVjayhOb2RlKiBub2RlKQotewotICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwotICAgIHNwZWN1
bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgbm9SZXN1bHQobm9kZSk7CisgICAgbV9z
dHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hp
bGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
YmFpbCgpCkBAIC0xNDM2LDkgKzE0MjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrCiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIERhdGFGb3JtYXQgZm9y
bWF0OwotICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1lbnRzQWxpYXMoKSkKLSAgICAgICAg
ICAgIGZvcm1hdCA9IERhdGFGb3JtYXRBcmd1bWVudHM7Ci0gICAgICAgIGVsc2UgaWYgKCFub2Rl
LT5yZWZDb3VudCgpKQorICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBTZXRMb2NhbCdzLgogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBkYXRhRm9ybWF0Rm9yKHZhcmlhYmxlLT5mbHVz
aEZvcm1hdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDEwICsyNDUsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgZWRnZS0+b3AoKSA9PSBQaGkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2Ut
Pm9wKCkgPT0gWm9tYmllSGludAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3Ao
KSA9PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IE1v
dkhpbnRBbmRDaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09
IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAocGhp
c0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtMjU3LDkgKzI1NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSwg
ZWRnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2Nh
bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gWm9tYmllSGlu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGludAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGludEFuZENo
ZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1
bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gp
OwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yOTIsOSArMjg2LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gTW92SGludAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IE1vdkhpbnRBbmRDaGVj
awotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFpvbWJp
ZUhpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgp
ID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRnZS5u
b2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNl
LmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
dWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFsdWVTb3VyY2VLaW5kKQog
ICAgICAgICA6IG1fa2luZCh2YWx1ZVNvdXJjZUtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQo
a2luZCgpID09IEFyZ3VtZW50c1NvdXJjZSB8fCBraW5kKCkgPT0gU291cmNlSXNEZWFkKTsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBcmd1bWVudHNTb3VyY2UgfHwga2luZCgpID09IFNvdXJj
ZUlzRGVhZCB8fCBraW5kKCkgPT0gQXJndW1lbnRzU291cmNlKTsKICAgICB9CiAgICAgCiAgICAg
ZXhwbGljaXQgVmFsdWVTb3VyY2UoTWluaWZpZWRJRCBpZCkKQEAgLTE1OSw2ICsxNTksOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjaywgd2hl
cmUpOwogICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgogICAgICAgICAgICAgcmV0dXJuIFZh
bHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2ssIHdoZXJlKTsKKyAgICAgICAgY2FzZSBGbHVzaGVk
QXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJj
ZSk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIFZhbHVlU291cmNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE2MTAzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyOCw2ICszMjgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQoZmluZCgpID09IHRoaXMpOwogICAgICAgICAKKyAgICAgICAgaWYgKGlzQXJndW1lbnRzQWxp
YXMoKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkQXJndW1lbnRzOworICAgICAgICAKICAg
ICAgICAgaWYgKCFzaG91bGRVbmJveElmUG9zc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBG
bHVzaGVkSlNWYWx1ZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDE2MTAzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Miw3MCArMTkyLDggQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgCiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbklu
Zm8gaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5nZXQoc291cmNlLmlkKCkpOwogICAgICAgICBpZiAo
aW5mby5mb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgICAgIC8vIFRyeSB0byBz
ZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2
YWx1ZSB3ZSB3YW50LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEJhY2t3YXJkIHJl
d2lyaW5nIHJlZmVycyB0bzoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICAgYTog
U29tZXRoaW5nKC4uLikKLSAgICAgICAgICAgIC8vICAgICBiOiBJZChAYSkgLy8gc29tZSBpZGVu
dGl0eSBmdW5jdGlvbgotICAgICAgICAgICAgLy8gICAgIGM6IFNldExvY2FsKEBiKQotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdoZXJlIHdlIGZpbmQgQGIgYmVpbmcgZGVhZCwgYnV0
IEBhIGlzIHN0aWxsIGFsaXZlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEZvcndh
cmQgcmV3aXJpbmcgcmVmZXJzIHRvOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAg
ICBhOiBTb21ldGhpbmcoLi4uKQotICAgICAgICAgICAgLy8gICAgIGI6IFNldExvY2FsKEBhKQot
ICAgICAgICAgICAgLy8gICAgIGM6IElkKEBhKSAvLyBzb21lIGlkZW50aXR5IGZ1bmN0aW9uCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2hlcmUgd2UgZmluZCBAYSBiZWluZyBkZWFk
LCBidXQgQGIgaXMgc3RpbGwgYWxpdmUuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUgJiYgcGVy
bWl0c09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKLSAgICAgICAgICAgICAgICBN
aW5pZmllZElEIGlkID0gbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyeVRv
U2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIGNvZGVCbG9jaywgZ3JhcGgu
YXQoaWQpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
aW5mbyA9IGdlbmVyYXRpb25JbmZvcy5nZXQoaWQpOwotICAgICAgICAgICAgICAgIGlmIChpbmZv
LmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5k
KSB7Ci0gICAgICAgICAgICAgICAgTWluaWZpZWRJRCBiZXN0SUQ7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgYmVzdFNjb3JlID0gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+OjppdGVyYXRvciBp
dGVyID0gZ2VuZXJhdGlvbkluZm9zLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxN
aW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPjo6aXRlcmF0b3IgZW5kID0gZ2VuZXJh
dGlvbkluZm9zLmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSBpdGVyLT5rZXk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChpZCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc0NoaWxkMSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAh
PSBzb3VyY2UuaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuZm9ybWF0ID09IERhdGFGb3JtYXROb25lKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG15U2NvcmUgPSBmb3J3YXJkUmV3aXJpbmdTZWxlY3Rpb25TY29yZShub2RlLT5vcCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG15U2NvcmUgPD0gYmVzdFNjb3JlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGJlc3RJRCA9
IGlkOwotICAgICAgICAgICAgICAgICAgICBiZXN0U2NvcmUgPSBteVNjb3JlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoISFiZXN0SUQp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5nZXQoYmVzdElE
KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm8uZm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFmb3VuZCkg
ewotICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNv
bnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6
Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgQVNTRVJUKGluZm8uZm9ybWF0ICE9IERhdGFGb3JtYXROb25l
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwOSw2ICs0MjA5LDEyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CiAgICAgICAgICAgICAg
ICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gu
dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgorICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTg2CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220006</attachid>
            <date>2013-12-25 15:39:15 -0800</date>
            <delta_ts>2013-12-25 15:44:56 -0800</delta_ts>
            <desc>passing some tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84462</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEzLTEyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIFBoYW50b21Bcmd1bWVudHMgc2hvdWxkbid0IHJlbHkgb24gYSBkZWFkIFBoaSBncmFwaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MjE4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNoYW5nZSBkcmFtYXRpY2FsbHkgcmF0aW9uYWxpemVzIG91ciBoYW5kbGluZyBvZiBQaGFu
dG9tQXJndW1lbnRzIChpLmUuCisgICAgICAgIHNwZWN1bGF0aXZlIGVsaXNpb24gb2YgYXJndW1l
bnRzIG9iamVjdCBhbGxvY2F0aW9uKS4KKyAgICAgICAgCisgICAgICAgIEl0J3Mgbm93IHRoZSBj
YXNlIHRoYXQgaWYgd2UgZGVjaWRlIHRoYXQgd2UgY2FuIGVsaWRlIGFyZ3VtZW50cyBhbGxvY2F0
aW9uLCB3ZSBqdXN0CisgICAgICAgIHR1cm4gdGhlIGFyZ3VtZW50cy1jcmVhdGluZyBub2RlIGlu
dG8gYSBQaGFudG9tQXJndW1lbnRzIGFuZCBtYXJrIGFsbCBsb2NhbHMgdGhhdAorICAgICAgICBp
dCdzIHN0b3JlZCB0byBhcyBiZWluZyBhcmd1bWVudHMgYWxpYXNlcy4gQmVpbmcgYW4gYXJndW1l
bnRzIGFsaWFzIGFuZCBiZWluZyBhCisgICAgICAgIFBoYW50b21Bcmd1bWVudHMgbWVhbnMgYmFz
aWNhbGx5IHRoZSBzYW1lIHRoaW5nOiBpbiBERkcgZXhlY3V0aW9uIHlvdSBoYXZlIHRoZSBlbXB0
eQorICAgICAgICB2YWx1ZSwgb24gT1NSIGV4aXQgYW4gYXJndW1lbnRzIG9iamVjdCBpcyBhbGxv
Y2F0ZWQgaW4geW91ciBwbGFjZSwgYW5kIGFsbCBvcGVyYXRpb25zCisgICAgICAgIHRoYXQgdXNl
IHRoZSB2YWx1ZSBub3cganVzdCByZWZlciBkaXJlY3RseSB0byB0aGUgYWN0dWFsIGFyZ3VtZW50
cyBpbiB0aGUgY2FsbCBmcmFtZQorICAgICAgICBoZWFkZXIgKG9yIHRoZSBhcmd1bWVudHMgd2Ug
a25vdyB0aGF0IHdlIHBhc3NlZCB0byB0aGUgY2FsbCwgaW4gY2FzZSBvZiBpbmxpbmluZykuCisg
ICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgd2Ugbm8gbG9uZ2VyIGhhdmUgYXJndW1l
bnRzIHNpbXBsaWZpY2F0aW9uIGNyZWF0aW5nIGEgZGVhZCBQaGkgZ3JhcGgKKyAgICAgICAgdGhh
dCB0aGVuIGhhcyB0byBiZSBpbnRlcnByZXRlZCBieSB0aGUgT1NSIGV4aXQgbG9naWMuIFRoYXQg
c29ydCBvZiBuZXZlciBtYWRlIGFueQorICAgICAgICBzZW5zZS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgbWVhbnMgdGhhdCBQaGFudG9tQXJndW1lbnRzIG5vdyBoYXMgYSBjbGVhciBzdG9yeSBp
biBTU0E6IGJhc2ljYWxseSBTU0EganVzdAorICAgICAgICBnZXRzIHJpZCBvZiB0aGUgImxvY2Fs
cyIgYnV0IGV2ZXJ5dGhpbmcgZWxzZSBpcyB0aGUgc2FtZS4KKyAgICAgICAgCisgICAgICAgIEZp
bmFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gbW9yZSBlYXNpbHkgZ2V0IHJpZCBvZiBmb3J3
YXJkIGV4aXRpbmcuIEFzIEkgd2FzCisgICAgICAgIHdvcmtpbmcgb24gdGhlIGNvZGUgdG8gZ2V0
IHJpZCBvZiBmb3J3YXJkIGV4aXRpbmcsIEkgcmVhbGl6ZWQgdGhhdCBJJ2QgaGF2ZSB0bworICAg
ICAgICBjYXJlZnVsbHkgcHJlc2VydmUgdGhlIHNwZWNpYWwgbWVhbmluZ3Mgb2YgTW92SGludCBh
bmQgU2V0TG9jYWwgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgUGhhbnRvbUFyZ3VtZW50cy4gSXQg
d2FzIHJlYWxseSBiaXphcnJlOiBldmVuIHRoZSBzZW1hbnRpY3Mgb2YgTW92SGludCB3ZXJlIHRp
ZWQgdG8KKyAgICAgICAgb3VyIHNwZWNpZmljIHRyZWF0bWVudCBvZiBQaGFudG9tQXJndW1lbnRz
LiBBZnRlciB0aGlzIGNoYW5nZSB0aGlzIGlzIG5vIGxvbmdlciB0aGUKKyAgICAgICAgY2FzZS4K
KyAgICAgICAgCisgICAgICAgIE9uZSBvZiB0aGUgcmVhbGx5IGNvb2wgdGhpbmdzIGFib3V0IHRo
aXMgY2hhbmdlIGlzIHRoYXQgYXJndW1lbnRzIHJlaWZpY2F0aW9uIG5vdworICAgICAgICBqdXN0
IGJlY29tZXMgYSBzcGVjaWFsIGtpbmQgb2YgRmx1c2hGb3JtYXQuIFRoaXMgZnVydGhlciB1bmlm
aWVzIHRoaW5nczogaXQgbWVhbnMKKyAgICAgICAgdGhhdCBhIE1vdkhpbnQoUGhhbnRvbUFyZ3Vt
ZW50cykgYW5kIGEgU2V0TG9jYWwoUGhhbnRvbUFyZ3VtZW50cykgYm90aCBoYXZlIHRoZSBzYW1l
CisgICAgICAgIG1lYW5pbmcsIHNpbmNlIGJvdGggb2YgdGhlbSBkaWN0YXRlIHRoYXQgdGhlIHdh
eSB3ZSByZWNvdmVyIHRoZSBsb2NhbCBvbiBleGl0IGlzIGJ5CisgICAgICAgIHJlaWZ5aW5nIGFy
Z3VtZW50cy4gUHJldmlvdXNseSwgdGhlIFNldExvY2FsKFBoYW50b21Bcmd1bWVudHMpIGNhc2Ug
bmVlZGVkIHNvbWUKKyAgICAgICAgc3BlY2lhbCBoYW5kbGluZyB0byBhY2NvbXBsaXNoIHRoaXMu
CisgICAgICAgIAorICAgICAgICBBIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3
ZSB3aWxsIG5vdyBlbWl0IGNvZGUgdG8gc3RvcmUgdGhlIGVtcHR5IHZhbHVlCisgICAgICAgIGlu
dG8gYWxpYXNlZCBhcmd1bWVudHMgdmFyaWFibGVzLCBhbmQgd2Ugd2lsbCBldmVuIGVtaXQgY29k
ZSB0byBsb2FkIHRoYXQgZW1wdHkgdmFsdWUKKyAgICAgICAgYXMgd2VsbC4gQXMgZmFyIGFzIEkg
Y2FuIHRlbGwgdGhpcyBkb2Vzbid0IGNvc3QgYW55dGhpbmcsIHNpbmNlIFBoYW50b21Bcmd1bWVu
dHMgYXJlCisgICAgICAgIG1vc3QgcHJvZml0YWJsZSBpbiBjYXNlcyB3aGVyZSBpdCBhbGxvd3Mg
dXMgdG8gc2ltcGxpZnkgY29udHJvbCBmbG93IGFuZCBraWxsIHRoZQorICAgICAgICBhcmd1bWVu
dHMgbG9jYWxzIGVudGlyZWx5LiBPZiBjb3Vyc2UsIHRoaXMgaXNuJ3QgYW4gaXNzdWUgaW4gU1NB
IGZvcm0gc2luY2UgU1NBIGZvcm0KKyAgICAgICAgYWxzbyBlbGltaW5hdGVzIHRoZSBsb2NhbHMu
CisKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpkZXR5cGVBcmd1
bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoRm9y
bWF0LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R0ZsdXNoRm9ybWF0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6cmVzdWx0Rm9yKToKKyAgICAgICAg
KEpTQzo6REZHOjp1c2VLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkYXRhRm9ybWF0Rm9y
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OlZh
bHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRmx1c2hGb3Jt
YXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpidWlsZEV4aXRBcmd1bWVudHMpOgorCiAyMDEzLTEyLTIzICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgUHV0UHJvcGVydHlTbG90IHRvIGJlIGF3
YXJlIG9mIGN1c3RvbSBwcm9wZXJ0aWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxMCArMTk1LDEwIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
IHsKLSAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gQSBNb3ZIaW50IGlzIGVm
ZmVjdGl2ZWx5IGEgcHJvbWlzZSB0aGF0IHRoZSBTZXRMb2NhbAotICAgICAgICAvLyB3YXMgZGVh
ZC4KKyAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZy4gQSBNb3ZIaW50IG9ubHkgaW5mb3JtcyB1cyBhYm91dCB3aGF0IHdvdWxkIGhhdmUgaGFw
cGVuZWQKKyAgICAgICAgLy8gaW4gYnl0ZWNvZGUsIGJ1dCB0aGlzIGNvZGUgaXMganVzdCBjb25j
ZXJuZWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IGhhcHBlbmluZyBkdXJpbmcKKyAgICAgICAgLy8g
REZHIGV4ZWN1dGlvbi4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk1LDE2ICszOTUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3RvcmUgaW50byBh
IFZhcmlhYmxlQWNjZXNzRGF0YSogdGhhdCBpcyBtYXJrZWQgYXMKLSAgICAgICAgICAgICAgICAg
ICAgLy8gYXJndW1lbnRzIGFsaWFzaW5nIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUqIHRoYXQgZG9l
cyBub3QgY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cywgdGhlbiBmbGFn
IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYXMgYmVpbmcgYW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gYXJndW1lbnRzLWFsaWFzZWQuIFRoaXMnbGwgbGV0IHRoZSBPU1IgZXhpdCBtYWNoaW5lcnkg
ZG8gdGhlIHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNvIHRo
YXQgdGhlIFNldExvY2FsIHNob3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHdlIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRoIEdl
dE15QXJndW1lbnRzTGVuZ3RoIGFuZAotICAgICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3Vt
ZW50QnlWYWwuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c0FsaWFzaW5n
LmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKHRy
dWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIApAQCAtNDIwLDIyICs0MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKLSAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgIW1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52
YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFR1cm4gUGhhbnRvbUxvY2FscyBpbnRvIGp1c3QgR2V0TG9jYWxzLiBUaGlz
IHdpbGwgcHJlc2VydmUgdGhlIHRocmVhZGluZwotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgbG9jYWwgdGhyb3VnaCB0byB0aGlzIHBvaW50LCBidXQgd2lsbCBhbGxvdyBpdCB0byBkaWUs
IGNhdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBPU1IgdG8ga25vdyBhYm91dCBp
dC4KLQotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRM
b2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC00NTksNyArNDMzLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyAyKSBUaGUgUGhhbnRvbSBtYXkga2VlcCB0aGUgQ3JlYXRl
QXJndW1lbnRzIG5vZGUgYWxpdmUsIHdoaWNoIGlzCiAgICAgICAgICAgICAgICAgICAgIC8vICAg
IHByZWNpc2VseSB3aGF0IHdlIGRvbid0IHdhbnQuCiAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZW1vdmVBcmd1bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZChub2Rl
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldHlwZUFyZ3VtZW50c1JlZmVyZW5jaW5n
UGhhbnRvbUNoaWxkKG5vZGUsIGkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcwLDcgKzQ0NCw2IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC00ODgsOCAr
NDYxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNp
ZGVyYXRpb24gb2YgdGhpcyBvcCBub3cgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgpA
QCAtNTAzLDcgKzQ3OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkg
PSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KEdldE15QXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNp
ZGVyYXRpb24gb2YgdGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3Ro
LgpAQCAtNTgwLDggKzU1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC01OTEsOCArNTY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
UGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
QEAgLTYyNyw2ICs2MDQsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGlu
ZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IFBoYW50b20pCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lM
aXN0OjpTaXplOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGRldHlwZUFyZ3VtZW50c1JlZmVy
ZW5jaW5nUGhhbnRvbUNoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgbV9ncmFwaC5kZXRo
cmVhZCgpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7CkBAIC03NjQs
MzUgKzc1NCwyMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSog
bm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgZGV0eXBlQXJndW1lbnRzUmVmZXJl
bmNpbmdQaGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQogICAgIHsK
ICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKICAg
ICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAg
c3dpdGNoIChlZGdlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMgaWYgd2Ug
aGFkIENTRSBvbiBhIEdldExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCi0gICAgICAg
IGNhc2UgR2V0TG9jYWw6IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3VtZW50cyBh
Y2Nlc3MgdG8gYSB2YXJpYWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCi0gICAgICAgIGNh
c2UgU2V0TG9jYWw6IHsgLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBvZiB0
aGUgYXJndW1lbnRzIHJlZ2lzdGVyLgorICAgICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGVkZ2UtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgYm9vbCBpc0RlYWRBcmd1bWVudHNSZWdpc3Rl
ciA9Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoZWRn
ZS0+Y29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGJv
b2wgaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgICF2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKLSAgICAg
ICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGlmICghaXNEZWFkQXJndW1lbnRzUmVn
aXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQorICAgICAgICAgICAgaWYgKCF2
YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQXJndW1lbnRzQWxpYXMoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoZWRnZUluZGV4KTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCkuc2V0VXNlS2luZChV
bnR5cGVkVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsgLy8gQXJpc2VzIGlmIHdlIENTRSB0d28g
R2V0TG9jYWxzIHRvIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIgYW5kIHRoZW4gQ1NFIHRoZSBzZWNv
bmQgdXNlIG9mIHRoZSBHZXRMb2NhbCB0byB0aGUgZmlyc3QuCi0gICAgICAgICAgICBpZiAobV9j
cmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
bW92ZUVkZ2UoZWRnZUluZGV4KTsKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLnNldFVzZUtpbmQoVW50
eXBlZFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5
U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQt
PmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7
CisgICAgICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPmJh
Y2t3YXJkU3BlY3VsYXRpb25DaGVjayhCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG1fYmFzZUdQUiksIDApOworICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAg
PSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChtX2Jhc2VHUFIpLCAwKTsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Nyw2ICsxODcsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJpdEFuZDoKICAgICAgICAgY2FzZSBC
aXRPcjoKICAgICAgICAgY2FzZSBCaXRYb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMiwxNSArMjMyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBnZXREaXJl
Y3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAg
Ci0gICAgZW51bSBTZXRNb2RlIHsgTm9ybWFsU2V0LCBTZXRPbkVudHJ5IH07CisgICAgZW51bSBT
ZXRNb2RlIHsgTm9ybWFsU2V0LCBJbW1lZGlhdGVTZXQgfTsKICAgICBOb2RlKiBzZXREaXJlY3Qo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBO
b3JtYWxTZXQpCiAgICAgewotICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwotICAgICAg
ICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gc2V0QXJndW1l
bnQob3BlcmFuZCwgdmFsdWUsIHNldE1vZGUpOwotCi0gICAgICAgIC8vIE11c3QgYmUgYSBsb2Nh
bC4KLSAgICAgICAgcmV0dXJuIHNldExvY2FsKG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKKyAg
ICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVl
KTsKKyAgICAgICAgCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbCBkZWxheWVkID0gRGVsYXllZFNl
dExvY2FsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXRNb2RlID09
IE5vcm1hbFNldCkgeworICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChkZWxheWVk
KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gZGVsYXllZC5leGVjdXRlKHRoaXMsIHNldE1vZGUpOwogICAgIH0KIAogICAgIE5vZGUq
IHNldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9k
ZSA9IE5vcm1hbFNldCkKQEAgLTExMjEsNiArMTEyNSwyNyBAQCBwcml2YXRlOgogICAgIH07CiAg
ICAgCiAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9pbmxpbmVTdGFja1RvcDsKKyAgICAKKyAgICBz
dHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFu
ZDsKKyAgICAgICAgTm9kZSogbV92YWx1ZTsKKyAgICAgICAgCisgICAgICAgIERlbGF5ZWRTZXRM
b2NhbCgpIHsgfQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQsIE5vZGUqIHZhbHVlKQorICAgICAgICAgICAgOiBtX29wZXJhbmQob3BlcmFuZCkKKyAgICAg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBOb2RlKiBleGVjdXRlKEJ5dGVDb2RlUGFyc2VyKiBwYXJzZXIsIFNldE1vZGUgc2V0
TW9kZSA9IE5vcm1hbFNldCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fb3BlcmFuZC5p
c0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci0+c2V0QXJndW1lbnQo
bV9vcGVyYW5kLCBtX3ZhbHVlLCBzZXRNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIt
PnNldExvY2FsKG1fb3BlcmFuZCwgbV92YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgIH0KKyAgICB9
OworICAgIAorICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1fc2V0TG9jYWxRdWV1ZTsK
IAogICAgIC8vIEhhdmUgd2UgYnVpbHQgb3BlcmFuZCBtYXBzPyBXZSBpbml0aWFsaXplIHRoZW0g
bGF6aWx5LCBhbmQgb25seSB3aGVuIGRvaW5nCiAgICAgLy8gaW5saW5pbmcuCkBAIC0xMzI1LDkg
KzEzNTAsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAg
ICAgID09IGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSk7CiAgICAgaWYgKGNhbGxMaW5r
U3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNh
bGxlZVZhcmlhYmxlID0KLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
Q2FsbGVlKSwgY2FsbFRhcmdldE5vZGUpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSwgY2FsbFRhcmdldE5vZGUs
IEltbWVkaWF0ZVNldCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHNjb3BlVmFyaWFibGUgPQotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpTY29wZUNoYWluKSwgYWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5v
ZGUpKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKEpTU3RhY2s6OlNjb3BlQ2hhaW4pLCBhZGRUb0dyYXBoKEdldFNjb3BlLCBjYWxsVGFyZ2V0
Tm9kZSksIEltbWVkaWF0ZVNldCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAKICAg
ICAgICAgY2FsbGVlVmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsKICAgICAg
ICAgc2NvcGVWYXJpYWJsZS0+bWVyZ2VTaG91bGROZXZlclVuYm94KHRydWUpOwpAQCAtMTg3Miw2
ICsxODk3LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICB9CiAKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9zZXRMb2NhbFF1
ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5yZXNpemUoMCk7
CisgICAgICAgIAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0aW9u
cy4KICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IGxpbWl0KSB7CiAgICAgICAgICAgICAv
LyBPcmRpbmFyaWx5IHdlIHdhbnQgdG8gcGxhbnQgYSBqdW1wLiBCdXQgcmVmdXNlIHRvIGRvIHRo
aXMgaWYgdGhlIGJsb2NrIGlzCkBAIC0xOTAzLDcgKzE5MzIsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgICAg
ICAgICAvLyBJbml0aWFsaXplIGFsbCBsb2NhbHMgdG8gdW5kZWZpbmVkLgogICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bV9udW1W
YXJzOyArK2kpCi0gICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkp
LCBjb25zdGFudFVuZGVmaW5lZCgpLCBTZXRPbkVudHJ5KTsKKyAgICAgICAgICAgICAgICBzZXQo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGNvbnN0YW50VW5kZWZpbmVkKCksIEltbWVkaWF0
ZVNldCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKQEAgLTI5MDgsNyArMjkzNyw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGZsdXNoQXJn
dW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3Jl
dHVyblZhbHVlLmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5l
U3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxp
bmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSksIEltbWVkaWF0ZVNldCk7CiAgICAgICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlm
IChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ss
IHRoZW4gd2UncmUgZG9uZSBwYXJzaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDYg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgRG91
YmxlQXNJbnQzMjoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnRB
bmRDaGVjazoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNh
c2UgVXBzaWxvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2
aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw2IEBAIGVudW0gUmVmQ291bnRTdGF0ZSB7CiAK
IGVudW0gT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSB7IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlv
biwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIH07CiAKLWVudW0gU3BlY3VsYXRpb25EaXJlY3Rp
b24geyBGb3J3YXJkU3BlY3VsYXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24gfTsKLQogZW51bSBQ
cm9vZlN0YXR1cyB7IE5lZWRzQ2hlY2ssIElzUHJvdmVkIH07CiAKIGlubGluZSBib29sIGlzUHJv
dmVkKFByb29mU3RhdHVzIHByb29mU3RhdHVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2
MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTIgKzExMCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBD
YXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAg
ICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwogICAgICAgICAg
ICAgICAgICAgICBjaGlsZHJlbi5yZW1vdmVFZGdlKDApOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoISFjaGlsZHJlbi5jaGlsZDEoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSBw
aGFudG9tKFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwaGFudG9tLm1lcmdlRmxhZ3MoTm9kZUV4aXRzRm9yd2Fy
ZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIHBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxkcmVuLmNoaWxkMSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBjaGlsZHJlbik7CiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdlKCkpOwogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZp
c2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDggKzExMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkZXB0aEZpcnN0LnNpemUoKTsgaS0tOykKICAgICAgICAgICAg
ICAgICBmaXh1cEJsb2NrKGRlcHRoRmlyc3RbaV0pOwogICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAg
ICAgICAgZml4dXBCbG9jayhtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgY2xlYW5WYXJpYWJsZXMobV9ncmFwaC5tX2FyZ3VtZW50cyk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID0gRXhhY3RS
ZWZDb3VudDsKQEAgLTE1OSwzNyArMTYzLDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpID09
IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykpOwotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS53aWxsTm90SGF2ZUNoZWNrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBi
dXQgaXRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdl
IHNob3VsZCBNb3ZIaW50IHRoZSBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYg
cGVybWl0c09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+Y2hpbGQxKCktPm9wKCkpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQx
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2Vu
ZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoWm9tYmllSGludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KE1vdkhpbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhab21iaWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50QW5k
Q2hlY2spOwotICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAvLyBDdXJy
ZW50bHkgd2UgYXNzdW1lIHRoYXQgRENFIHJ1bnMgb25seSBvbmNlLgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OiB7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykg
ewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxk
cmVuKCk7IGNoaWxkSWR4KyspIHsKQEAgLTIxNSw2ICsyMDUsMjIgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICAK
KyAgICAgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgICAgICBjYXNlIFNTQToKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFRocmVhZGVkQ1BT
OiB7CisgICAgICAgICAgICBjbGVhblZhcmlhYmxlcyhibG9jay0+dmFyaWFibGVzQXRIZWFkKTsK
KyAgICAgICAgICAgIGNsZWFuVmFyaWFibGVzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBM
b2FkU3RvcmU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50
b21DaGlsZHJlbihOb2RlKiBub2RlKQpAQCAtMjI4LDYgKzIzNCwxOSBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhcmlhYmxlc1ZlY3Rv
clR5cGU+CisgICAgdm9pZCBjbGVhblZhcmlhYmxlcyhWYXJpYWJsZXNWZWN0b3JUeXBlJiB2YXJp
YWJsZXMpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YXJpYWJsZXMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gdmFyaWFibGVzW2ldOworICAgICAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gUGhhbnRvbSAmJiBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyaWFibGVzW2ldID0gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKICAgICBWZWN0b3I8Tm9kZSosIDEyOD4gbV93b3JrbGlzdDsK
ICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MDcsOSArOTA3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgogICAg
ICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBj
YXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46
CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKQEAgLTEwMDUsNiArMTAwMiw4
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKICAg
ICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFR5cGVk
QXJyYXlXYXRjaHBvaW50OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoKQEAg
LTE0NzgsNyArMTQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAoaXNEb3VibGUo
dXNlS2luZCkpIHsKICAgICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVJbnQzMkZv
ckFyaXRobWV0aWMoKSkgewotICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2Rl
KGVkZ2UsIHVzZUtpbmQsIG1fY3VycmVudE5vZGUtPnNwZWN1bGF0aW9uRGlyZWN0aW9uKCkpOwor
ICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKGVkZ2UsIHVzZUtpbmQpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MTQ5MSw3ICsxNDkwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUsIEludDUyVG9Eb3VibGUsCiAgICAgICAgICAgICAg
ICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIE51bWJl
clVzZSkpOwotICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3BlY3VsYXRpb25EaXJlY3Rpb24o
bV9jdXJyZW50Tm9kZS0+c3BlY3VsYXRpb25EaXJlY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAg
ZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC0xNTQ1LDcgKzE1NDMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Tm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyLCBJbnQ1MlRvVmFsdWUsCiAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgVW50eXBlZFVz
ZSkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihtX2N1cnJl
bnROb2RlLT5zcGVjdWxhdGlvbkRpcmVjdGlvbigpKTsKICAgICAgICAgICAgIGVkZ2UgPSBFZGdl
KHJlc3VsdCwgdXNlS2luZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE1
ODcsMTMgKzE1ODQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAg
fQogICAgIAotICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNl
S2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUo
RWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlKQogICAgIHsKICAgICAgICAg
Tm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgSW50MzJUb0RvdWJsZSwKICAgICAgICAg
ICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIE51bWJlclVz
ZSkpOwotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAg
ICAgICAgIHJlc3VsdC0+bWVyZ2VGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKICAgICAgICAgCiAg
ICAgICAgIGVkZ2UgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJldmlzaW9uIDE2MTAz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBGbHUKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICBvdXQucHJpbnQo
IkZsdXNoZWRKU1ZhbHVlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRBcmd1
bWVudHM6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEFyZ3VtZW50cyIpOworICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICBvdXQucHJpbnQoIkNv
bmZsaWN0aW5nRmx1c2giKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBAIGVudW0gRmx1c2hGb3JtYXQgewogICAgIEZsdXNoZWRDZWxsLAogICAgIEZs
dXNoZWRCb29sZWFuLAogICAgIEZsdXNoZWRKU1ZhbHVlLAorICAgIEZsdXNoZWRBcmd1bWVudHMs
CiAgICAgQ29uZmxpY3RpbmdGbHVzaAogfTsKIApAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgTm9k
ZUZsYWdzIHJlc3VsdEZvcihGbHVzaEZvcm1hdCBmCiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToK
ICAgICBjYXNlIEZsdXNoZWRDZWxsOgogICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICBj
YXNlIEZsdXNoZWRBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SlM7CiAgICAg
Y2FzZSBGbHVzaGVkSW50MzI6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SW50MzI7CkBAIC03
Niw2ICs3OCw3IEBAIGlubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm8KICAg
ICBjYXNlIERlYWRGbHVzaDoKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgIGNhc2UgQ29u
ZmxpY3RpbmdGbHVzaDoKKyAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CiAgICAgICAgIHJldHVy
biBVbnR5cGVkVXNlOwogICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgICAgIHJldHVybiBDZWxs
VXNlOwpAQCAtMTEwLDYgKzExMyw4IEBAIGlubGluZSBEYXRhRm9ybWF0IGRhdGFGb3JtYXRGb3Io
Rmx1c2hGb3IKICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOwogICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46CiAgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIEZs
dXNoZWRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0QXJndW1lbnRzOwogICAg
IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBEYXRhRm9y
bWF0RGVhZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5j
cHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElD
TVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gICB0aW1lIGFuZCBwcmVzZXJ2ZSBzb21lIGtpbmQgb2Ygc2FuaXR5LCBpZiB3ZSBo
b2lzdCBzb21ldGhpbmcgdGhhdCBtdXN0IGV4aXQuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEFs
c28sIHdlIG5lZWQgdG8gcmVtZW1iZXIgdG86Ci0gICAgICAgIC8vIC0gQ2xlYXIgTm9kZUV4aXRz
Rm9yd2FyZCBmb3IgYW55IG5vZGVzIHdlIGhvaXN0ZWQuCiAgICAgICAgIC8vIC0gVXBkYXRlIHRo
ZSBzdGF0ZS1hdC10YWlsIHdpdGggdGhlIG5vZGUgd2UgaG9pc3RlZCwgc28gZnV0dXJlIGhvaXN0
IGNhbmRpZGF0ZXMKICAgICAgICAgLy8gICBrbm93IGFib3V0IGFueSB0eXBlIGNoZWNrcyB3ZSBo
b2lzdGVkLgogICAgICAgICAvLwpAQCAtMjMwLDggKzIyOSw2IEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0QmVmb3JlTGFzdChub2RlKTsKICAgICAg
ICAgbm9kZS0+bWlzYy5vd25lciA9IGRhdGEucHJlSGVhZGVyOwotICAgICAgICBOb2RlRmxhZ3Mg
ZGlkRXhpdEZvcndhcmQgPSBub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZDsKLSAgICAg
ICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKICAgICAgICAgbm9kZS0+Y29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBkYXRhLnByZUhlYWRlci0+bGFzdCgpLT5jb2RlT3JpZ2lu
Rm9yRXhpdFRhcmdldDsKICAgICAgICAgCiAgICAgICAgIC8vIE1vZGlmeSB0aGUgc3RhdGVzIGF0
IHRoZSBlbmQgb2YgdGhlIHByZUhlYWRlciBvZiB0aGUgbG9vcCB3ZSBob2lzdGVkIHRvLApAQCAt
MjU2LDcgKzI1Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIAogICAgICAgICBub2RlUmVmID0g
bV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBub2Rl
LT5jaGlsZHJlbik7Ci0gICAgICAgIG5vZGVSZWYtPm1lcmdlRmxhZ3MoZGlkRXhpdEZvcndhcmQp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkocmV2aXNpb24gMTYxMDM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxNSArMzgsMTMgQEAgTWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6
ZnJvbU5vZGUoTm9kZQogICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CiAgICAgcmVzdWx0Lm1faWQg
PSBNaW5pZmllZElEKG5vZGUpOwogICAgIHJlc3VsdC5tX29wID0gbm9kZS0+b3AoKTsKLSAgICBp
ZiAoaGFzQ2hpbGQobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0g
TWluaWZpZWRJRChub2RlLT5jaGlsZDEoKS5ub2RlKCkpLm1faWQ7Ci0gICAgZWxzZSBpZiAoaGFz
Q29uc3RhbnROdW1iZXIobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZv
ID0gbm9kZS0+Y29uc3RhbnROdW1iZXIoKTsKKyAgICBpZiAoaGFzQ29uc3RhbnROdW1iZXIobm9k
ZS0+b3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBub2RlLT5jb25zdGFudE51bWJlcigp
OwogICAgIGVsc2UgaWYgKGhhc1dlYWtDb25zdGFudChub2RlLT5vcCgpKSkKLSAgICAgICAgcmVz
dWx0Lm1fY2hpbGRPckluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlLT53ZWFrQ29u
c3RhbnQoKSk7CisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihub2RlLT53ZWFrQ29uc3RhbnQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IFBoYW50b21Bcmd1bWVudHMpOwotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5m
byA9IDA7CisgICAgICAgIHJlc3VsdC5tX2luZm8gPSAwOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9k
ZS5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsOSBAQCBpbmxpbmUgYm9v
bCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
Y2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgY2FzZSBWYWx1
ZVRvSW50MzI6Ci0gICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6Ci0gICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoK
LSAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCghcGVybWl0c09TUkJh
Y2t3YXJkUmV3aXJpbmcodHlwZSkgJiYgIXBlcm1pdHNPU1JGb3J3YXJkUmV3aXJpbmcodHlwZSkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtNjYsMTQgKzU5LDYgQEAgcHVi
bGljOgogICAgIE1pbmlmaWVkSUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgTm9k
ZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CiAgICAgCi0gICAgYm9vbCBoYXNDaGls
ZDEoKSBjb25zdCB7IHJldHVybiBoYXNDaGlsZChtX29wKTsgfQotICAgIAotICAgIE1pbmlmaWVk
SUQgY2hpbGQxKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNDaGlsZChtX29wKSk7
Ci0gICAgICAgIHJldHVybiBNaW5pZmllZElEOjpmcm9tQml0cyhtX2NoaWxkT3JJbmZvKTsKLSAg
ICB9Ci0gICAgCiAgICAgYm9vbCBoYXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc0NvbnN0
YW50TnVtYmVyKCkgfHwgaGFzV2Vha0NvbnN0YW50KCk7IH0KICAgICAKICAgICBib29sIGhhc0Nv
bnN0YW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIobV9vcCk7IH0K
QEAgLTgxLDcgKzY2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNDb25zdGFudE51bWJlcihtX29wKSk7Ci0g
ICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgICAgICByZXR1cm4gbV9pbmZvOwogICAg
IH0KICAgICAKICAgICBib29sIGhhc1dlYWtDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc1dl
YWtDb25zdGFudChtX29wKTsgfQpAQCAtODksNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgSlNDZWxs
KiB3ZWFrQ29uc3RhbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1dlYWtDb25z
dGFudChtX29wKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9jaGls
ZE9ySW5mbyk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9pbmZvKTsK
ICAgICB9CiAgICAgCiAgICAgc3RhdGljIE1pbmlmaWVkSUQgZ2V0SUQoTWluaWZpZWROb2RlKiBu
b2RlKSB7IHJldHVybiBub2RlLT5pZCgpOyB9CkBAIC05OSwyMCArODQsNiBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBoYXNDaGlsZChOb2RlVHlwZSB0
eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVU
b0ludDMyOgotICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgY2FzZSBJbnQ1
MlRvRG91YmxlOgotICAgICAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQogICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50TnVtYmVyKE5vZGVUeXBl
IHR5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSA9PSBKU0NvbnN0YW50OwpAQCAtMTIz
LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgTWluaWZpZWRJRCBtX2lkOwot
ICAgIHVpbnRwdHJfdCBtX2NoaWxkT3JJbmZvOyAvLyBOb2RlcyBpbiB0aGUgbWluaWZpZWQgZ3Jh
cGggaGF2ZSBvbmx5IG9uZSBjaGlsZCBlYWNoLgorICAgIHVpbnRwdHJfdCBtX2luZm87CiAgICAg
Tm9kZVR5cGUgbV9vcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmNwcAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsNiBAQCBib29sIE5vZGU6Omhhc1Zh
cmlhYmxlQWNjZXNzRGF0YShHcmFwaCYgCiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBjYXNlIEdl
dEFyZ3VtZW50OgogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgY2FzZSBNb3ZIaW50OgotICAgIGNh
c2UgTW92SGludEFuZENoZWNrOgotICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFNldEFy
Z3VtZW50OgogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw0MiAr
Mjc0LDI0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGZpbHRlckZsYWdzKH5mbGFn
cyk7CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHNwZWN1bGF0aW9uRGly
ZWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmIChmbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkK
LSAgICAgICAgICAgIHJldHVybiBGb3J3YXJkU3BlY3VsYXRpb247Ci0gICAgICAgIHJldHVybiBC
YWNrd2FyZFNwZWN1bGF0aW9uOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldFNwZWN1bGF0aW9u
RGlyZWN0aW9uKFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgICAgIGNhc2UgRm9yd2FyZFNwZWN1bGF0aW9uOgot
ICAgICAgICAgICAgbWVyZ2VGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FzZSBCYWNrd2FyZFNwZWN1bGF0aW9uOgotICAgICAgICAgICAgY2xl
YXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKICAg
ICB2b2lkIHNldE9wQW5kRGVmYXVsdEZsYWdzKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAg
bV9vcCA9IG9wOwogICAgICAgICBtX2ZsYWdzID0gZGVmYXVsdEZsYWdzKG9wKTsKICAgICB9CiAK
KyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIHZvaWQgc2V0T3BBbmREZWZhdWx0
Tm9uRXhpdEZsYWdzKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFn
cyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFn
c1VuY2hlY2tlZChvcCk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4K
ICAgICB2b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFnc1VuY2hlY2tlZChOb2RlVHlwZSBv
cCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKLSAgICAgICAgbV9mbGFncyA9IChkZWZhdWx0
RmxhZ3Mob3ApICYgfk5vZGVFeGl0c0ZvcndhcmQpIHwgKG1fZmxhZ3MgJiBOb2RlRXhpdHNGb3J3
YXJkKTsKKyAgICAgICAgbV9mbGFncyA9IGRlZmF1bHRGbGFncyhvcCk7CiAgICAgfQogCiAgICAg
dm9pZCBjb252ZXJ0VG9QaGFudG9tKCkKQEAgLTUzMSw5ICs1MTMsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgYm9vbCBjb250YWluc01vdkhpbnQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgp
KSB7Ci0gICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAg
ICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTY3LDYgKzU0Nyw4IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0
TG9jYWxVbmxpbmtlZDoKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAg
ICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTExOTAsMTEgKzExNzIsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgU2V0TG9j
YWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAg
ICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgot
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
LSAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVu
dHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBQaGFudG9tOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24g
MTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw2IEBAIHZvaWQgZHVtcE5vZGVGbGFncyhQcmludFN0
cmVhbSYgYWN0dWFsT3UKICAgICBpZiAoIShmbGFncyAmIE5vZGVEb2VzTm90RXhpdCkpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgIkNhbkV4aXQiKTsKICAgICAKLSAgICBpZiAoZmxhZ3MgJiBO
b2RlRXhpdHNGb3J3YXJkKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJOb2RlRXhpdHNGb3J3
YXJkIik7Ci0gICAgCiAgICAgQ1N0cmluZyBzdHJpbmcgPSBvdXQudG9DU3RyaW5nKCk7CiAgICAg
aWYgKCFzdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgIGFjdHVhbE91dC5wcmludCgiPGVtcHR5PiIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lv
biAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAogI2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgICAgICAgICAweDQwMDAK
IAotI2RlZmluZSBOb2RlRXhpdHNGb3J3YXJkICAgICAgICAgICAgICAgICAweDgwMDAKLQotI2Rl
ZmluZSBOb2RlSXNTdGF0aWNDb25zdGFudCAgICAgICAgICAgIDB4MTAwMDAgLy8gVXNlZCBvbmx5
IGJ5IHRoZSBwYXJzZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2Fs
bHkgYW5kIGhlbmNlIGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgorI2RlZmluZSBOb2Rl
SXNTdGF0aWNDb25zdGFudCAgICAgICAgICAgICAweDgwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBw
YXJzZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhl
bmNlIGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgogCiB0eXBlZGVmIHVpbnQzMl90IE5v
ZGVGbGFnczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICAvKiBBbnkgdHdvIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHNh
bWUgUGhpIGdyYXBoIHdpbGwgc2hhcmUgdGhlIHNhbWUgKi9cCiAgICAgLyogVmFyaWFibGVBY2Nl
c3NEYXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhH
ZXRMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVFeGl0c0Zv
cndhcmQpIFwKLSAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlRXhpdHNGb3J3YXJkKSBcCisgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBtYWNybyhN
b3ZIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhab21iaWVIaW50LCBOb2RlRG9l
c05vdEV4aXQpIFwKICAgICBtYWNybyhHZXRBcmd1bWVudCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXApAQCAtMzE4LDgwICszMTcsNiBAQCBpbmxpbmUgTm9kZUZsYWdzIGRlZmF1
bHRGbGFncyhOb2RlVHlwZSBvCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBwZXJtaXRzT1NSQmFj
a3dhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2Fz
ZSBJZGVudGl0eToKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIEludDUy
VG9WYWx1ZToKLSAgICBjYXNlIEludDUyVG9Eb3VibGU6Ci0gICAgICAgIC8vIFRoZXNlIGFyZSB0
aGUgb25seSBub2RlIHdoZXJlIHdlIGRvOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgYjog
VUludDMyVG9OdW1iZXIoQGEpCi0gICAgICAgIC8vICAgICBjOiBTZXRMb2NhbChAYikKLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gYW5kIHRoZW4gYWxzbyBoYXZlIHNvbWUgdXNlcyBvZiBAYSB3aXRo
b3V0IFBoYW50b20naW5nIEBiLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcmlvcml0
eSB3aXRoIHdoaWNoIHdlIHNob3VsZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGUgZm9yIGZvcndhcmQK
LS8vIHJld2lyaW5nLiBIaWdoZXIgaXMgYmV0dGVyLiBaZXJvIG1lYW5zIHRoYXQgdGhlIG5vZGUg
aXMgbm90IHVzZWZ1bCBmb3IgcmV3aXJpbmcuCi0vLyBCeSBjb252ZW50aW9uLCB3ZSB1c2UgMTAw
IHRvIG1lYW4gdGhhdCB0aGUgbm9kZSBpcyB0b3RhbGx5IGVxdWl2YWxlbnQgdG8gaXRzCi0vLyBp
bnB1dCB3aXRoIG5vIGluZm9ybWF0aW9uIGxvc3MuCi1pbmxpbmUgdW5zaWduZWQgZm9yd2FyZFJl
d2lyaW5nU2VsZWN0aW9uU2NvcmUoTm9kZVR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewot
ICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIC8vIFdlIHNob3VsZG4ndCBzZWUgdGhlc2UgYnkg
dGhlIHRpbWUgd2UgZ2V0IHRvIE9TUiBldmVuIHRob3VnaCBpdCBjbGVhcmx5Ci0gICAgICAgIC8v
IGlzIGEgcGVyZmVjdCBpZGVudGl0eSBmdW5jdGlvbi4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBE
b3VibGVBc0ludDMyOgotICAgICAgICAvLyBUaGlzIHNwZWN1bGF0ZXMgdGhhdCB0aGUgaW5jb21p
bmcgZG91YmxlIGlzIGNvbnZlcnRpYmxlIHRvIGFuIGludDMyLiBTbwotICAgICAgICAvLyBpdHMg
cmVzdWx0IGlzIHRvdGFsbHkgZXF1aXZhbGVudC4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAg
ICAgCi0gICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGNvbnZlcnRzIGFu
IGludDMyIHRvIGEgZG91YmxlLCBidXQgdGhhdCBsb3NlcyBhIGJpdCBvZiBpbmZvcm1hdGlvbi4K
LSAgICAgICAgLy8gT1RPSCBpdCdzIHN0aWxsIGFuIGVxdWl2YWxlbnQgbnVtYmVyLgotICAgICAg
ICByZXR1cm4gNzU7Ci0gICAgICAgIAotICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAg
IC8vIEl0J3MgY29tcGxldGVseSBmaW5lIHRvIHVzZSB0aGlzIGZvciBPU1IgZXhpdCwgc2luY2Ug
dGhlIHVpbnQzMiBpc24ndAotICAgICAgICAvLyBhY3R1YWxseSByZXByZXNlbnRhYmxlIGluIGJ5
dGVjb2RlLgotICAgICAgICByZXR1cm4gMTAwOwotCi0gICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0g
ICAgICAgIC8vIFRoaXMgbG9zZXMgaW5mb3JtYXRpb24uIE9ubHkgdXNlIGl0IGlmIHRoZXJlIGFy
ZSBubyBiZXR0ZXIgYWx0ZXJuYXRpdmVzLgotICAgICAgICByZXR1cm4gMjU7Ci0gICAgICAgIAot
ICAgIGNhc2UgSW50NTJUb1ZhbHVlOgotICAgICAgICAvLyBMb3NlcyBubyBpbmZvcm1hdGlvbi4g
SXQganVzdCBib3hlcyB0aGUgdmFsdWUsIHdoaWNoIGlzIHdoYXQgT1NSIHdhbnRzCi0gICAgICAg
IC8vIHRvIGRvIGFueXdheS4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2Fz
ZSBJbnQ1MlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGlzIGxpa2UgSW50MzJUb0RvdWJsZTsg
d2UgY2FuIHVzZSBpdCBiZWNhdXNlIGl0IGdpdmVzIGEgc2VtYW50aWNhbGx5Ci0gICAgICAgIC8v
IGVxdWl2YWxlbnQgdmFsdWUgYnV0IHRoYXQgdmFsdWUgbWF5IGJlIGFuIGludDMyIGluIGEgZG91
YmxlLCBzbyB3ZSdkCi0gICAgICAgIC8vIHJhdGhlciBub3QgaWYgd2UgY2FuIGF2b2lkIGl0Lgot
ICAgICAgICByZXR1cm4gNzU7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wgcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyhO
b2RlVHlwZSBvcCkKLXsKLSAgICByZXR1cm4gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUo
b3ApID4gMDsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2
MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMCArMTAzLDggQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICBjYXNlIE1v
dkhpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDE3ICsxMDQs
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rp
b24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAg
T3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIENyZWF0ZSBhIE1vdkhpbnQuIFdlIGNhbid0IHVzZSBNb3ZIaW50J3MgZGlyZWN0
bHkgYXQgdGhpcyBzdGFnZSBvZgotICAgICAgICAgICAgLy8gY29tcGlsYXRpb24sIHNvIHdlIGNv
b2sgb25lIHVwIGJ5IGNyZWF0aW5nIGEgbmV3IFZhcmlhYmxlQWNjZXNzRGF0YQotICAgICAgICAg
ICAgLy8gdGhhdCBpc24ndCB1bmlmaWVkIHdpdGggYW55IG9mIHRoZSBvdGhlcnMuIFRoaXMgZW5z
dXJlcyB0aGF0IHRoaXMKLSAgICAgICAgICAgIC8vIFNldExvY2FsIHdpbGwgdHVybiBpbnRvIGEg
TW92SGludCBhbmQgd2lsbCBub3QgaGF2ZSBhbnkgdHlwZSBjaGVja3MuCi0gICAgICAgICAgICBt
X2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkp
KTsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGUgPSAmbV9ncmFw
aC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7Ci0gICAgICAgICAgICBOb2RlKiBzZXRMb2Nh
bCA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05v
bmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8obmV3VmFyaWFibGUpLAorICAgICAgICAg
ICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgTW92SGludCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgp
KSwKICAgICAgICAgICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKLSAgICAgICAgICAgIHNl
dExvY2FsLT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAg
ICAgICAgfQogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUtPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CiAgICAgICAgICAgICBOb2RlKiBwcmV2aW91
c0hlYWQgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7CkBAIC0xMjIsOSAr
MTE0LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbG9jYWxzW2xvY2FsXTsKLSAgICAg
ICAgICAgIE5vZGUqIHNldExvY2FsID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAg
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUs
IFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKLSAg
ICAgICAgICAgIHNldExvY2FsLT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihCYWNrd2FyZFNwZWN1
bGF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9k
ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNp
b24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsMjYgKzY4LDYgQEAgdm9pZCBPU1JFeGl0Ojpjb3JyZWN0SnVt
cChMaW5rQnVmZmVyJiBsaQogICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZmZXIu
b2Zmc2V0T2YobGFiZWwpOwogfQogCi12b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQoQmFz
aWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCi17Ci0gICAgTm9kZSogbm9kZTsKLSAg
ICBOb2RlKiBsYXN0TW92SGludDsKLSAgICBpZiAoIWRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNp
b24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSwgbm9kZSwg
bGFzdE1vdkhpbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobm9kZS0+Y29kZU9y
aWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7Ci0gICAgCi0gICAgbV9jb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAKLSAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQobGFzdE1vdkhpbnQpOwotICAgIEFTU0VSVChs
YXN0TW92SGludC0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpOwotICAgIG1fdmFsdWVSZWNvdmVy
eU92ZXJyaWRlID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUo
bGFzdE1vdkhpbnQtPmxvY2FsKCksIHZhbHVlUmVjb3ZlcnkpKTsKLX0KLQogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4
ICsxMDEsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNvbnN0Owog
ICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqKSBj
b25zdDsKICAgICB2b2lkIGNvcnJlY3RKdW1wKExpbmtCdWZmZXImKTsKLSAgICAKLSAgICB2b2lk
IGNvbnZlcnRUb0ZvcndhcmQoQmFzaWNCbG9jayosIE5vZGUqLCB1bnNpZ25lZCBub2RlSW5kZXgs
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmKTsKIAogICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNw
cAkocmV2aXNpb24gMTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDQ1ICs0Niw2IEBAIGJvb2wgT1NSRXhp
dEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWUKICAgICAgICAgICAgIEZyZXF1ZW50RXhpdFNp
dGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKSk7CiB9
CiAKLWJvb2wgT1NSRXhpdEJhc2U6OmRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oCi0gICAg
QmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgs
IGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKLSAgICBOb2RlKiYgbm9kZSwgTm9kZSomIGxhc3RNb3ZI
aW50KQotewotICAgIC8vIENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBT
ZXRMb2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0
aCB0aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVj
b3ZlcnkuCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIWhhc1ZhbHVlUmVj
b3ZlcnkKLSAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAg
ICAgICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW5Gb3JFeGl0
VGFyZ2V0ID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCk7Ci0gICAgfQot
ICAgIAotICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGlu
c3RydWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBoaW50Ci0gICAgLy8gb24gdGhpcyBu
b2RlLgotICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7Ci0gICAgbm9k
ZSA9IDA7Ci0gICAgbGFzdE1vdkhpbnQgPSAwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYg
KGluZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlz
IGFuIGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9u
LiBUaGlzIGlzIHNhZmUKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBo
YXMgaXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bwotICAgICAg
ICAgICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCi0gICAgICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGlmIChub2Rl
LT5jb250YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKLSAg
ICAgICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKLSAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmln
aW5Gb3JFeGl0VGFyZ2V0ICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpbmRleEluQmxvY2srKzsKLSAgICB9Ci0gICAg
Ci0gICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ICE9IGN1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24gMTYx
MDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCwxMSArNjQsNiBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1
ZW50RXhpdFNpdGVTbG93KHByb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9Ci0gICAgCi0gICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZlcnNpb24gaXMgcmVhbGx5IG5lZWRlZC4K
LSAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oCi0gICAgICAgIEJhc2ljQmxv
Y2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVl
UmVjb3ZlcnksCi0gICAgICAgIE5vZGUqJiBuZXh0QkNOb2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQp
OwogCiBwcml2YXRlOgogICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVT
bG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsOSAr
NTA0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNl
IEFycmF5aWZ5OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgIGNh
c2UgTW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0gICAgICAgIGNhc2Ug
Wm9tYmllSGludDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAgICAgICAgY2Fz
ZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50
ZXI6CkBAIC01ODUsNiArNTgyLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGdW5jdGlvblJl
ZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAg
ICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgICAgIGNhc2UgTW92SGludDoK
KyAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBh
IHByZWRpY3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZl
cnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Niw4ICsxODYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIHZhbHVlIHdhcyBhbHJlYWR5IG9uIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05v
bmUsIE1vdkhpbnQsIENvZGVPcmlnaW4oKSwgT3BJbmZvKHZhcmlhYmxlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBDb2RlT3JpZ2luKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSks
IEVkZ2Uobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0
IHJlcGxhY2VkIHdpdGggcmVmZXJlbmNlcwogICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNwZWNp
ZmllZCBieSB2YXJpYWJsZXNBdEhlYWQuCiAgICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBOb2Rl
TXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhCi0gICAgICAgIC8v
ICAgTW92SGludCBvdGhlcndpc2UuCisgICAgICAgIC8vICAgUGhhbnRvbSBvdGhlcndpc2UuCiAg
ICAgICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1haW5zLCBiZWNhdXNl
IHdlIHdhbnQgdG8ga25vdyB3aGVuIGEKICAgICAgICAgLy8gICBmbHVzaGVkIFNldExvY2FsJ3Mg
dmFsdWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0IHNpbXBsZXIKICAg
ICAgICAgLy8gICB0byByZWFzb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxvY2FsLCBzaW5jZSB3
ZSBjYW4ganVzdCBkbyBhIGJhY2t3YXJkcwpAQCAtMzA4LDcgKzMwOCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVzaGVk
TG9jYWxPcHMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5t
ZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5yZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsgLy8gT25seSBmb3IgVXBzaWxvbnMuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IEdldENhbGxlZToKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAg
Y2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmll
SGludDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjEw
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIwLDExICsxOTIwLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKG5v
ZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgTW92SGludDoK
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTE5MzIsMTIgKzE5MjcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAvLyBT
ZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9y
ZWQgYW5kCi0gICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBz
cGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hp
bGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAgICAgIC8vIHN0
YWNrLgotICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHN3
aXRjaCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsKICAgICAg
ICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTE5ODgsMTUgKzE5NzcsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9k
ZS0+bWFjaGluZUxvY2FsKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFn
R1BSKCksIEpJVENvbXBpbGVyOjp0YWdGb3Iobm9kZS0+bWFjaGluZUxvY2FsKCkpKTsKICAgICAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZv
cm1hdEpTKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgd2UncmUgc3RvcmluZyBh
biBhcmd1bWVudHMgb2JqZWN0IHRoYXQgaGFzIGJlZW4gb3B0aW1pemVkIGF3YXksCi0gICAgICAg
ICAgICAvLyBvdXIgdmFyaWFibGUgZXZlbnQgc3RyZWFtIGZvciBPU1IgZXhpdCBub3cgcmVmbGVj
dHMgdGhlIG9wdGltaXplZAotICAgICAgICAgICAgLy8gdmFsdWUgKEpTVmFsdWUoKSkuIE9uIHRo
ZSBzbG93IHBhdGgsIHdlIHdhbnQgYW4gYXJndW1lbnRzIG9iamVjdAotICAgICAgICAgICAgLy8g
aW5zdGVhZC4gV2UgYWRkIGFuIGFkZGl0aW9uYWwgbW92ZSBoaW50IHRvIHNob3cgT1NSIGV4aXQg
dGhhdCBpdAotICAgICAgICAgICAgLy8gbmVlZHMgdG8gcmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50
cyBvYmplY3QuCi0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRv
bUFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MTYxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzNiwxMSArMjIzNiw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFu
ZENoZWNrKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2Ug
TW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTIyNDgsMTIgKzIyNDMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAg
ICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2ls
bCBiZSBzdG9yZWQgYW5kCi0gICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJl
Zm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVy
ZSB0aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAg
ICAgIC8vIHN0YWNrLgotICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAg
ICAgICAgIHN3aXRjaCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkp
IHsKICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTIyOTksMjAgKzIy
ODgsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOiB7CisgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIGNhc2Ug
Rmx1c2hlZEFyZ3VtZW50czogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+bWFjaGluZUxvY2FsKCkpKTsKICAgICAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICByZWNvcmRT
ZXRMb2NhbChEYXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB3
ZSdyZSBzdG9yaW5nIGFuIGFyZ3VtZW50cyBvYmplY3QgdGhhdCBoYXMgYmVlbiBvcHRpbWl6ZWQg
YXdheSwKLSAgICAgICAgICAgIC8vIG91ciB2YXJpYWJsZSBldmVudCBzdHJlYW0gZm9yIE9TUiBl
eGl0IG5vdyByZWZsZWN0cyB0aGUgb3B0aW1pemVkCi0gICAgICAgICAgICAvLyB2YWx1ZSAoSlNW
YWx1ZSgpKS4gT24gdGhlIHNsb3cgcGF0aCwgd2Ugd2FudCBhbiBhcmd1bWVudHMgb2JqZWN0Ci0g
ICAgICAgICAgICAvLyBpbnN0ZWFkLiBXZSBhZGQgYW4gYWRkaXRpb25hbCBtb3ZlIGhpbnQgdG8g
c2hvdyBPU1IgZXhpdCB0aGF0IGl0Ci0gICAgICAgICAgICAvLyBuZWVkcyB0byByZWNvbnN0cnVj
dCB0aGUgYXJndW1lbnRzIG9iamVjdC4KLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKQotICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50
KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheQogICAgICAgICAgICAgc3RydWN0dXJlLCBu
dW1FbGVtZW50cykpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9k
ZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQog
ewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb24KICAgICBtX2pp
dC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMs
IG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFp
bCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogewogICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTI0LDIyICsxMjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpiYWNrd2FyZFNwZWN1bGF0aW9uCiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0
KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsKQotewotICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2Rl
LCBqdW1wVG9GYWlsKTsKLSAgICBpZiAobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBGb3J3YXJk
U3BlY3VsYXRpb24pCi0gICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOwotfQot
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsKQotewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCk7Ci19Ci0KLU9TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCitPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7CkBA
IC0xNTAsMTkgKzEzNSwxNiBAQCBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklU
OjpiCiAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoaW5kZXgpOwogfQogCi1PU1JF
eGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVV
c2UpCitPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2Rl
VXNlKQogewogICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7Ci0gICAgcmV0dXJuIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291
cmNlLCBub2RlVXNlLm5vZGUoKSk7CisgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1Rv
RmFpbCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7Ci0gICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICByZXR1cm47Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGUsIGp1bXBzVG9GYWlsKTsKLSAgICBpZiAobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9
PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2Fy
ZCgpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUo
KSwganVtcFRvRmFpbCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVV
c2UsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCkBAIC0xNzEs
NyArMTUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1
bXBzVG9GYWlsKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSog
bm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25S
ZWNvdmVyeSYgcmVjb3ZlcnkpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVy
eSYgcmVjb3ZlcnkpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47
CkBAIC0xODEsMjQgKzE2MywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1
bGF0aW9uCiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwg
anNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCByZWNvdmVyeUluZGV4KSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3Zl
cnkpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkK
IHsKICAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwot
ICAgIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNl
Lm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3Qg
U3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCi17Ci0gICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICByZXR1cm47Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKLSAgICBpZiAobV9zcGVj
dWxhdGlvbkRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgIGNvbnZlcnRM
YXN0T1NSRXhpdFRvRm9yd2FyZCgpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBlZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlv
blJlY292ZXJ5JiByZWNvdmVyeSkKLXsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFs
dWVTb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CisgICAgc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFp
bCwgcmVjb3ZlcnkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0SW52YWxpZGF0aW9u
UG9pbnQoTm9kZSogbm9kZSkKQEAgLTIwNiw3ICsxNzQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0SW52YWxpZGF0aW9uUG9pCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKG1fY2FuRXhpdCk7Ci0gICAgQVNTRVJUKG1fc3BlY3VsYXRpb25E
aXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9u
SW5mbyYgaW5mbyA9IG1faml0LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlzdCgp
KTsKICAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdCgKICAgICAgICAg
VW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEpTVmFsdWVTb3VyY2UoKSwKQEAgLTIxNywyNiArMTg0
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogICAgIG5vUmVz
dWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb252ZXJ0TGFzdE9TUkV4aXRU
b0ZvcndhcmQoY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBtX2pp
dC5qaXRDb2RlKCktPmxhc3RPU1JFeGl0KCkuY29udmVydFRvRm9yd2FyZCgKLSAgICAgICAgbV9i
bG9jaywgbV9jdXJyZW50Tm9kZSwgbV9pbmRleEluQmxvY2ssIHZhbHVlUmVjb3ZlcnkpOwotfQot
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3Zlcnkp
Ci17Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsK
LSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwg
anVtcFRvRmFpbCk7Ci0gICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3Zl
cnkpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhF
eGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNv
bnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCi17Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOwotICAgIGNvbnZlcnRMYXN0T1NSRXhp
dFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNW
YWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKQEAgLTI1MiwyNCArMTk5LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5ub2RlKCkpOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpiYWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBl
ZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNv
dXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdo
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewogICAgIEFTU0VSVChuZWVkc1R5
cGVDaGVjayhlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gpKTsKICAgICBtX2ludGVycHJldGVyLmZp
bHRlcihlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gpOwotICAgIGJhY2t3YXJkU3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBzb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKLX0KLQotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVk
Z2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAganVtcFRvRmFpbCkKLXsKLSAgICBiYWNrd2FyZFR5cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5
cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7Ci0gICAgaWYgKG1fc3BlY3VsYXRpb25EaXJl
Y3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRU
b0ZvcndhcmQoKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayhK
U1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3Nl
ZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCi17Ci0gICAgYmFja3dhcmRUeXBlQ2hlY2soc291cmNlLCBl
ZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOwotICAgIGNvbnZlcnRMYXN0T1NS
RXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIHNvdXJjZSwgZWRnZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCiBSZWdpc3RlclNldCBT
cGVjdWxhdGl2ZUpJVDo6dXNlZFJlZ2lzdGVycygpCkBAIC0xMzgwLDE0ICsxMzE0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZQogICAgIE5vZGUqIGNoaWxkID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgIG5vdGljZU9TUkJpcnRoKGNoaWxkKTsKICAgICAK
LSAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZp
ZWRJRChjaGlsZCksIG5vZGUtPmxvY2FsKCkpKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1vdkhpbnRBbmRDaGVjayhOb2RlKiBub2RlKQotewotICAgIGNvbXBpbGVNb3ZIaW50
KG5vZGUpOwotICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgbm9SZXN1
bHQobm9kZSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZI
aW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6YmFpbCgpCkBAIC0xNDM2LDkgKzEzNjMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgIAogICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OwotICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1lbnRz
QWxpYXMoKSkKLSAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRBcmd1bWVudHM7Ci0gICAg
ICAgIGVsc2UgaWYgKCFub2RlLT5yZWZDb3VudCgpKQorICAgICAgICBpZiAoIW5vZGUtPnJlZkNv
dW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQgZGVhZCBT
ZXRMb2NhbCdzLgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBkYXRhRm9ybWF0
Rm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKTsKQEAgLTE0ODQsNyArMTQwOSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewotICAg
ICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXREZWFkKTsKKyAgICAgICAgICAg
ICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1
YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAKQEAgLTE1MDMsOCArMTQyOCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3NwZWN1bGF0aW9uRGlyZWN0
aW9uID0gKG1fY3VycmVudE5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndh
cmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAKICNpZiBFTkFCTEUoREZHX1JFR0lTVEVS
X0FMTE9DQVRJT05fVkFMSURBVElPTikKQEAgLTE1NDIsMTggKzE0NjUsMTkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogewogICAgIEFTU0VSVCghbV9jdXJyZW50
Tm9kZSk7CiAgICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IHRydWU7Ci0gICAgbV9zcGVj
dWxhdGlvbkRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgbV9jb2RlT3JpZ2lu
Rm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7CiAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUgPSBDb2RlT3JpZ2luKDApOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsKICAgICAgICAgTm9kZSogbm9kZSA9
IG1faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV07Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7
CisgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IGlzIGRl
YWQuIFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1lbnRzLgogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOworCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKTsKICAgICAgICAgCkBAIC0yMTY5LDE2
ICsyMDkzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDMyVG9Eb3VibAogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCiAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNo
aWxkMSgpLCBTcGVjRnVsbE51bWJlcikpIHsKLSAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBO
b2RlRXhpdHNGb3J3YXJkKSB7Ci0gICAgICAgICAgICBmb3J3YXJkVHlwZUNoZWNrKAotICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51
bWJlciwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwKLSAgICAgICAg
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihvcDFHUFIsIERhdGFGb3JtYXRKUykpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2soCi0gICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVy
LAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgfQor
ICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2Rl
LT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CiAgICAgfQogICAgIAogICAgIG1faml0Lm1vdmUob3AxR1BSLCB0ZW1wR1BSKTsK
QEAgLTIyMDAsMTYgKzIxMTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJU
b0RvdWJsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICAKICAgICBpZiAobmVlZHNUeXBlQ2hlY2so
bm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyKSkgewotICAgICAgICBpZiAobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAgICAgICAgIGZvcndhcmRUeXBlQ2hlY2so
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwg
bm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpLAotICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluUGFpcihvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKAotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJl
ciwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3Ax
VGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAor
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
b3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIH0KICAg
ICAKICAgICB1bmJveERvdWJsZShvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIHJlc3VsdEZQUiwg
dGVtcEZQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNDMsNDMgKzIxNDMsMjgg
QEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1wIGNvbnZlcnRUb0RvdWJsZShKU1ZhbHVl
T3BlcmFuZCYsIEZQUlJlZyByZXN1bHQpOwogI2VuZGlmCiAgICAgCi0gICAgLy8gQWRkIGEgYmFj
a3dhcmQgc3BlY3VsYXRpb24gY2hlY2suCi0gICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsKTsKLSAgICB2b2lkIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cHNUb0ZhaWwpOwotCi0gICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRp
dGlvbmFsIHJlY292ZXJ5LgorICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrLgogICAgIHZv
aWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhF
eGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCk7Ci0gICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRpdGlvbmFs
IHJlY292ZXJ5LCBhbmQgd2l0aCBhIHByb21pc2UgdG8gc3VwcGx5IGEganVtcCBsYXRlci4KLSAg
ICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwotICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgYmFj
a3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlKTsKLSAg
ICAvLyBBZGQgYSBzZXQgb2Ygc3BlY3VsYXRpb24gY2hlY2tzIHdpdGhvdXQgYWRkaXRpb25hbCBy
ZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3Vy
Y2UsIE5vZGUqLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKTsK
KworICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRkaXRpb25hbCByZWNv
dmVyeSwgYW5kIHdpdGggYSBwcm9taXNlIHRvIHN1cHBseSBhIGp1bXAgbGF0ZXIuCisgICAgT1NS
RXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291
cmNlLCBOb2RlKik7CisgICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNv
dXJjZSwgRWRnZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCk7
CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5
LgotICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291
cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3Vs
YXRpb25SZWNvdmVyeSYpOwotICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOworICAgIHZvaWQgc3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOwogICAgIAogICAgIHZv
aWQgZW1pdEludmFsaWRhdGlvblBvaW50KE5vZGUqKTsKICAgICAKLSAgICAvLyBJdCBpcyBnZW5l
cmFsbHkgYSBnb29kIGlkZWEgdG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LgotICAgIHZvaWQgY29u
dmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNv
dmVyeSgpKTsKLSAgICAKLSAgICAvLyBOb3RlOiBub3Qgc3BlY2lmeWluZyB0aGUgdmFsdWVSZWNv
dmVyeSBhcmd1bWVudCAobGVhdmluZyBpdCBhcyBWYWx1ZVJlY292ZXJ5KCkpIGltcGxpZXMKLSAg
ICAvLyB0aGF0IHlvdSd2ZSBlbnN1cmVkIHRoYXQgdGhlcmUgZXhpc3RzIGEgTW92SGludCBwcmlv
ciB0byB5b3VyIHVzZSBvZiBmb3J3YXJkU3BlY3VsYXRpb25DaGVjaygpLgotICAgIHZvaWQgZm9y
d2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVl
UmVjb3ZlcnkoKSk7Ci0gICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2
b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7
Ci0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdl
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292
ZXJ5Jik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBh
IHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSopOwogICAgIHZvaWQgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKICAgICAK
ICAgICAvLyBIZWxwZXJzIGZvciBwZXJmb3JtaW5nIHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3Rv
cmVkIGluIHRoZSBnaXZlbiByZWdpc3RlcnMuCiAgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdl
IGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9pbnRl
cnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gpOyB9Ci0gICAg
dm9pZCBiYWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlLCBFZGdlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwog
ICAgIHZvaWQgdHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5
cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7Ci0gICAg
dm9pZCBmb3J3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgVmFsdWVSZWNvdmVyeSYpOwogCiAgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihFZGdlKTsKICAg
ICB2b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSk7CkBAIC0yMjUyLDcgKzIyMzcsNiBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCiAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwotICAgIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIG1fc3BlY3VsYXRpb25EaXJlY3Rpb247CiAgICAgYm9vbCBtX2NhbkV4aXQ7
CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5c2lj
YWwgcmVnaXN0ZXIgbWFwcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTYxMDM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDMzICsxNjMsMjIgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlICYmICFpdGVyLT52YWx1ZS5t
X2FycmF5TW9kZUlzVmFsaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgICAgICAgICAvLyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNldExvY2FsIHRvIHRlbGwg
T1NSIHRoYXQgdGhlIGNoaWxkJ3MgdmFsdWUgc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgIC8v
IGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGlmIHRoZSBDaGVja1N0cnVj
dHVyZSBkZWNpZGVzCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGV4aXQuCi0gICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG5vZGUt
PmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgY2hp
bGQxKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgTm9kZUV4aXRzRm9yd2FyZCB0byBp
bmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBleGl0IHRvIHRoZSBuZXh0Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBj
dXJyZW50IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbmV3Tm9kZSA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNv
ZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXRlci0+dmFsdWUubV9hcnJheU1vZGVJc1ZhbGlkKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUubV9hcnJheU1vZGVIb2lzdGlu
Z09rYXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGluc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Q2hlY2tBcnJheSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8oaXRlci0+dmFsdWUubV9hcnJheU1vZGUuYXNXb3JkKCkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld05vZGUtPm1lcmdlRmxhZ3MoTm9kZUV4
aXRzRm9yd2FyZCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjgsOSArMjE3LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
Y3VycmVudGx5IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSdyZSB0aGUgb25seSBvbmVzIHdobyB3
b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQgdGhlc2Ugbm9kZXMgd2l0aCBOb2Rl
RXhpdHNGb3J3YXJkLgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG5vZGUt
PmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTMyOSw5ICszMTUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgY3VycmVudGx5IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSdyZSB0aGUg
b25seSBvbmVzIHdobyB3b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQgdGhlc2Ug
bm9kZXMgd2l0aCBOb2RlRXhpdHNGb3J3YXJkLgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSk7CiAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDEwICsyNDUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgZWRnZS0+b3AoKSA9PSBQaGkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gWm9tYmllSGludAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+
b3AoKSA9PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09
IE1vdkhpbnRBbmRDaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgp
ID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAo
cGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMjU3LDkgKzI1NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9k
ZSwgZWRnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRM
b2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gWm9tYmll
SGludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGlu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGludEFu
ZENoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRB
cmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1
c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yOTIsOSArMjg2LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gTW92SGludAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IE1vdkhpbnRBbmRD
aGVjawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFpv
bWJpZUhpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5v
cCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRn
ZS5ub2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291
cmNlLmgJKHJldmlzaW9uIDE2MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFsdWVTb3VyY2VLaW5k
KQogICAgICAgICA6IG1fa2luZCh2YWx1ZVNvdXJjZUtpbmQpCiAgICAgewotICAgICAgICBBU1NF
UlQoa2luZCgpID09IEFyZ3VtZW50c1NvdXJjZSB8fCBraW5kKCkgPT0gU291cmNlSXNEZWFkKTsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBcmd1bWVudHNTb3VyY2UgfHwga2luZCgpID09IFNv
dXJjZUlzRGVhZCB8fCBraW5kKCkgPT0gQXJndW1lbnRzU291cmNlKTsKICAgICB9CiAgICAgCiAg
ICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTWluaWZpZWRJRCBpZCkKQEAgLTE1OSw2ICsxNTksOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjaywg
d2hlcmUpOwogICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgogICAgICAgICAgICAgcmV0dXJu
IFZhbHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2ssIHdoZXJlKTsKKyAgICAgICAgY2FzZSBGbHVz
aGVkQXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEFyZ3VtZW50c1Nv
dXJjZSk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE2MTAzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyOCw2ICszMjgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBB
U1NFUlQoZmluZCgpID09IHRoaXMpOwogICAgICAgICAKKyAgICAgICAgaWYgKGlzQXJndW1lbnRz
QWxpYXMoKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkQXJndW1lbnRzOworICAgICAgICAK
ICAgICAgICAgaWYgKCFzaG91bGRVbmJveElmUG9zc2libGUoKSkKICAgICAgICAgICAgIHJldHVy
biBGbHVzaGVkSlNWYWx1ZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDE2MTAz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3MCArMTkyLDggQEAgdm9pZCBWYXJpYWJsZUV2ZW50
U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgCiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlv
bkluZm8gaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5nZXQoc291cmNlLmlkKCkpOwogICAgICAgICBp
ZiAoaW5mby5mb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgICAgIC8vIFRyeSB0
byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRo
ZSB2YWx1ZSB3ZSB3YW50LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEJhY2t3YXJk
IHJld2lyaW5nIHJlZmVycyB0bzoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICAg
YTogU29tZXRoaW5nKC4uLikKLSAgICAgICAgICAgIC8vICAgICBiOiBJZChAYSkgLy8gc29tZSBp
ZGVudGl0eSBmdW5jdGlvbgotICAgICAgICAgICAgLy8gICAgIGM6IFNldExvY2FsKEBiKQotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdoZXJlIHdlIGZpbmQgQGIgYmVpbmcgZGVhZCwg
YnV0IEBhIGlzIHN0aWxsIGFsaXZlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEZv
cndhcmQgcmV3aXJpbmcgcmVmZXJzIHRvOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8v
ICAgICBhOiBTb21ldGhpbmcoLi4uKQotICAgICAgICAgICAgLy8gICAgIGI6IFNldExvY2FsKEBh
KQotICAgICAgICAgICAgLy8gICAgIGM6IElkKEBhKSAvLyBzb21lIGlkZW50aXR5IGZ1bmN0aW9u
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2hlcmUgd2UgZmluZCBAYSBiZWluZyBk
ZWFkLCBidXQgQGIgaXMgc3RpbGwgYWxpdmUuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUgJiYg
cGVybWl0c09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKLSAgICAgICAgICAgICAg
ICBNaW5pZmllZElEIGlkID0gbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRy
eVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIGNvZGVCbG9jaywgZ3Jh
cGguYXQoaWQpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5nZXQoaWQpOwotICAgICAgICAgICAgICAgIGlmIChp
bmZvLmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgTWluaWZpZWRJRCBiZXN0SUQ7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgYmVzdFNjb3JlID0gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+OjppdGVyYXRv
ciBpdGVyID0gZ2VuZXJhdGlvbkluZm9zLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaE1h
cDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPjo6aXRlcmF0b3IgZW5kID0gZ2Vu
ZXJhdGlvbkluZm9zLmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSBpdGVyLT5rZXk7
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChpZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc0NoaWxkMSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KSAhPSBzb3VyY2UuaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuZm9ybWF0ID09IERhdGFGb3JtYXROb25l
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG15U2NvcmUgPSBmb3J3YXJkUmV3aXJpbmdTZWxlY3Rpb25TY29yZShub2RlLT5v
cCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG15U2NvcmUgPD0gYmVzdFNjb3JlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGJlc3RJ
RCA9IGlkOwotICAgICAgICAgICAgICAgICAgICBiZXN0U2NvcmUgPSBteVNjb3JlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoISFiZXN0
SUQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGdlbmVyYXRpb25JbmZvcy5nZXQoYmVz
dElEKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm8uZm9ybWF0ICE9IERhdGFGb3Jt
YXROb25lKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFmb3Vu
ZCkgewotICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6
OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgQVNTRVJUKGluZm8uZm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxNjEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwOSw2ICs0MjA5LDEy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CiAgICAgICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgorICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTg2CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220009</attachid>
            <date>2013-12-25 15:44:56 -0800</date>
            <delta_ts>2013-12-25 16:17:29 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66074</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk1LDEwICsxOTUsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92
SGludDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAvLyBEb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQg
dGhlIFNldExvY2FsCi0gICAgICAgIC8vIHdhcyBkZWFkLgorICAgIGNhc2UgTW92SGludDogewor
ICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgb25seSBpbmZv
cm1zIHVzIGFib3V0IHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZAorICAgICAgICAvLyBpbiBieXRl
Y29kZSwgYnV0IHRoaXMgY29kZSBpcyBqdXN0IGNvbmNlcm5lZCB3aXRoIHdoYXQgaXMgYWN0dWFs
bHkgaGFwcGVuaW5nIGR1cmluZworICAgICAgICAvLyBERkcgZXhlY3V0aW9uLgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE2
MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMyArNjMsMTMgQEAgcHVibGljOgogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgICAg
IG1fYmFkUHJvcGVydHlKdW1wID0gaml0LT5iYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICAgICAgICAgIG1fYmFkUHJvcGVydHlK
dW1wID0gaml0LT5zcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAw
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbV9iYWRJ
bmRleGluZ1R5cGVKdW1wID0gaml0LT5iYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soQmFkSW5kZXhp
bmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChtX2Jhc2VHUFIpLCAwKTsKKyAgICAg
ICAgbV9iYWRJbmRleGluZ1R5cGVKdW1wID0gaml0LT5zcGVjdWxhdGlvbkNoZWNrKEJhZEluZGV4
aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwobV9iYXNlR1BSKSwgMCk7CiAgICAg
fQogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBNb3ZIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBCaXRBbmQ6CiAgICAgICAgIGNhc2UgQml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsMTUgKzIzMiwxOSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwg
U2V0T25FbnRyeSB9OworICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgSW1tZWRpYXRlU2V0
IH07CiAgICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgLy8gSXMg
dGhpcyBhbiBhcmd1bWVudD8KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKLQot
ICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBzZXRMb2NhbChvcGVy
YW5kLCB2YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZv
KG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBEZWxheWVkU2V0
TG9jYWwgZGVsYXllZCA9IERlbGF5ZWRTZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoc2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKKyAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZS5hcHBlbmQoZGVsYXllZCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzLCBzZXRN
b2RlKTsKICAgICB9CiAKICAgICBOb2RlKiBzZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5v
ZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC0xMTIxLDYgKzExMjUs
MjcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIAogICAgIElubGluZVN0YWNrRW50cnkqIG1faW5s
aW5lU3RhY2tUb3A7CisgICAgCisgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAg
ICAgIAorICAgICAgICBEZWxheWVkU2V0TG9jYWwoKSB7IH0KKyAgICAgICAgRGVsYXllZFNldExv
Y2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDog
bV9vcGVyYW5kKG9wZXJhbmQpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogZXhlY3V0ZShCeXRlQ29kZVBh
cnNlciogcGFyc2VyLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZXItPnNldEFyZ3VtZW50KG1fb3BlcmFuZCwgbV92YWx1ZSwgc2V0TW9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29wZXJhbmQsIG1fdmFsdWUsIHNl
dE1vZGUpOworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8RGVsYXllZFNldExv
Y2FsLCAyPiBtX3NldExvY2FsUXVldWU7CiAKICAgICAvLyBIYXZlIHdlIGJ1aWx0IG9wZXJhbmQg
bWFwcz8gV2UgaW5pdGlhbGl6ZSB0aGVtIGxhemlseSwgYW5kIG9ubHkgd2hlbiBkb2luZwogICAg
IC8vIGlubGluaW5nLgpAQCAtMTMyNSw5ICsxMzUwLDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICA9PSBjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVD
YWxsKCkpOwogICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpIHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9Ci0gICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlKS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6
OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBzY29wZVZhcmlhYmxlID0KLSAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6U2NvcGVDaGFpbiksIGFkZFRvR3Jh
cGgoR2V0U2NvcGUsIGNhbGxUYXJnZXROb2RlKSktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpTY29wZUNoYWluKSwgYWRkVG9H
cmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5vZGUpLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgCiAgICAgICAgIGNhbGxlZVZhcmlhYmxlLT5tZXJnZVNob3Vs
ZE5ldmVyVW5ib3godHJ1ZSk7CiAgICAgICAgIHNjb3BlVmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2
ZXJVbmJveCh0cnVlKTsKQEAgLTE4NzIsNiArMTg5NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICBt
X3NldExvY2FsUXVldWUucmVzaXplKDApOworICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0
ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9
PSBsaW1pdCkgewogICAgICAgICAgICAgLy8gT3JkaW5hcmlseSB3ZSB3YW50IHRvIHBsYW50IGEg
anVtcC4gQnV0IHJlZnVzZSB0byBkbyB0aGlzIGlmIHRoZSBibG9jayBpcwpAQCAtMTkwMyw3ICsx
OTMyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICBjYXNlIG9wX2VudGVyOgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRv
IHVuZGVmaW5lZC4KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQotICAgICAgICAgICAgICAgIHNldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgU2V0T25FbnRy
eSk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25z
dGFudFVuZGVmaW5lZCgpLCBJbW1lZGlhdGVTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW50ZXIpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBA
IC0yOTA4LDcgKzI5MzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCk7CiAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZS5pc1ZhbGlkKCkpOwotICAgICAgICAg
ICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAg
ICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlh
dGVTZXQpOwogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcmV0dXJu
aW5nIGZyb20gdGhlIGZpcnN0IGJsb2NrLCB0aGVuIHdlJ3JlIGRvbmUgcGFyc2luZy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjEw
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAg
IGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFVwc2lsb246CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw4ICsxODIsNiBA
QCBlbnVtIFJlZkNvdW50U3RhdGUgewogCiBlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBB
dXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9Owog
Ci1lbnVtIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2Fy
ZFNwZWN1bGF0aW9uIH07Ci0KIGVudW0gUHJvb2ZTdGF0dXMgeyBOZWVkc0NoZWNrLCBJc1Byb3Zl
ZCB9OwogCiBpbmxpbmUgYm9vbCBpc1Byb3ZlZChQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEy
ICsxMTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4
ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVy
IG9uIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBu
b2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVtb3ZlRWRnZSgw
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2lu
LCBjaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVFeGl0c0ZvcndhcmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhbnRvbS5t
ZXJnZUZsYWdzKE5vZGVFeGl0c0ZvcndhcmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBwaGFudG9tKTsK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZHJl
bi5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwg
Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIo
RWRnZSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMs
MTIgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGVwdGhGaXJzdC5z
aXplKCk7IGktLTspCiAgICAgICAgICAgICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsK
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsg
KytibG9ja0luZGV4KQogICAgICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNsZWFuVmFyaWFibGVzKG1f
Z3JhcGgubV9hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBo
Lm1fcmVmQ291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CkBAIC0xNTksMzcgKzE2MywyMyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNldExvY2Fs
OgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKChu
b2RlLT5vcCgpID09IFNldExvY2FsKSA9PSAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMp
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkud2lsbE5vdEhhdmVDaGVjaygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0
IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cwotICAgICAgICAgICAgICAgICAgICAvLyBj
aGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUgY2hpbGQuCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHBlcm1pdHNPU1JCYWNrd2FyZFJld2lyaW5nKG5vZGUt
PmNoaWxkMSgpLT5vcCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
ID0gbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoWm9tYmllSGludCk7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoTW92SGludEFuZENoZWNrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5z
ZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhNb3ZIaW50KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBUaHJlYWRlZENQUykgewotICAgICAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5v
dCBzaG91bGRHZW5lcmF0ZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7
CisgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGFzc3VtZSB0aGF0IERDRSBydW5zIG9u
bHkgb25jZS4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CkBAIC0yMTUsNiAr
MjA1LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0p
IHsKKyAgICAgICAgY2FzZSBTU0E6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBUaHJlYWRlZENQUzogeworICAgICAgICAgICAgY2xlYW5WYXJpYWJsZXMo
YmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBjbGVhblZhcmlhYmxlcyhibG9j
ay0+dmFyaWFibGVzQXRUYWlsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgTG9hZFN0b3JlOgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTIyOCw2
ICsyMzQsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYXJpYWJsZXNWZWN0b3JUeXBlPgorICAgIHZvaWQgY2xlYW5WYXJpYWJsZXMo
VmFyaWFibGVzVmVjdG9yVHlwZSYgdmFyaWFibGVzKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gdmFyaWFibGVzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IHZhcmlhYmxlc1tpXTsKKyAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoYW50b20gJiYgbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlc1tpXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgVmVjdG9y
PE5vZGUqLCAxMjg+IG1fd29ya2xpc3Q7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDkgKzkwNyw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBHZXRU
eXBlZEFycmF5Qnl0ZU9mZnNldDoKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6Ci0gICAgICAg
IGNhc2UgTW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0gICAgICAgIGNh
c2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAgICAgICAg
Y2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NS
RW50ZXI6CkBAIC0xMDA1LDYgKzEwMDIsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFN0b3Jl
QmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hw
b2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBN
b3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBicmVhazsKICNl
bHNlCiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNDc4LDcgKzE0NzcsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgaWYgKGlzRG91YmxlKHVzZUtpbmQpKSB7CiAgICAgICAgICAgICBpZiAoZWRn
ZS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1ldGljKCkpIHsKLSAgICAgICAgICAgICAg
ICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShlZGdlLCB1c2VLaW5kLCBtX2N1cnJlbnROb2RlLT5z
cGVjdWxhdGlvbkRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZShlZGdlLCB1c2VLaW5kKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTE0OTEsNyArMTQ5MCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91YmxlLCBJbnQ1
MlRvRG91YmxlLAogICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
LCBFZGdlKGVkZ2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQt
PnNldFNwZWN1bGF0aW9uRGlyZWN0aW9uKG1fY3VycmVudE5vZGUtPnNwZWN1bGF0aW9uRGlyZWN0
aW9uKCkpOwogICAgICAgICAgICAgICAgIGVkZ2UgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTU0NSw3ICsxNTQzLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MiwgSW50
NTJUb1ZhbHVlLAogICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVk
Z2UoZWRnZS5ub2RlKCksIFVudHlwZWRVc2UpKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Bl
Y3VsYXRpb25EaXJlY3Rpb24obV9jdXJyZW50Tm9kZS0+c3BlY3VsYXRpb25EaXJlY3Rpb24oKSk7
CiAgICAgICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC0xNTg3LDEzICsxNTg0LDExIEBAIHByaXZhdGU6CiAgICAg
ICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluamVjdEludDMyVG9E
b3VibGVOb2RlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lk
IGluamVjdEludDMyVG9Eb3VibGVOb2RlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51
bWJlclVzZSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUs
IEludDMyVG9Eb3VibGUsCiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBF
ZGdlKGVkZ2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBG
b3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgICAgICByZXN1bHQtPm1lcmdlRmxhZ3MoTm9kZUV4
aXRzRm9yd2FyZCk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtp
bmQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFz
ZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TElDTVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gICB0aW1lIGFuZCBwcmVzZXJ2ZSBzb21lIGtpbmQgb2Ygc2FuaXR5LCBpZiB3
ZSBob2lzdCBzb21ldGhpbmcgdGhhdCBtdXN0IGV4aXQuCiAgICAgICAgIC8vCiAgICAgICAgIC8v
IEFsc28sIHdlIG5lZWQgdG8gcmVtZW1iZXIgdG86Ci0gICAgICAgIC8vIC0gQ2xlYXIgTm9kZUV4
aXRzRm9yd2FyZCBmb3IgYW55IG5vZGVzIHdlIGhvaXN0ZWQuCiAgICAgICAgIC8vIC0gVXBkYXRl
IHRoZSBzdGF0ZS1hdC10YWlsIHdpdGggdGhlIG5vZGUgd2UgaG9pc3RlZCwgc28gZnV0dXJlIGhv
aXN0IGNhbmRpZGF0ZXMKICAgICAgICAgLy8gICBrbm93IGFib3V0IGFueSB0eXBlIGNoZWNrcyB3
ZSBob2lzdGVkLgogICAgICAgICAvLwpAQCAtMjMwLDggKzIyOSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0QmVmb3JlTGFzdChub2RlKTsKICAg
ICAgICAgbm9kZS0+bWlzYy5vd25lciA9IGRhdGEucHJlSGVhZGVyOwotICAgICAgICBOb2RlRmxh
Z3MgZGlkRXhpdEZvcndhcmQgPSBub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZDsKLSAg
ICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKICAgICAgICAgbm9kZS0+
Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBkYXRhLnByZUhlYWRlci0+bGFzdCgpLT5jb2RlT3Jp
Z2luRm9yRXhpdFRhcmdldDsKICAgICAgICAgCiAgICAgICAgIC8vIE1vZGlmeSB0aGUgc3RhdGVz
IGF0IHRoZSBlbmQgb2YgdGhlIHByZUhlYWRlciBvZiB0aGUgbG9vcCB3ZSBob2lzdGVkIHRvLApA
QCAtMjU2LDcgKzI1Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIAogICAgICAgICBub2RlUmVm
ID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBu
b2RlLT5jaGlsZHJlbik7Ci0gICAgICAgIG5vZGVSZWYtPm1lcmdlRmxhZ3MoZGlkRXhpdEZvcndh
cmQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCwxNSArMzgsMTMgQEAgTWluaWZpZWROb2RlIE1pbmlmaWVkTm9k
ZTo6ZnJvbU5vZGUoTm9kZQogICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
aWQgPSBNaW5pZmllZElEKG5vZGUpOwogICAgIHJlc3VsdC5tX29wID0gbm9kZS0+b3AoKTsKLSAg
ICBpZiAoaGFzQ2hpbGQobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZv
ID0gTWluaWZpZWRJRChub2RlLT5jaGlsZDEoKS5ub2RlKCkpLm1faWQ7Ci0gICAgZWxzZSBpZiAo
aGFzQ29uc3RhbnROdW1iZXIobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJ
bmZvID0gbm9kZS0+Y29uc3RhbnROdW1iZXIoKTsKKyAgICBpZiAoaGFzQ29uc3RhbnROdW1iZXIo
bm9kZS0+b3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBub2RlLT5jb25zdGFudE51bWJl
cigpOwogICAgIGVsc2UgaWYgKGhhc1dlYWtDb25zdGFudChub2RlLT5vcCgpKSkKLSAgICAgICAg
cmVzdWx0Lm1fY2hpbGRPckluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlLT53ZWFr
Q29uc3RhbnQoKSk7CisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihub2RlLT53ZWFrQ29uc3RhbnQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IFBoYW50b21Bcmd1bWVudHMpOwotICAgICAgICByZXN1bHQubV9jaGlsZE9y
SW5mbyA9IDA7CisgICAgICAgIHJlc3VsdC5tX2luZm8gPSAwOwogICAgIH0KICAgICByZXR1cm4g
cmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
Tm9kZS5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsOSBAQCBpbmxpbmUg
Ym9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgY2FzZSBW
YWx1ZVRvSW50MzI6Ci0gICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6Ci0gICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50
czoKLSAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCghcGVybWl0c09T
UkJhY2t3YXJkUmV3aXJpbmcodHlwZSkgJiYgIXBlcm1pdHNPU1JGb3J3YXJkUmV3aXJpbmcodHlw
ZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtNjYsMTQgKzU5LDYgQEAg
cHVibGljOgogICAgIE1pbmlmaWVkSUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAg
Tm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CiAgICAgCi0gICAgYm9vbCBoYXND
aGlsZDEoKSBjb25zdCB7IHJldHVybiBoYXNDaGlsZChtX29wKTsgfQotICAgIAotICAgIE1pbmlm
aWVkSUQgY2hpbGQxKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNDaGlsZChtX29w
KSk7Ci0gICAgICAgIHJldHVybiBNaW5pZmllZElEOjpmcm9tQml0cyhtX2NoaWxkT3JJbmZvKTsK
LSAgICB9Ci0gICAgCiAgICAgYm9vbCBoYXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc0Nv
bnN0YW50TnVtYmVyKCkgfHwgaGFzV2Vha0NvbnN0YW50KCk7IH0KICAgICAKICAgICBib29sIGhh
c0NvbnN0YW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIobV9vcCk7
IH0KQEAgLTgxLDcgKzY2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVy
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNDb25zdGFudE51bWJlcihtX29wKSk7
Ci0gICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgICAgICByZXR1cm4gbV9pbmZvOwog
ICAgIH0KICAgICAKICAgICBib29sIGhhc1dlYWtDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhh
c1dlYWtDb25zdGFudChtX29wKTsgfQpAQCAtODksNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgSlND
ZWxsKiB3ZWFrQ29uc3RhbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1dlYWtD
b25zdGFudChtX29wKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9j
aGlsZE9ySW5mbyk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9pbmZv
KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIE1pbmlmaWVkSUQgZ2V0SUQoTWluaWZpZWROb2Rl
KiBub2RlKSB7IHJldHVybiBub2RlLT5pZCgpOyB9CkBAIC05OSwyMCArODQsNiBAQCBwdWJsaWM6
CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBoYXNDaGlsZChOb2RlVHlw
ZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgVmFs
dWVUb0ludDMyOgotICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgY2FzZSBJ
bnQ1MlRvRG91YmxlOgotICAgICAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQogICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50TnVtYmVyKE5vZGVU
eXBlIHR5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSA9PSBKU0NvbnN0YW50OwpAQCAt
MTIzLDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgTWluaWZpZWRJRCBtX2lk
OwotICAgIHVpbnRwdHJfdCBtX2NoaWxkT3JJbmZvOyAvLyBOb2RlcyBpbiB0aGUgbWluaWZpZWQg
Z3JhcGggaGF2ZSBvbmx5IG9uZSBjaGlsZCBlYWNoLgorICAgIHVpbnRwdHJfdCBtX2luZm87CiAg
ICAgTm9kZVR5cGUgbV9vcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsNiBAQCBib29sIE5vZGU6Omhh
c1ZhcmlhYmxlQWNjZXNzRGF0YShHcmFwaCYgCiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBjYXNl
IEdldEFyZ3VtZW50OgogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgY2FzZSBNb3ZIaW50OgotICAg
IGNhc2UgTW92SGludEFuZENoZWNrOgotICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFNl
dEFyZ3VtZW50OgogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw0
MiArMjc0LDI0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGZpbHRlckZsYWdzKH5m
bGFncyk7CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHNwZWN1bGF0aW9u
RGlyZWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmIChmbGFncygpICYgTm9kZUV4aXRzRm9yd2Fy
ZCkKLSAgICAgICAgICAgIHJldHVybiBGb3J3YXJkU3BlY3VsYXRpb247Ci0gICAgICAgIHJldHVy
biBCYWNrd2FyZFNwZWN1bGF0aW9uOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldFNwZWN1bGF0
aW9uRGlyZWN0aW9uKFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgICAgIGNhc2UgRm9yd2FyZFNwZWN1bGF0aW9u
OgotICAgICAgICAgICAgbWVyZ2VGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBCYWNrd2FyZFNwZWN1bGF0aW9uOgotICAgICAgICAgICAg
Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAK
ICAgICB2b2lkIHNldE9wQW5kRGVmYXVsdEZsYWdzKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAg
ICAgbV9vcCA9IG9wOwogICAgICAgICBtX2ZsYWdzID0gZGVmYXVsdEZsYWdzKG9wKTsKICAgICB9
CiAKKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIHZvaWQgc2V0T3BBbmREZWZh
dWx0Tm9uRXhpdEZsYWdzKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9m
bGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRG
bGFnc1VuY2hlY2tlZChvcCk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhp
cy4KICAgICB2b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFnc1VuY2hlY2tlZChOb2RlVHlw
ZSBvcCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKLSAgICAgICAgbV9mbGFncyA9IChkZWZh
dWx0RmxhZ3Mob3ApICYgfk5vZGVFeGl0c0ZvcndhcmQpIHwgKG1fZmxhZ3MgJiBOb2RlRXhpdHNG
b3J3YXJkKTsKKyAgICAgICAgbV9mbGFncyA9IGRlZmF1bHRGbGFncyhvcCk7CiAgICAgfQogCiAg
ICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tKCkKQEAgLTUzMSw5ICs1MTMsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgYm9vbCBjb250YWluc01vdkhpbnQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChv
cCgpKSB7Ci0gICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKLSAg
ICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTY3LDYgKzU0Nyw4
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2Ug
R2V0TG9jYWxVbmxpbmtlZDoKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAg
ICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTExOTAsMTEgKzExNzIsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50Ogot
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91Ymxl
OgotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJl
cjoKLSAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1
bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBQaGFudG9tOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNp
b24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw2IEBAIHZvaWQgZHVtcE5vZGVGbGFncyhQcmlu
dFN0cmVhbSYgYWN0dWFsT3UKICAgICBpZiAoIShmbGFncyAmIE5vZGVEb2VzTm90RXhpdCkpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgIkNhbkV4aXQiKTsKICAgICAKLSAgICBpZiAoZmxhZ3Mg
JiBOb2RlRXhpdHNGb3J3YXJkKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJOb2RlRXhpdHNG
b3J3YXJkIik7Ci0gICAgCiAgICAgQ1N0cmluZyBzdHJpbmcgPSBvdXQudG9DU3RyaW5nKCk7CiAg
ICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgIGFjdHVhbE91dC5wcmludCgiPGVtcHR5
PiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZp
c2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogI2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgICAgICAgICAweDQw
MDAKIAotI2RlZmluZSBOb2RlRXhpdHNGb3J3YXJkICAgICAgICAgICAgICAgICAweDgwMDAKLQot
I2RlZmluZSBOb2RlSXNTdGF0aWNDb25zdGFudCAgICAgICAgICAgIDB4MTAwMDAgLy8gVXNlZCBv
bmx5IGJ5IHRoZSBwYXJzZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRp
Y2FsbHkgYW5kIGhlbmNlIGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgorI2RlZmluZSBO
b2RlSXNTdGF0aWNDb25zdGFudCAgICAgICAgICAgICAweDgwMDAgLy8gVXNlZCBvbmx5IGJ5IHRo
ZSBwYXJzZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5k
IGhlbmNlIGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgogCiB0eXBlZGVmIHVpbnQzMl90
IE5vZGVGbGFnczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICAvKiBBbnkgdHdvIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhl
IHNhbWUgUGhpIGdyYXBoIHdpbGwgc2hhcmUgdGhlIHNhbWUgKi9cCiAgICAgLyogVmFyaWFibGVB
Y2Nlc3NEYXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNy
byhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVFeGl0
c0ZvcndhcmQpIFwKLSAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlRXhpdHNGb3J3YXJkKSBcCisgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBtYWNy
byhNb3ZIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhab21iaWVIaW50LCBOb2Rl
RG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhHZXRBcmd1bWVudCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXApAQCAtMzE4LDgwICszMTcsNiBAQCBpbmxpbmUgTm9kZUZsYWdzIGRl
ZmF1bHRGbGFncyhOb2RlVHlwZSBvCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBwZXJtaXRzT1NS
QmFja3dhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
Y2FzZSBJZGVudGl0eToKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIElu
dDUyVG9WYWx1ZToKLSAgICBjYXNlIEludDUyVG9Eb3VibGU6Ci0gICAgICAgIC8vIFRoZXNlIGFy
ZSB0aGUgb25seSBub2RlIHdoZXJlIHdlIGRvOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAg
YjogVUludDMyVG9OdW1iZXIoQGEpCi0gICAgICAgIC8vICAgICBjOiBTZXRMb2NhbChAYikKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gYW5kIHRoZW4gYWxzbyBoYXZlIHNvbWUgdXNlcyBvZiBAYSB3
aXRob3V0IFBoYW50b20naW5nIEBiLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcmlv
cml0eSB3aXRoIHdoaWNoIHdlIHNob3VsZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGUgZm9yIGZvcndh
cmQKLS8vIHJld2lyaW5nLiBIaWdoZXIgaXMgYmV0dGVyLiBaZXJvIG1lYW5zIHRoYXQgdGhlIG5v
ZGUgaXMgbm90IHVzZWZ1bCBmb3IgcmV3aXJpbmcuCi0vLyBCeSBjb252ZW50aW9uLCB3ZSB1c2Ug
MTAwIHRvIG1lYW4gdGhhdCB0aGUgbm9kZSBpcyB0b3RhbGx5IGVxdWl2YWxlbnQgdG8gaXRzCi0v
LyBpbnB1dCB3aXRoIG5vIGluZm9ybWF0aW9uIGxvc3MuCi1pbmxpbmUgdW5zaWduZWQgZm9yd2Fy
ZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUoTm9kZVR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkg
ewotICAgIGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIC8vIFdlIHNob3VsZG4ndCBzZWUgdGhlc2Ug
YnkgdGhlIHRpbWUgd2UgZ2V0IHRvIE9TUiBldmVuIHRob3VnaCBpdCBjbGVhcmx5Ci0gICAgICAg
IC8vIGlzIGEgcGVyZmVjdCBpZGVudGl0eSBmdW5jdGlvbi4KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2Fz
ZSBEb3VibGVBc0ludDMyOgotICAgICAgICAvLyBUaGlzIHNwZWN1bGF0ZXMgdGhhdCB0aGUgaW5j
b21pbmcgZG91YmxlIGlzIGNvbnZlcnRpYmxlIHRvIGFuIGludDMyLiBTbwotICAgICAgICAvLyBp
dHMgcmVzdWx0IGlzIHRvdGFsbHkgZXF1aXZhbGVudC4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAg
ICAgICAgCi0gICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGNvbnZlcnRz
IGFuIGludDMyIHRvIGEgZG91YmxlLCBidXQgdGhhdCBsb3NlcyBhIGJpdCBvZiBpbmZvcm1hdGlv
bi4KLSAgICAgICAgLy8gT1RPSCBpdCdzIHN0aWxsIGFuIGVxdWl2YWxlbnQgbnVtYmVyLgotICAg
ICAgICByZXR1cm4gNzU7Ci0gICAgICAgIAotICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAg
ICAgIC8vIEl0J3MgY29tcGxldGVseSBmaW5lIHRvIHVzZSB0aGlzIGZvciBPU1IgZXhpdCwgc2lu
Y2UgdGhlIHVpbnQzMiBpc24ndAotICAgICAgICAvLyBhY3R1YWxseSByZXByZXNlbnRhYmxlIGlu
IGJ5dGVjb2RlLgotICAgICAgICByZXR1cm4gMTAwOwotCi0gICAgY2FzZSBWYWx1ZVRvSW50MzI6
Ci0gICAgICAgIC8vIFRoaXMgbG9zZXMgaW5mb3JtYXRpb24uIE9ubHkgdXNlIGl0IGlmIHRoZXJl
IGFyZSBubyBiZXR0ZXIgYWx0ZXJuYXRpdmVzLgotICAgICAgICByZXR1cm4gMjU7Ci0gICAgICAg
IAotICAgIGNhc2UgSW50NTJUb1ZhbHVlOgotICAgICAgICAvLyBMb3NlcyBubyBpbmZvcm1hdGlv
bi4gSXQganVzdCBib3hlcyB0aGUgdmFsdWUsIHdoaWNoIGlzIHdoYXQgT1NSIHdhbnRzCi0gICAg
ICAgIC8vIHRvIGRvIGFueXdheS4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAg
Y2FzZSBJbnQ1MlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGlzIGxpa2UgSW50MzJUb0RvdWJs
ZTsgd2UgY2FuIHVzZSBpdCBiZWNhdXNlIGl0IGdpdmVzIGEgc2VtYW50aWNhbGx5Ci0gICAgICAg
IC8vIGVxdWl2YWxlbnQgdmFsdWUgYnV0IHRoYXQgdmFsdWUgbWF5IGJlIGFuIGludDMyIGluIGEg
ZG91YmxlLCBzbyB3ZSdkCi0gICAgICAgIC8vIHJhdGhlciBub3QgaWYgd2UgY2FuIGF2b2lkIGl0
LgotICAgICAgICByZXR1cm4gNzU7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wgcGVybWl0c09TUkZvcndhcmRSZXdpcmlu
ZyhOb2RlVHlwZSBvcCkKLXsKLSAgICByZXR1cm4gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2Nv
cmUob3ApID4gMDsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9u
IDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMCArMTAzLDggQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIE1v
dkhpbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDE3ICsx
MDQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRp
Y3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAg
ICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIENyZWF0ZSBhIE1vdkhpbnQuIFdlIGNhbid0IHVzZSBNb3ZIaW50J3MgZGly
ZWN0bHkgYXQgdGhpcyBzdGFnZSBvZgotICAgICAgICAgICAgLy8gY29tcGlsYXRpb24sIHNvIHdl
IGNvb2sgb25lIHVwIGJ5IGNyZWF0aW5nIGEgbmV3IFZhcmlhYmxlQWNjZXNzRGF0YQotICAgICAg
ICAgICAgLy8gdGhhdCBpc24ndCB1bmlmaWVkIHdpdGggYW55IG9mIHRoZSBvdGhlcnMuIFRoaXMg
ZW5zdXJlcyB0aGF0IHRoaXMKLSAgICAgICAgICAgIC8vIFNldExvY2FsIHdpbGwgdHVybiBpbnRv
IGEgTW92SGludCBhbmQgd2lsbCBub3QgaGF2ZSBhbnkgdHlwZSBjaGVja3MuCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpKTsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGUgPSAmbV9n
cmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7Ci0gICAgICAgICAgICBOb2RlKiBzZXRM
b2NhbCA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3Bl
Y05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8obmV3VmFyaWFibGUpLAorICAgICAg
ICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVj
Tm9uZSwgTW92SGludCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNl
dCgpKSwKICAgICAgICAgICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKLSAgICAgICAgICAg
IHNldExvY2FsLT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihCYWNrd2FyZFNwZWN1bGF0aW9uKTsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CiAgICAgICAgICAgICBOb2RlKiBwcmV2
aW91c0hlYWQgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7CkBAIC0xMjIs
OSArMTE0LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbG9jYWxzW2xvY2FsXTsKLSAg
ICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAg
ICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05v
bmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsK
LSAgICAgICAgICAgIHNldExvY2FsLT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihCYWNrd2FyZFNw
ZWN1bGF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbmV3Um9vdC0+YXBwZW5k
Tm9kZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2
aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjYgKzY4LDYgQEAgdm9pZCBPU1JFeGl0Ojpjb3JyZWN0
SnVtcChMaW5rQnVmZmVyJiBsaQogICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZm
ZXIub2Zmc2V0T2YobGFiZWwpOwogfQogCi12b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQo
QmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgs
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCi17Ci0gICAgTm9kZSogbm9kZTsK
LSAgICBOb2RlKiBsYXN0TW92SGludDsKLSAgICBpZiAoIWRvU2VhcmNoRm9yRm9yd2FyZENvbnZl
cnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSwgbm9k
ZSwgbGFzdE1vdkhpbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobm9kZS0+Y29k
ZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7Ci0gICAgCi0gICAgbV9jb2RlT3Jp
Z2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAKLSAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQobGFzdE1vdkhpbnQpOwotICAgIEFTU0VS
VChsYXN0TW92SGludC0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpOwotICAgIG1fdmFsdWVSZWNv
dmVyeU92ZXJyaWRlID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBWYWx1ZVJlY292ZXJ5T3ZlcnJp
ZGUobGFzdE1vdkhpbnQtPmxvY2FsKCksIHZhbHVlUmVjb3ZlcnkpKTsKLX0KLQogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw4ICsxMDEsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNvbnN0
OwogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sq
KSBjb25zdDsKICAgICB2b2lkIGNvcnJlY3RKdW1wKExpbmtCdWZmZXImKTsKLSAgICAKLSAgICB2
b2lkIGNvbnZlcnRUb0ZvcndhcmQoQmFzaWNCbG9jayosIE5vZGUqLCB1bnNpZ25lZCBub2RlSW5k
ZXgsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmKTsKIAogICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNl
LmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDQ1ICs0Niw2IEBAIGJvb2wgT1NS
RXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWUKICAgICAgICAgICAgIEZyZXF1ZW50RXhp
dFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKSk7
CiB9CiAKLWJvb2wgT1NSRXhpdEJhc2U6OmRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oCi0g
ICAgQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5k
ZXgsIGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKLSAgICBOb2RlKiYgbm9kZSwgTm9kZSomIGxhc3RN
b3ZIaW50KQotewotICAgIC8vIENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMg
YSBTZXRMb2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwg
d2l0aCB0aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVl
UmVjb3ZlcnkuCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIWhhc1ZhbHVl
UmVjb3ZlcnkKLSAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewot
ICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW5Gb3JF
eGl0VGFyZ2V0ID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCk7Ci0gICAg
fQotICAgIAotICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2Rl
IGluc3RydWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBoaW50Ci0gICAgLy8gb24gdGhp
cyBub2RlLgotICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7Ci0gICAg
bm9kZSA9IDA7Ci0gICAgbGFzdE1vdkhpbnQgPSAwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAg
aWYgKGluZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlz
IGlzIGFuIGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0
aW9uLiBUaGlzIGlzIHNhZmUKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVy
biBoYXMgaXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bwotICAg
ICAgICAgICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCi0gICAgICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGlmIChu
b2RlLT5jb250YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkK
LSAgICAgICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKLSAgICAgICAgaWYgKG5vZGUtPmNvZGVP
cmlnaW5Gb3JFeGl0VGFyZ2V0ICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpbmRleEluQmxvY2srKzsKLSAgICB9Ci0g
ICAgCi0gICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ICE9IGN1cnJlbnRO
b2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24g
MTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsNiBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGVTbG93KHByb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9Ci0gICAgCi0gICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZlcnNpb24gaXMgcmVhbGx5IG5lZWRl
ZC4KLSAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oCi0gICAgICAgIEJhc2lj
QmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1Zh
bHVlUmVjb3ZlcnksCi0gICAgICAgIE5vZGUqJiBuZXh0QkNOb2RlLCBOb2RlKiYgbGFzdE1vdkhp
bnQpOwogCiBwcml2YXRlOgogICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNp
dGVTbG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQs
OSArNTA0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBj
YXNlIEFycmF5aWZ5OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAg
IGNhc2UgTW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0gICAgICAgIGNh
c2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAgICAgICAg
Y2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NS
RW50ZXI6CkBAIC01ODUsNiArNTgyLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGdW5jdGlv
blJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50Ogog
ICAgICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgICAgIGNhc2UgTW92SGlu
dDoKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhh
cyBhIHByZWRpY3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Niw4ICsxODYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIHZhbHVlIHdhcyBhbHJlYWR5IG9uIHRoZSBzdGFjay4KICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3Bl
Y05vbmUsIE1vdkhpbnQsIENvZGVPcmlnaW4oKSwgT3BJbmZvKHZhcmlhYmxlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBDb2RlT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQo
KSksIEVkZ2Uobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQg
Z2V0IHJlcGxhY2VkIHdpdGggcmVmZXJlbmNlcwogICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNw
ZWNpZmllZCBieSB2YXJpYWJsZXNBdEhlYWQuCiAgICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBO
b2RlTXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhCi0gICAgICAg
IC8vICAgTW92SGludCBvdGhlcndpc2UuCisgICAgICAgIC8vICAgUGhhbnRvbSBvdGhlcndpc2Uu
CiAgICAgICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1haW5zLCBiZWNh
dXNlIHdlIHdhbnQgdG8ga25vdyB3aGVuIGEKICAgICAgICAgLy8gICBmbHVzaGVkIFNldExvY2Fs
J3MgdmFsdWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0IHNpbXBsZXIK
ICAgICAgICAgLy8gICB0byByZWFzb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxvY2FsLCBzaW5j
ZSB3ZSBjYW4ganVzdCBkbyBhIGJhY2t3YXJkcwpAQCAtMzA4LDcgKzMwOCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVz
aGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5tZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZI
aW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5yZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsgLy8gT25seSBmb3IgVXBzaWxvbnMuCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcg
KzExOCw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBj
YXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9jYWw6Ci0g
ICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9t
YmllSGludDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
NjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIxLDExICsxOTIxLDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNr
KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgTW92SGlu
dDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE5MzMsMTIgKzE5MjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAv
LyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBz
dG9yZWQgYW5kCi0gICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3
ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUg
Y2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAgICAgIC8v
IHN0YWNrLgotICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAgICAgICAg
IHN3aXRjaCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsKICAg
ICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIzNiwxMSArMjIzNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
LSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFuZENo
ZWNrKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgTW92
SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTIyNDgsMTIgKzIyNDMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAg
ICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBi
ZSBzdG9yZWQgYW5kCi0gICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9y
ZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVyZSB0
aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAgICAg
IC8vIHN0YWNrLgotICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAgICAg
ICAgIHN3aXRjaCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsK
ICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTIzMDQsNyArMjI5Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUt
Pm1hY2hpbmVMb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAg
ICAgIAogICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw3ICsxMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0FycmF5
CiAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG51bUVsZW1lbnRzKSkpOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAg
ICAgICByZXR1cm47CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFj
a3dhcmRTcGVjdWxhdGlvbgogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CkBAIC0xMjQsMjIgKzEy
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb24KICAgICBtX2pp
dC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMs
IG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUq
IG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCi17Ci0gICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQotICAgICAgICByZXR1cm47Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwotICAgIGlmIChtX3NwZWN1
bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAgY29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdl
IG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCi17Ci0gICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICBzcGVjdWxhdGlv
bkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsK
LX0KLQotT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
Tm9kZSogbm9kZSkKK09TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBO
b2RlKiBub2RlKQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9T
UkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsKQEAgLTE1MCwxOSArMTM1LDE2IEBAIE9TUkV4aXRKdW1w
UGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OmIKICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlcihpbmRleCk7CiB9CiAKLU9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVK
SVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKK09TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICByZXR1cm4gYmFja3dhcmRTcGVjdWxh
dGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKKyAgICByZXR1
cm4gc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBiYWNrd2FyZFNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOwotICAgIGlm
IChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAg
Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBqdW1wc1RvRmFpbCkKQEAgLTE3MSw3ICsxNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVl
U291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcHNUb0ZhaWwpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKIHsKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MSwyNCArMTYzLDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb24KICAgICBtX2ppdC5qaXRDb2RlKCktPmFw
cGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXpl
KCksIHJlY292ZXJ5SW5kZXgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBT
cGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBF
ZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1
bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewogICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7
Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkK
LXsKLSAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBiYWNrd2Fy
ZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCwg
cmVjb3ZlcnkpOwotICAgIGlmIChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVj
dWxhdGlvbikKLSAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci19Ci0KLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQotewotICAgIHNw
ZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCksIGp1bXBUb0Zh
aWwsIHJlY292ZXJ5KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2ludChOb2RlKiBub2RlKQpAQCAtMjA2LDcgKzE3
NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kKICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jYW5FeGl0KTsK
LSAgICBBU1NFUlQobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9u
KTsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9qaXQuYXBwZW5kRXhpdElu
Zm8oSklUQ29tcGlsZXI6Okp1bXBMaXN0KCkpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5k
T1NSRXhpdChPU1JFeGl0KAogICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSlNWYWx1
ZVNvdXJjZSgpLApAQCAtMjE3LDI2ICsxODQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
SW52YWxpZGF0aW9uUG9pCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZChjb25zdCBWYWx1ZVJlY292ZXJ5JiB2
YWx1ZVJlY292ZXJ5KQotewotICAgIG1faml0LmppdENvZGUoKS0+bGFzdE9TUkV4aXQoKS5jb252
ZXJ0VG9Gb3J3YXJkKAotICAgICAgICBtX2Jsb2NrLCBtX2N1cnJlbnROb2RlLCBtX2luZGV4SW5C
bG9jaywgdmFsdWVSZWNvdmVyeSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFs
dWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhr
aW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsKTsKLSAgICBjb252ZXJ0TGFzdE9T
UkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNW
YWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBq
dW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIGJhY2t3
YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFp
bCk7Ci0gICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwotfQot
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0
S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKICAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwpAQCAtMjUyLDI0
ICsxOTksMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdgogICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNl
Lm5vZGUoKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkVHlwZUNoZWNrKEpT
VmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2Vk
VGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwpCiB7CiAgICAgQVNTRVJUKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3Vn
aCkpOwogICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCk7
Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHNvdXJjZSwgZWRnZS5ub2Rl
KCksIGp1bXBUb0ZhaWwpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNW
YWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQotewotICAgIGJhY2t3YXJk
VHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsK
LSAgICBpZiAobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0g
ICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOwotfQotCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpmb3J3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2Us
IFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBi
YWNrd2FyZFR5cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRv
RmFpbCk7Ci0gICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwor
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRv
RmFpbCk7CiB9CiAKIFJlZ2lzdGVyU2V0IFNwZWN1bGF0aXZlSklUOjp1c2VkUmVnaXN0ZXJzKCkK
QEAgLTEzODAsMTQgKzEzMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGlu
dChOb2RlCiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90
aWNlT1NSQmlydGgoY2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFy
aWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+bG9jYWwoKSkpOwot
fQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludEFuZENoZWNrKE5vZGUqIG5v
ZGUpCi17Ci0gICAgY29tcGlsZU1vdkhpbnQobm9kZSk7Ci0gICAgc3BlY3VsYXRlKG5vZGUsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICBub1Jlc3VsdChub2RlKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5k
QW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKCkKQEAgLTE0
ODIsNyArMTQwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgWm9tYmllSGludDogewotICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKERhdGFGb3Jt
YXREZWFkKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51
bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTE1MDEsOCArMTQyOCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID0gKG1fY3VycmVudE5vZGUtPmZsYWdzKCkgJiBOb2Rl
RXhpdHNGb3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247
Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAKICNp
ZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKQEAgLTE1NDAsMTgg
KzE0NjUsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogewog
ICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyA9IHRydWU7Ci0gICAgbV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRp
b247CiAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7CiAgICAg
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3JpZ2luKDApOwogCiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsK
ICAgICAgICAgTm9kZSogbm9kZSA9IG1faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV07Ci0gICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAg
Ly8gVGhlIGFyZ3VtZW50IGlzIGRlYWQuIFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2gg
YXJndW1lbnRzLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCisg
ICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAg
IEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKTsK
ICAgICAgICAgCkBAIC0yMTY3LDE2ICsyMDkzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUludDMyVG9Eb3VibAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBv
cDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCiAgICAgaWYgKG5l
ZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlcikpIHsKLSAgICAgICAg
aWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSB7Ci0gICAgICAgICAgICBmb3J3
YXJkVHlwZUNoZWNrKAotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUt
PmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlciwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihvcDFHUFIs
IERhdGFGb3JtYXRKUykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFja3dhcmRU
eXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2
NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKLSAgICAgICAgfQorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1Zh
bHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCisgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgfQogICAgIAogICAgIG1faml0Lm1v
dmUob3AxR1BSLCB0ZW1wR1BSKTsKQEAgLTIxOTgsMTYgKzIxMTcsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICAKICAg
ICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyKSkgewot
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAgICAg
ICAgIGZvcndhcmRUeXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFn
R1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpLAotICAgICAgICAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluUGFpcihvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKAotICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNo
aWxkMSgpLCBTcGVjRnVsbE51bWJlciwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIFNwZWNGdWxsTnVtYmVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOwogICAgIH0KICAgICAKICAgICB1bmJveERvdWJsZShvcDFUYWdHUFIsIG9wMVBh
eWxvYWRHUFIsIHJlc3VsdEZQUiwgdGVtcEZQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxNDMsNDMgKzIxNDMsMjggQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1wIGNv
bnZlcnRUb0RvdWJsZShKU1ZhbHVlT3BlcmFuZCYsIEZQUlJlZyByZXN1bHQpOwogI2VuZGlmCiAg
ICAgCi0gICAgLy8gQWRkIGEgYmFja3dhcmQgc3BlY3VsYXRpb24gY2hlY2suCi0gICAgdm9pZCBi
YWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKLSAgICB2b2lkIGJhY2t3YXJkU3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpOwotCi0gICAgLy8gQWRkIGEgc3BlY3VsYXRp
b24gY2hlY2sgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgorICAgIC8vIEFkZCBhIHNwZWN1
bGF0aW9uIGNoZWNrLgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1
ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwotICAgIHZv
aWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7Ci0gICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hl
Y2sgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LCBhbmQgd2l0aCBhIHByb21pc2UgdG8gc3Vw
cGx5IGEganVtcCBsYXRlci4KLSAgICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIGJhY2t3YXJkU3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwotICAgIE9TUkV4
aXRKdW1wUGxhY2Vob2xkZXIgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1Zh
bHVlU291cmNlLCBFZGdlKTsKLSAgICAvLyBBZGQgYSBzZXQgb2Ygc3BlY3VsYXRpb24gY2hlY2tz
IHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmIGp1bXBzVG9GYWlsKTsKKworICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdp
dGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeSwgYW5kIHdpdGggYSBwcm9taXNlIHRvIHN1cHBseSBh
IGp1bXAgbGF0ZXIuCisgICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKik7CisgICAgT1NSRXhpdEp1bXBQbGFjZWhv
bGRlciBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlKTsKKyAg
ICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBqdW1wc1RvRmFpbCk7CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0
aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOwotICAgIHZvaWQgYmFja3dhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CisgICAg
dm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYp
OworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRn
ZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNv
dmVyeSYpOwogICAgIAogICAgIHZvaWQgZW1pdEludmFsaWRhdGlvblBvaW50KE5vZGUqKTsKICAg
ICAKLSAgICAvLyBJdCBpcyBnZW5lcmFsbHkgYSBnb29kIGlkZWEgdG8gbm90IHVzZSB0aGlzIGRp
cmVjdGx5LgotICAgIHZvaWQgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVl
UmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICAKLSAgICAvLyBOb3RlOiBub3Qgc3Bl
Y2lmeWluZyB0aGUgdmFsdWVSZWNvdmVyeSBhcmd1bWVudCAobGVhdmluZyBpdCBhcyBWYWx1ZVJl
Y292ZXJ5KCkpIGltcGxpZXMKLSAgICAvLyB0aGF0IHlvdSd2ZSBlbnN1cmVkIHRoYXQgdGhlcmUg
ZXhpc3RzIGEgTW92SGludCBwcmlvciB0byB5b3VyIHVzZSBvZiBmb3J3YXJkU3BlY3VsYXRpb25D
aGVjaygpLgotICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFs
dWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBW
YWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7Ci0gICAgdm9pZCBmb3J3YXJkU3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFs
dWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFs
dWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBT
cGVjdWxhdGlvblJlY292ZXJ5Jik7Ci0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
LCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBj
b25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGlj
YWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSop
OwogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFs
dWVSZWdzLCBFZGdlKTsKICAgICAKICAgICAvLyBIZWxwZXJzIGZvciBwZXJmb3JtaW5nIHR5cGUg
Y2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiByZWdpc3RlcnMuCiAgICAgYm9v
bCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCkgeyByZXR1cm4gbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlc1Bh
c3NlZFRocm91Z2gpOyB9Ci0gICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNl
LCBFZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwpOwogICAgIHZvaWQgdHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVk
Z2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAganVtcFRvRmFpbCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Us
IEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYpOwogCiAgICAgdm9pZCBzcGVj
dWxhdGVJbnQzMihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSk7CkBA
IC0yMjUyLDcgKzIyMzcsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGN1cnJlbnQgbm9kZSBiZWlu
ZyBnZW5lcmF0ZWQuCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJl
bnROb2RlOwotICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fc3BlY3VsYXRpb25EaXJlY3Rpb247
CiAgICAgYm9vbCBtX2NhbkV4aXQ7CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAg
Ly8gVmlydHVhbCBhbmQgcGh5c2ljYWwgcmVnaXN0ZXIgbWFwcy4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDMzICsxNjMsMjIg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0
dXJlICYmICFpdGVyLT52YWx1ZS5tX2FycmF5TW9kZUlzVmFsaWQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBpbnNlcnQgYSBk
ZWFkIFNldExvY2FsIHRvIHRlbGwgT1NSIHRoYXQgdGhlIGNoaWxkJ3MgdmFsdWUgc2hvdWxkCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlh
YmxlIGlmIHRoZSBDaGVja1N0cnVjdHVyZSBkZWNpZGVzCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRvIGV4aXQuCi0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgICAg
ICBFZGdlIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwg
T3BJbmZvKHZhcmlhYmxlKSwgY2hpbGQxKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBVc2Ug
Tm9kZUV4aXRzRm9yd2FyZCB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBleGl0IHRvIHRoZSBu
ZXh0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0
aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbmV3Tm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0
cnVjdHVyZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxs
VXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlci0+dmFsdWUubV9hcnJh
eU1vZGVJc1ZhbGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFs
dWUubV9hcnJheU1vZGVIb2lzdGluZ09rYXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3
Tm9kZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oaXRlci0+dmFsdWUubV9hcnJheU1vZGUuYXNXb3JkKCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVz
ZSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld05v
ZGUtPm1lcmdlRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7CiAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CkBAIC0yMjgsOSArMjE3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAg
ICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSdy
ZSB0aGUgb25seSBvbmVzIHdobyB3b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
dGhlc2Ugbm9kZXMgd2l0aCBOb2RlRXhpdHNGb3J3YXJkLgotICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSk7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTMyOSw5ICszMTUsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNr
QXJyYXk6IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IHJlbHkgb24gdGhl
IGZhY3QgdGhhdCB3ZSdyZSB0aGUgb25seSBvbmVzIHdobyB3b3VsZAotICAgICAgICAgICAgICAg
ICAgICAvLyBpbnNlcnQgdGhlc2Ugbm9kZXMgd2l0aCBOb2RlRXhpdHNGb3J3YXJkLgotICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNG
b3J3YXJkKSk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9j
YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1
LDEwICsyNDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3Ao
KSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVz
aAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBQaGkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gWm9tYmllSGludAotICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB8fCBlZGdlLT5vcCgpID09IE1vdkhpbnRBbmRDaGVjayk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBpZiAocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU3LDkgKzI1NCw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobm9kZSwgZWRnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGVkZ2UtPm9wKCkgPT0gWm9tYmllSGludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGVkZ2UtPm9wKCkgPT0gTW92SGludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gTW92SGludEFuZENoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0y
OTIsOSArMjg2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29y
c1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5v
cCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUt
Pm9wKCkgPT0gTW92SGludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
LT5vcCgpID09IE1vdkhpbnRBbmRDaGVjawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHByZXZOb2RlLT5vcCgpID09IFpvbWJpZUhpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24g
MTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcwICsxOTIsOCBAQCB2b2lkIFZhcmlhYmxl
RXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAKICAgICAgICAgTWluaWZpZWRHZW5l
cmF0aW9uSW5mbyBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChzb3VyY2UuaWQoKSk7CiAgICAg
ICAgIGlmIChpbmZvLmZvcm1hdCA9PSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICAgICAgLy8g
VHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRh
aW4gdGhlIHZhbHVlIHdlIHdhbnQuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gQmFj
a3dhcmQgcmV3aXJpbmcgcmVmZXJzIHRvOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8v
ICAgICBhOiBTb21ldGhpbmcoLi4uKQotICAgICAgICAgICAgLy8gICAgIGI6IElkKEBhKSAvLyBz
b21lIGlkZW50aXR5IGZ1bmN0aW9uCi0gICAgICAgICAgICAvLyAgICAgYzogU2V0TG9jYWwoQGIp
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2hlcmUgd2UgZmluZCBAYiBiZWluZyBk
ZWFkLCBidXQgQGEgaXMgc3RpbGwgYWxpdmUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gRm9yd2FyZCByZXdpcmluZyByZWZlcnMgdG86Ci0gICAgICAgICAgICAvLwotICAgICAgICAg
ICAgLy8gICAgIGE6IFNvbWV0aGluZyguLi4pCi0gICAgICAgICAgICAvLyAgICAgYjogU2V0TG9j
YWwoQGEpCi0gICAgICAgICAgICAvLyAgICAgYzogSWQoQGEpIC8vIHNvbWUgaWRlbnRpdHkgZnVu
Y3Rpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXaGVyZSB3ZSBmaW5kIEBhIGJl
aW5nIGRlYWQsIGJ1dCBAYiBpcyBzdGlsbCBhbGl2ZS4KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9k
ZSAmJiBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgpKSkgewotICAgICAgICAg
ICAgICAgIE1pbmlmaWVkSUQgaWQgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBp
ZiAodHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgY29kZUJsb2Nr
LCBncmFwaC5hdChpZCkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChpZCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGluZm8uZm9ybWF0ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBNaW5pZmllZElEIGJlc3RJRDsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBiZXN0U2NvcmUgPSAwOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgTWluaWZpZWRHZW5lcmF0aW9uSW5mbz46Oml0
ZXJhdG9yIGl0ZXIgPSBnZW5lcmF0aW9uSW5mb3MuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBI
YXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+OjppdGVyYXRvciBlbmQg
PSBnZW5lcmF0aW9uSW5mb3MuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgTWluaWZpZWRJRCBpZCA9IGl0ZXIt
PmtleTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGdyYXBoLmF0KGlkKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aGFzQ2hpbGQxKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpICE9IHNvdXJjZS5pZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5mb3JtYXQgPT0gRGF0YUZvcm1h
dE5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbXlTY29yZSA9IGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKG5v
ZGUtPm9wKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobXlTY29yZSA8PSBiZXN0U2NvcmUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
YmVzdElEID0gaWQ7Ci0gICAgICAgICAgICAgICAgICAgIGJlc3RTY29yZSA9IG15U2NvcmU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICgh
IWJlc3RJRCkgewotICAgICAgICAgICAgICAgICAgICBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdl
dChiZXN0SUQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby5mb3JtYXQgIT0gRGF0
YUZvcm1hdE5vbmUpOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNv
dmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJl
Y292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoaW5mby5mb3JtYXQgIT0gRGF0YUZv
cm1hdE5vbmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220011</attachid>
            <date>2013-12-25 16:17:29 -0800</date>
            <delta_ts>2013-12-26 09:39:00 -0800</delta_ts>
            <desc>it&apos;s passing *so* many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67255</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk1LDEwICsxOTUsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92
SGludDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAvLyBEb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQg
dGhlIFNldExvY2FsCi0gICAgICAgIC8vIHdhcyBkZWFkLgorICAgIGNhc2UgTW92SGludDogewor
ICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgb25seSBpbmZv
cm1zIHVzIGFib3V0IHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZAorICAgICAgICAvLyBpbiBieXRl
Y29kZSwgYnV0IHRoaXMgY29kZSBpcyBqdXN0IGNvbmNlcm5lZCB3aXRoIHdoYXQgaXMgYWN0dWFs
bHkgaGFwcGVuaW5nIGR1cmluZworICAgICAgICAvLyBERkcgZXhlY3V0aW9uLgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE2
MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMyArNjMsMTMgQEAgcHVibGljOgogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgICAg
IG1fYmFkUHJvcGVydHlKdW1wID0gaml0LT5iYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICAgICAgICAgIG1fYmFkUHJvcGVydHlK
dW1wID0gaml0LT5zcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAw
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbV9iYWRJ
bmRleGluZ1R5cGVKdW1wID0gaml0LT5iYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soQmFkSW5kZXhp
bmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChtX2Jhc2VHUFIpLCAwKTsKKyAgICAg
ICAgbV9iYWRJbmRleGluZ1R5cGVKdW1wID0gaml0LT5zcGVjdWxhdGlvbkNoZWNrKEJhZEluZGV4
aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwobV9iYXNlR1BSKSwgMCk7CiAgICAg
fQogICAgIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBNb3ZIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBCaXRBbmQ6CiAgICAgICAgIGNhc2UgQml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsMTUgKzIzMiwxOSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwg
U2V0T25FbnRyeSB9OworICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgSW1tZWRpYXRlU2V0
IH07CiAgICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgLy8gSXMg
dGhpcyBhbiBhcmd1bWVudD8KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKLQot
ICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBzZXRMb2NhbChvcGVy
YW5kLCB2YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZv
KG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBEZWxheWVkU2V0
TG9jYWwgZGVsYXllZCA9IERlbGF5ZWRTZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoc2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKKyAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZS5hcHBlbmQoZGVsYXllZCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzLCBzZXRN
b2RlKTsKICAgICB9CiAKICAgICBOb2RlKiBzZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5v
ZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC0xMTIxLDYgKzExMjUs
MjcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIAogICAgIElubGluZVN0YWNrRW50cnkqIG1faW5s
aW5lU3RhY2tUb3A7CisgICAgCisgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAg
ICAgIAorICAgICAgICBEZWxheWVkU2V0TG9jYWwoKSB7IH0KKyAgICAgICAgRGVsYXllZFNldExv
Y2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDog
bV9vcGVyYW5kKG9wZXJhbmQpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogZXhlY3V0ZShCeXRlQ29kZVBh
cnNlciogcGFyc2VyLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZXItPnNldEFyZ3VtZW50KG1fb3BlcmFuZCwgbV92YWx1ZSwgc2V0TW9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29wZXJhbmQsIG1fdmFsdWUsIHNl
dE1vZGUpOworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8RGVsYXllZFNldExv
Y2FsLCAyPiBtX3NldExvY2FsUXVldWU7CiAKICAgICAvLyBIYXZlIHdlIGJ1aWx0IG9wZXJhbmQg
bWFwcz8gV2UgaW5pdGlhbGl6ZSB0aGVtIGxhemlseSwgYW5kIG9ubHkgd2hlbiBkb2luZwogICAg
IC8vIGlubGluaW5nLgpAQCAtMTMyNSw5ICsxMzUwLDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICA9PSBjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVD
YWxsKCkpOwogICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpIHsKICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9Ci0gICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlKS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6
OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBzY29wZVZhcmlhYmxlID0KLSAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6U2NvcGVDaGFpbiksIGFkZFRvR3Jh
cGgoR2V0U2NvcGUsIGNhbGxUYXJnZXROb2RlKSktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpTY29wZUNoYWluKSwgYWRkVG9H
cmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5vZGUpLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgCiAgICAgICAgIGNhbGxlZVZhcmlhYmxlLT5tZXJnZVNob3Vs
ZE5ldmVyVW5ib3godHJ1ZSk7CiAgICAgICAgIHNjb3BlVmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2
ZXJVbmJveCh0cnVlKTsKQEAgLTE4NzIsNiArMTg5NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICBt
X3NldExvY2FsUXVldWUucmVzaXplKDApOworICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0
ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9
PSBsaW1pdCkgewogICAgICAgICAgICAgLy8gT3JkaW5hcmlseSB3ZSB3YW50IHRvIHBsYW50IGEg
anVtcC4gQnV0IHJlZnVzZSB0byBkbyB0aGlzIGlmIHRoZSBibG9jayBpcwpAQCAtMTkwMyw3ICsx
OTMyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICBjYXNlIG9wX2VudGVyOgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRv
IHVuZGVmaW5lZC4KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQotICAgICAgICAgICAgICAgIHNldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgU2V0T25FbnRy
eSk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25z
dGFudFVuZGVmaW5lZCgpLCBJbW1lZGlhdGVTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW50ZXIpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBA
IC0yOTA4LDcgKzI5MzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCk7CiAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZS5pc1ZhbGlkKCkpOwotICAgICAgICAg
ICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAg
ICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlh
dGVTZXQpOwogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcmV0dXJu
aW5nIGZyb20gdGhlIGZpcnN0IGJsb2NrLCB0aGVuIHdlJ3JlIGRvbmUgcGFyc2luZy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjEw
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAg
IGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFVwc2lsb246CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw4ICsxODIsNiBA
QCBlbnVtIFJlZkNvdW50U3RhdGUgewogCiBlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBB
dXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9Owog
Ci1lbnVtIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2Fy
ZFNwZWN1bGF0aW9uIH07Ci0KIGVudW0gUHJvb2ZTdGF0dXMgeyBOZWVkc0NoZWNrLCBJc1Byb3Zl
ZCB9OwogCiBpbmxpbmUgYm9vbCBpc1Byb3ZlZChQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEy
ICsxMTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4
ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVy
IG9uIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBu
b2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVtb3ZlRWRnZSgw
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2lu
LCBjaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVFeGl0c0ZvcndhcmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhbnRvbS5t
ZXJnZUZsYWdzKE5vZGVFeGl0c0ZvcndhcmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBwaGFudG9tKTsK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZHJl
bi5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwg
Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIo
RWRnZSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMs
MTIgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGVwdGhGaXJzdC5z
aXplKCk7IGktLTspCiAgICAgICAgICAgICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsK
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsg
KytibG9ja0luZGV4KQogICAgICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNsZWFuVmFyaWFibGVzKG1f
Z3JhcGgubV9hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBo
Lm1fcmVmQ291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CkBAIC0xNTIsNiArMTU2LDM2IEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgICAgICBjYXNl
IFNTQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVGhy
ZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIC8vIENsZWFuIHVwIHZhcmlhYmxlIGxpbmtzIGZvciB0
aGUgYmxvY2suIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgdGhlIGFjdHVhbCBEQ0UKKyAgICAg
ICAgICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0byBzZWUgR2V0TG9jYWxzLCBzbyB3ZSBjYW4gYnlw
YXNzIHRoZW0gaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUKKyAgICAgICAgICAgIC8vIHZhcnMtYXQt
dGFpbCBwb2ludCB0byBhIEdldExvY2FsLCB0aGUgR2V0TG9jYWwgaXMgZGVhZCwgYnV0IHRoZSBQ
aGkgaXQgcG9pbnRzCisgICAgICAgICAgICAvLyB0byBpcyBhbGl2ZS4KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IDA7IHBoaUluZGV4IDwgYmxvY2st
PnBoaXMuc2l6ZSgpOyArK3BoaUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+
cGhpc1twaGlJbmRleF0tPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGNvdWxkIGFjdHVhbGx5IGZyZWUgbm9kZXMgaGVyZS4gRXhjZXB0IHRoYXQg
aXQgcHJvYmFibHkKKyAgICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIsIHNpbmNl
IHdlIGRvbid0IGFkZCBhbnkgbm9kZXMgYWZ0ZXIgdGhpcyBwaGFzZS4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjIzOQor
ICAgICAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleC0tXSA9IGJsb2NrLT5waGlz
Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnBoaXMucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2xlYW5WYXJpYWJsZXMoYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBj
bGVhblZhcmlhYmxlcyhibG9jay0+dmFyaWFibGVzQXRUYWlsKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXpl
KCk7IGluZGV4SW5CbG9jay0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChpbmRleEluQmxvY2spOwpAQCAtMTU5LDM3ICsxOTMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNh
c2UgTW92SGludDogewotICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBp
cyBkZWFkIGJ1dCBpdHMKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNv
IHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAmJiBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5jaGlsZDEoKS0+b3AoKSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMSgp
LT5jaGlsZDEoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5z
aG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhab21iaWVIaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpID0gRWRnZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1v
dkhpbnRBbmRDaGVjayk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUu
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAg
IC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBEQ0UgcnVucyBvbmx5IG9uY2UuCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewpAQCAtMjI4LDYgKzI0OCwyNyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhcmlhYmxl
c1ZlY3RvclR5cGU+CisgICAgdm9pZCBjbGVhblZhcmlhYmxlcyhWYXJpYWJsZXNWZWN0b3JUeXBl
JiB2YXJpYWJsZXMpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YXJpYWJsZXMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gdmFyaWFibGVzW2ldOwor
ICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhhbnRvbSAmJiBub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGVzW2ldID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGVzW2ld
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBWZWN0b3I8Tm9kZSosIDEyOD4gbV93
b3JrbGlzdDsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEw
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDcsOSArOTA3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zm
c2V0OgogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgY2FzZSBNb3ZIaW50Ogot
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50Ogog
ICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgICAgICBjYXNlIENoZWNrVGllclVw
QXRSZXR1cm46CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKQEAgLTEwMDUs
NiArMTAwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxD
aGVjazoKICAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBj
YXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAg
IGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVm
YXVsdDoKQEAgLTE0NzgsNyArMTQ3Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAo
aXNEb3VibGUodXNlS2luZCkpIHsKICAgICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxh
dGVJbnQzMkZvckFyaXRobWV0aWMoKSkgewotICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9E
b3VibGVOb2RlKGVkZ2UsIHVzZUtpbmQsIG1fY3VycmVudE5vZGUtPnNwZWN1bGF0aW9uRGlyZWN0
aW9uKCkpOworICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKGVkZ2UsIHVz
ZUtpbmQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMTQ5MSw3ICsxNDkwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUsIEludDUyVG9Eb3VibGUsCiAgICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2Rl
KCksIE51bWJlclVzZSkpOwotICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3BlY3VsYXRpb25E
aXJlY3Rpb24obV9jdXJyZW50Tm9kZS0+c3BlY3VsYXRpb25EaXJlY3Rpb24oKSk7CiAgICAgICAg
ICAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xNTQ1LDcgKzE1NDMsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyLCBJbnQ1MlRvVmFsdWUsCiAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwg
VW50eXBlZFVzZSkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlv
bihtX2N1cnJlbnROb2RlLT5zcGVjdWxhdGlvbkRpcmVjdGlvbigpKTsKICAgICAgICAgICAgIGVk
Z2UgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTE1ODcsMTMgKzE1ODQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZWRnZSA9IG5ld0Vk
Z2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYg
ZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgaW5qZWN0SW50MzJUb0Rv
dWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlKQogICAgIHsK
ICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgSW50MzJUb0RvdWJsZSwK
ICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCks
IE51bWJlclVzZSkpOwotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlv
bikKLSAgICAgICAgICAgIHJlc3VsdC0+bWVyZ2VGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKICAg
ICAgICAgCiAgICAgICAgIGVkZ2UgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24g
MTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDYgQEAgcHVibGljOgogICAgICAgICAvLyAgIHRp
bWUgYW5kIHByZXNlcnZlIHNvbWUga2luZCBvZiBzYW5pdHksIGlmIHdlIGhvaXN0IHNvbWV0aGlu
ZyB0aGF0IG11c3QgZXhpdC4KICAgICAgICAgLy8KICAgICAgICAgLy8gQWxzbywgd2UgbmVlZCB0
byByZW1lbWJlciB0bzoKLSAgICAgICAgLy8gLSBDbGVhciBOb2RlRXhpdHNGb3J3YXJkIGZvciBh
bnkgbm9kZXMgd2UgaG9pc3RlZC4KICAgICAgICAgLy8gLSBVcGRhdGUgdGhlIHN0YXRlLWF0LXRh
aWwgd2l0aCB0aGUgbm9kZSB3ZSBob2lzdGVkLCBzbyBmdXR1cmUgaG9pc3QgY2FuZGlkYXRlcwog
ICAgICAgICAvLyAgIGtub3cgYWJvdXQgYW55IHR5cGUgY2hlY2tzIHdlIGhvaXN0ZWQuCiAgICAg
ICAgIC8vCkBAIC0yMzAsOCArMjI5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGRh
dGEucHJlSGVhZGVyLT5pbnNlcnRCZWZvcmVMYXN0KG5vZGUpOwogICAgICAgICBub2RlLT5taXNj
Lm93bmVyID0gZGF0YS5wcmVIZWFkZXI7Ci0gICAgICAgIE5vZGVGbGFncyBkaWRFeGl0Rm9yd2Fy
ZCA9IG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkOwotICAgICAgICBub2RlLT5jbGVh
ckZsYWdzKE5vZGVFeGl0c0ZvcndhcmQpOwogICAgICAgICBub2RlLT5jb2RlT3JpZ2luRm9yRXhp
dFRhcmdldCA9IGRhdGEucHJlSGVhZGVyLT5sYXN0KCktPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
OwogICAgICAgICAKICAgICAgICAgLy8gTW9kaWZ5IHRoZSBzdGF0ZXMgYXQgdGhlIGVuZCBvZiB0
aGUgcHJlSGVhZGVyIG9mIHRoZSBsb29wIHdlIGhvaXN0ZWQgdG8sCkBAIC0yNTYsNyArMjUzLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgCiAgICAgICAgIG5vZGVSZWYgPSBtX2dyYXBoLmFkZE5v
ZGUoU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsK
LSAgICAgICAgbm9kZVJlZi0+bWVyZ2VGbGFncyhkaWRFeGl0Rm9yd2FyZCk7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDE1ICszOCwxMyBAQCBNaW5pZmllZE5vZGUgTWluaWZpZWROb2RlOjpmcm9tTm9kZShOb2Rl
CiAgICAgTWluaWZpZWROb2RlIHJlc3VsdDsKICAgICByZXN1bHQubV9pZCA9IE1pbmlmaWVkSUQo
bm9kZSk7CiAgICAgcmVzdWx0Lm1fb3AgPSBub2RlLT5vcCgpOwotICAgIGlmIChoYXNDaGlsZChu
b2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0Lm1fY2hpbGRPckluZm8gPSBNaW5pZmllZElEKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkubV9pZDsKLSAgICBlbHNlIGlmIChoYXNDb25zdGFudE51bWJl
cihub2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0Lm1fY2hpbGRPckluZm8gPSBub2RlLT5jb25z
dGFudE51bWJlcigpOworICAgIGlmIChoYXNDb25zdGFudE51bWJlcihub2RlLT5vcCgpKSkKKyAg
ICAgICAgcmVzdWx0Lm1faW5mbyA9IG5vZGUtPmNvbnN0YW50TnVtYmVyKCk7CiAgICAgZWxzZSBp
ZiAoaGFzV2Vha0NvbnN0YW50KG5vZGUtPm9wKCkpKQotICAgICAgICByZXN1bHQubV9jaGlsZE9y
SW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAg
ICAgICAgcmVzdWx0Lm1faW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtD
b25zdGFudCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhh
bnRvbUFyZ3VtZW50cyk7Ci0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gMDsKKyAgICAg
ICAgcmVzdWx0Lm1faW5mbyA9IDA7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9u
IDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw5IEBAIGlubGluZSBib29sIGJlbG9uZ3NJbk1p
bmlmaWVkR3JhcGgoTm9kZVQKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEpTQ29uc3Rh
bnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAg
ICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNl
IERvdWJsZUFzSW50MzI6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgotICAgIGNhc2UgSW50
NTJUb1ZhbHVlOgotICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKCFwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmlu
Zyh0eXBlKSAmJiAhcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyh0eXBlKSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiB9CkBAIC02NiwxNCArNTksNiBAQCBwdWJsaWM6CiAgICAgTWlu
aWZpZWRJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBOb2RlVHlwZSBvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICAKLSAgICBib29sIGhhc0NoaWxkMSgpIGNvbnN0IHsg
cmV0dXJuIGhhc0NoaWxkKG1fb3ApOyB9Ci0gICAgCi0gICAgTWluaWZpZWRJRCBjaGlsZDEoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG1fb3ApKTsKLSAgICAgICAgcmV0
dXJuIE1pbmlmaWVkSUQ6OmZyb21CaXRzKG1fY2hpbGRPckluZm8pOwotICAgIH0KLSAgICAKICAg
ICBib29sIGhhc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIoKSB8
fCBoYXNXZWFrQ29uc3RhbnQoKTsgfQogICAgIAogICAgIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIo
KSBjb25zdCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQpAQCAtODEsNyArNjYs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY29uc3RhbnROdW1iZXIoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50TnVtYmVyKG1fb3ApKTsKLSAgICAgICAgcmV0dXJu
IG1fY2hpbGRPckluZm87CisgICAgICAgIHJldHVybiBtX2luZm87CiAgICAgfQogICAgIAogICAg
IGJvb2wgaGFzV2Vha0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzV2Vha0NvbnN0YW50KG1f
b3ApOyB9CkBAIC04OSw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICBKU0NlbGwqIHdlYWtDb25zdGFu
dCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzV2Vha0NvbnN0YW50KG1fb3ApKTsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX2NoaWxkT3JJbmZvKTsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX2luZm8pOwogICAgIH0KICAgICAK
ICAgICBzdGF0aWMgTWluaWZpZWRJRCBnZXRJRChNaW5pZmllZE5vZGUqIG5vZGUpIHsgcmV0dXJu
IG5vZGUtPmlkKCk7IH0KQEAgLTk5LDIwICs4NCw2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBw
cml2YXRlOgotICAgIHN0YXRpYyBib29sIGhhc0NoaWxkKE5vZGVUeXBlIHR5cGUpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAg
ICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAg
ICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgotICAgICAgICBjYXNlIEludDUyVG9Eb3VibGU6Ci0g
ICAgICAgIGNhc2UgSW50NTJUb1ZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
CiAgICAgc3RhdGljIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoTm9kZVR5cGUgdHlwZSkKICAgICB7
CiAgICAgICAgIHJldHVybiB0eXBlID09IEpTQ29uc3RhbnQ7CkBAIC0xMjMsNyArOTQsNyBAQCBw
cml2YXRlOgogICAgIH0KICAgICAKICAgICBNaW5pZmllZElEIG1faWQ7Ci0gICAgdWludHB0cl90
IG1fY2hpbGRPckluZm87IC8vIE5vZGVzIGluIHRoZSBtaW5pZmllZCBncmFwaCBoYXZlIG9ubHkg
b25lIGNoaWxkIGVhY2guCisgICAgdWludHB0cl90IG1faW5mbzsKICAgICBOb2RlVHlwZSBtX29w
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lv
biAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw5ICs0Niw2IEBAIGJvb2wgTm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKEdyYXBoJiAKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAg
ICAgY2FzZSBTZXRMb2NhbDoKLSAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6Ci0gICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
Y2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDQyICsyNzQsMjQgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICByZXR1cm4gZmlsdGVyRmxhZ3MofmZsYWdzKTsKICAgICB9CiAg
ICAgCi0gICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gc3BlY3VsYXRpb25EaXJlY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKGZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKQotICAgICAgICAgICAg
cmV0dXJuIEZvcndhcmRTcGVjdWxhdGlvbjsKLSAgICAgICAgcmV0dXJuIEJhY2t3YXJkU3BlY3Vs
YXRpb247Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0U3BlY3VsYXRpb25EaXJlY3Rpb24oU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChkaXJl
Y3Rpb24pIHsKLSAgICAgICAgY2FzZSBGb3J3YXJkU3BlY3VsYXRpb246Ci0gICAgICAgICAgICBt
ZXJnZUZsYWdzKE5vZGVFeGl0c0ZvcndhcmQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIEJhY2t3YXJkU3BlY3VsYXRpb246Ci0gICAgICAgICAgICBjbGVhckZsYWdzKE5vZGVF
eGl0c0ZvcndhcmQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgc2V0T3BB
bmREZWZhdWx0RmxhZ3MoTm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBtX29wID0gb3A7CiAg
ICAgICAgIG1fZmxhZ3MgPSBkZWZhdWx0RmxhZ3Mob3ApOwogICAgIH0KIAorICAgIC8vIEZJWE1F
OiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgdm9pZCBzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3Mo
Tm9kZVR5cGUgb3ApCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1Zh
ckFyZ3MpKTsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVja2VkKG9w
KTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIHZvaWQgc2V0
T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVja2VkKE5vZGVUeXBlIG9wKQogICAgIHsKICAg
ICAgICAgbV9vcCA9IG9wOwotICAgICAgICBtX2ZsYWdzID0gKGRlZmF1bHRGbGFncyhvcCkgJiB+
Tm9kZUV4aXRzRm9yd2FyZCkgfCAobV9mbGFncyAmIE5vZGVFeGl0c0ZvcndhcmQpOworICAgICAg
ICBtX2ZsYWdzID0gZGVmYXVsdEZsYWdzKG9wKTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRU
b1BoYW50b20oKQpAQCAtNTMxLDkgKzUxMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICBib29sIGNv
bnRhaW5zTW92SGludCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKLSAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC01NjcsNiArNTQ3LDggQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAgICBjYXNlIE1vdkhp
bnQ6CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE5MCwxMSAr
MTE3Miw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAg
Y2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgIGNhc2UgTW92
SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgotICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICBjYXNl
IERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFBoYW50b206CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDkgKzk2LDYgQEAgdm9pZCBkdW1wTm9kZUZsYWdzKFByaW50U3RyZWFtJiBhY3R1YWxP
dQogICAgIGlmICghKGZsYWdzICYgTm9kZURvZXNOb3RFeGl0KSkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiQ2FuRXhpdCIpOwogICAgIAotICAgIGlmIChmbGFncyAmIE5vZGVFeGl0c0Zvcndh
cmQpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgIk5vZGVFeGl0c0ZvcndhcmQiKTsKLSAgICAK
ICAgICBDU3RyaW5nIHN0cmluZyA9IG91dC50b0NTdHJpbmcoKTsKICAgICBpZiAoIXN0cmluZy5s
ZW5ndGgoKSkKICAgICAgICAgYWN0dWFsT3V0LnByaW50KCI8ZW1wdHk+Iik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgJKHJldmlzaW9uIDE2MTA3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDkgKzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVm
aW5lIE5vZGVSZWxldmFudFRvT1NSICAgICAgICAgICAgICAgIDB4NDAwMAogCi0jZGVmaW5lIE5v
ZGVFeGl0c0ZvcndhcmQgICAgICAgICAgICAgICAgIDB4ODAwMAotCi0jZGVmaW5lIE5vZGVJc1N0
YXRpY0NvbnN0YW50ICAgICAgICAgICAgMHgxMDAwMCAvLyBVc2VkIG9ubHkgYnkgdGhlIHBhcnNl
ciwgdG8gZGV0ZXJtaW5lIGlmIGEgY29uc3RhbnQgYXJvc2Ugc3RhdGljYWxseSBhbmQgaGVuY2Ug
Y291bGQgYmUgZm9sZGVkIGF0IHBhcnNlLXRpbWUuCisjZGVmaW5lIE5vZGVJc1N0YXRpY0NvbnN0
YW50ICAgICAgICAgICAgIDB4ODAwMCAvLyBVc2VkIG9ubHkgYnkgdGhlIHBhcnNlciwgdG8gZGV0
ZXJtaW5lIGlmIGEgY29uc3RhbnQgYXJvc2Ugc3RhdGljYWxseSBhbmQgaGVuY2UgY291bGQgYmUg
Zm9sZGVkIGF0IHBhcnNlLXRpbWUuCiAKIHR5cGVkZWYgdWludDMyX3QgTm9kZUZsYWdzOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNjEw
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDggKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIC8qIEFueSB0d28gbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc2FtZSBQaGkgZ3JhcGgg
d2lsbCBzaGFyZSB0aGUgc2FtZSAqL1wKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0
aHVzIHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBOb2Rl
UmVzdWx0SlMpIFwKLSAgICBtYWNybyhTZXRMb2NhbCwgTm9kZUV4aXRzRm9yd2FyZCkgXAotICAg
IG1hY3JvKE1vdkhpbnRBbmRDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0Zvcndh
cmQpIFwKKyAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVE
b2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIG1hY3JvKEdldEFyZ3VtZW50LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CkBAIC0zMTgsODAgKzMxNyw2IEBAIGlubGluZSBOb2RlRmxhZ3MgZGVmYXVsdEZsYWdzKE5vZGVU
eXBlIG8KICAgICB9CiB9CiAKLWlubGluZSBib29sIHBlcm1pdHNPU1JCYWNrd2FyZFJld2lyaW5n
KE5vZGVUeXBlIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIElkZW50aXR5Ogot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2UgSW50NTJUb1ZhbHVlOgotICAg
IGNhc2UgSW50NTJUb0RvdWJsZToKLSAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBvbmx5IG5vZGUg
d2hlcmUgd2UgZG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBiOiBVSW50MzJUb051bWJl
cihAYSkKLSAgICAgICAgLy8gICAgIGM6IFNldExvY2FsKEBiKQotICAgICAgICAvLwotICAgICAg
ICAvLyBhbmQgdGhlbiBhbHNvIGhhdmUgc29tZSB1c2VzIG9mIEBhIHdpdGhvdXQgUGhhbnRvbSdp
bmcgQGIuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdGhlIHByaW9yaXR5IHdpdGggd2hpY2gg
d2Ugc2hvdWxkIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZSBmb3IgZm9yd2FyZAotLy8gcmV3aXJpbmcu
IEhpZ2hlciBpcyBiZXR0ZXIuIFplcm8gbWVhbnMgdGhhdCB0aGUgbm9kZSBpcyBub3QgdXNlZnVs
IGZvciByZXdpcmluZy4KLS8vIEJ5IGNvbnZlbnRpb24sIHdlIHVzZSAxMDAgdG8gbWVhbiB0aGF0
IHRoZSBub2RlIGlzIHRvdGFsbHkgZXF1aXZhbGVudCB0byBpdHMKLS8vIGlucHV0IHdpdGggbm8g
aW5mb3JtYXRpb24gbG9zcy4KLWlubGluZSB1bnNpZ25lZCBmb3J3YXJkUmV3aXJpbmdTZWxlY3Rp
b25TY29yZShOb2RlVHlwZSBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBJZGVu
dGl0eToKLSAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHNlZSB0aGVzZSBieSB0aGUgdGltZSB3ZSBn
ZXQgdG8gT1NSIGV2ZW4gdGhvdWdoIGl0IGNsZWFybHkKLSAgICAgICAgLy8gaXMgYSBwZXJmZWN0
IGlkZW50aXR5IGZ1bmN0aW9uLgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gMTAwOwotICAgICAgICAKLSAgICBjYXNlIERvdWJsZUFzSW50MzI6
Ci0gICAgICAgIC8vIFRoaXMgc3BlY3VsYXRlcyB0aGF0IHRoZSBpbmNvbWluZyBkb3VibGUgaXMg
Y29udmVydGlibGUgdG8gYW4gaW50MzIuIFNvCi0gICAgICAgIC8vIGl0cyByZXN1bHQgaXMgdG90
YWxseSBlcXVpdmFsZW50LgotICAgICAgICByZXR1cm4gMTAwOwotICAgICAgICAKLSAgICBjYXNl
IEludDMyVG9Eb3VibGU6Ci0gICAgICAgIC8vIFRoaXMgY29udmVydHMgYW4gaW50MzIgdG8gYSBk
b3VibGUsIGJ1dCB0aGF0IGxvc2VzIGEgYml0IG9mIGluZm9ybWF0aW9uLgotICAgICAgICAvLyBP
VE9IIGl0J3Mgc3RpbGwgYW4gZXF1aXZhbGVudCBudW1iZXIuCi0gICAgICAgIHJldHVybiA3NTsK
LSAgICAgICAgCi0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgLy8gSXQncyBjb21w
bGV0ZWx5IGZpbmUgdG8gdXNlIHRoaXMgZm9yIE9TUiBleGl0LCBzaW5jZSB0aGUgdWludDMyIGlz
bid0Ci0gICAgICAgIC8vIGFjdHVhbGx5IHJlcHJlc2VudGFibGUgaW4gYnl0ZWNvZGUuCi0gICAg
ICAgIHJldHVybiAxMDA7Ci0KLSAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgLy8gVGhp
cyBsb3NlcyBpbmZvcm1hdGlvbi4gT25seSB1c2UgaXQgaWYgdGhlcmUgYXJlIG5vIGJldHRlciBh
bHRlcm5hdGl2ZXMuCi0gICAgICAgIHJldHVybiAyNTsKLSAgICAgICAgCi0gICAgY2FzZSBJbnQ1
MlRvVmFsdWU6Ci0gICAgICAgIC8vIExvc2VzIG5vIGluZm9ybWF0aW9uLiBJdCBqdXN0IGJveGVz
IHRoZSB2YWx1ZSwgd2hpY2ggaXMgd2hhdCBPU1Igd2FudHMKLSAgICAgICAgLy8gdG8gZG8gYW55
d2F5LgotICAgICAgICByZXR1cm4gMTAwOwotICAgICAgICAKLSAgICBjYXNlIEludDUyVG9Eb3Vi
bGU6Ci0gICAgICAgIC8vIFRoaXMgaXMgbGlrZSBJbnQzMlRvRG91YmxlOyB3ZSBjYW4gdXNlIGl0
IGJlY2F1c2UgaXQgZ2l2ZXMgYSBzZW1hbnRpY2FsbHkKLSAgICAgICAgLy8gZXF1aXZhbGVudCB2
YWx1ZSBidXQgdGhhdCB2YWx1ZSBtYXkgYmUgYW4gaW50MzIgaW4gYSBkb3VibGUsIHNvIHdlJ2QK
LSAgICAgICAgLy8gcmF0aGVyIG5vdCBpZiB3ZSBjYW4gYXZvaWQgaXQuCi0gICAgICAgIHJldHVy
biA3NTsKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
fQotCi1pbmxpbmUgYm9vbCBwZXJtaXRzT1NSRm9yd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9wKQot
ewotICAgIHJldHVybiBmb3J3YXJkUmV3aXJpbmdTZWxlY3Rpb25TY29yZShvcCkgPiAwOwotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDogeworICAg
ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRM
b2NhbCgpKSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2
MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTcgKzEwNCw5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBFeHRyYWN0
T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFi
bGUtPmxvY2FsKCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ3Jl
YXRlIGEgTW92SGludC4gV2UgY2FuJ3QgdXNlIE1vdkhpbnQncyBkaXJlY3RseSBhdCB0aGlzIHN0
YWdlIG9mCi0gICAgICAgICAgICAvLyBjb21waWxhdGlvbiwgc28gd2UgY29vayBvbmUgdXAgYnkg
Y3JlYXRpbmcgYSBuZXcgVmFyaWFibGVBY2Nlc3NEYXRhCi0gICAgICAgICAgICAvLyB0aGF0IGlz
bid0IHVuaWZpZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVycy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhp
cwotICAgICAgICAgICAgLy8gU2V0TG9jYWwgd2lsbCB0dXJuIGludG8gYSBNb3ZIaW50IGFuZCB3
aWxsIG5vdCBoYXZlIGFueSB0eXBlIGNoZWNrcy4KLSAgICAgICAgICAgIG1fZ3JhcGgubV92YXJp
YWJsZUFjY2Vzc0RhdGEuYXBwZW5kKAotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSh2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkpOwotICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZSA9ICZtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLmxhc3QoKTsKLSAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gbmV3Um9vdC0+
YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9jYWws
IGNvZGVPcmlnaW4sIE9wSW5mbyhuZXdWYXJpYWJsZSksCisgICAgICAgICAgICBuZXdSb290LT5h
cHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBj
b2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLAogICAgICAgICAg
ICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwotICAgICAgICAgICAgc2V0TG9jYWwtPnNldFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICB9CiAgICAg
ICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdp
c3RlcnM7ICsrbG9jYWwpIHsKICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzSGVhZCA9IHRhcmdl
dC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKQEAgLTEyMiw5ICsxMTQsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBsb2NhbHNbbG9jYWxdOwotICAgICAgICAgICAgTm9kZSog
c2V0TG9jYWwgPSBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgbmV3Um9vdC0+YXBw
ZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNv
ZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOwotICAgICAgICAgICAgc2V0
TG9jYWwtPnNldFNwZWN1bGF0aW9uRGlyZWN0aW9uKEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCwyNiArNjgsNiBAQCB2b2lkIE9TUkV4aXQ6OmNvcnJlY3RKdW1wKExpbmtCdWZmZXIm
IGxpCiAgICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihsYWJl
bCk7CiB9CiAKLXZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZChCYXNpY0Jsb2NrKiBibG9j
aywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgY29uc3QgVmFsdWVSZWNv
dmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBOb2RlKiBub2RlOwotICAgIE5vZGUqIGxhc3RN
b3ZIaW50OwotICAgIGlmICghZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3Vy
cmVudE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZVJlY292ZXJ5LCBub2RlLCBsYXN0TW92SGludCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKTsKLSAgICAKLSAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2Rl
T3JpZ2luOwotICAgIAotICAgIGlmICghdmFsdWVSZWNvdmVyeSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEFTU0VSVChsYXN0TW92SGludCk7Ci0gICAgQVNTRVJUKGxhc3RNb3ZIaW50LT5j
aGlsZDEoKSA9PSBjdXJyZW50Tm9kZSk7Ci0gICAgbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGUgPSBh
ZG9wdFJlZigKLSAgICAgICAgbmV3IFZhbHVlUmVjb3ZlcnlPdmVycmlkZShsYXN0TW92SGludC0+
bG9jYWwoKSwgdmFsdWVSZWNvdmVyeSkpOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw2IEBAIHN0
cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBnZXRQYXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7CiAgICAgQ29kZUxvY2F0
aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwogICAgIHZv
aWQgY29ycmVjdEp1bXAoTGlua0J1ZmZlciYpOwotICAgIAotICAgIHZvaWQgY29udmVydFRvRm9y
d2FyZChCYXNpY0Jsb2NrKiwgTm9kZSosIHVuc2lnbmVkIG5vZGVJbmRleCwgY29uc3QgVmFsdWVS
ZWNvdmVyeSYpOwogCiAgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lvbiAx
NjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNDUgKzQ2LDYgQEAgYm9vbCBPU1JFeGl0QmFzZTo6Y29uc2lk
ZXJBZGRpbmdBc0ZyZXF1ZQogICAgICAgICAgICAgRnJlcXVlbnRFeGl0U2l0ZShtX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4LCBtX2tpbmQpKTsKIH0KIAotYm9vbCBPU1JF
eGl0QmFzZTo6ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKLSAgICBCYXNpY0Jsb2NrKiBi
bG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNWYWx1
ZVJlY292ZXJ5LAotICAgIE5vZGUqJiBub2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpCi17Ci0gICAg
Ly8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFNldExvY2FsLCBvciB0
aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKLSAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNv
ZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFsdWVSZWNvdmVyeS4KLSAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAmJiAhaGFzVmFsdWVSZWNvdmVyeQotICAgICAg
ICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAgICAgIE5vZGUqIHNl
dExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwotICAgICAgICBBU1NFUlRfVU5VU0VE
KHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPT0gY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8g
RmluZCB0aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uIEFs
c28gdHJhY2sgdGhlIGxhc3QgbW92IGhpbnQKLSAgICAvLyBvbiB0aGlzIG5vZGUuCi0gICAgdW5z
aWduZWQgaW5kZXhJbkJsb2NrID0gbm9kZUluZGV4ICsgMTsKLSAgICBub2RlID0gMDsKLSAgICBs
YXN0TW92SGludCA9IDA7Ci0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoaW5kZXhJbkJsb2Nr
ID09IGJsb2NrLT5zaXplKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5saW5lIHJl
dHVybi4gR2l2ZSB1cCBhbmQgZG8gYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24uIFRoaXMgaXMgc2Fm
ZQotICAgICAgICAgICAgLy8gYmVjYXVzZSBhbiBpbmxpbmUgcmV0dXJuIGhhcyBpdHMgb3duIGJ5
dGVjb2RlIGluZGV4IGFuZCBpdCdzIGFsd2F5cyBzYWZlIHRvCi0gICAgICAgICAgICAvLyByZWV4
ZWN1dGUgdGhhdCBieXRlY29kZS4KLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1
bXApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zTW92
SGludCgpICYmIG5vZGUtPmNoaWxkMSgpID09IGN1cnJlbnROb2RlKQotICAgICAgICAgICAgbGFz
dE1vdkhpbnQgPSBub2RlOwotICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJn
ZXQgIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0KQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQo
bm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW5G
b3JFeGl0VGFyZ2V0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDExICs2NCw2IEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3cocHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIGZvcndhcmQgY29udmVyc2lvbiBpcyByZWFsbHkgbmVlZGVkLgotICAgIGJvb2wgZG9T
ZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKLSAgICAgICAgQmFzaWNCbG9jayosIE5vZGUqIGN1
cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKLSAg
ICAgICAgTm9kZSomIG5leHRCQ05vZGUsIE5vZGUqJiBsYXN0TW92SGludCk7CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNCw5ICs1MDQsNiBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXlpZnk6CiAg
ICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKLSAgICAgICAgY2FzZSBNb3ZIaW50Ogot
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50Ogog
ICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgICAgICBjYXNlIENoZWNrVGllclVw
QXRSZXR1cm46CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKQEAgLTU4NSw2
ICs1ODIsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9p
bnQ6CiAgICAgICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ29u
c3RhbnRTdG9yYWdlUG9pbnRlcjoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAv
LyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDggKzE4
Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdmFsdWUg
d2FzIGFscmVhZHkgb24gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwg
Q29kZU9yaWdpbigpLCBPcEluZm8odmFyaWFibGUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
U3BlY05vbmUsIE1vdkhpbnQsIENvZGVPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgRWRnZShub2RlKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CkBAIC0yNjksNyArMjY5LDcgQEAgcHVibGljOgogICAgICAgICAvLyAtIEdl
dExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0
aCByZWZlcmVuY2VzCiAgICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlh
Ymxlc0F0SGVhZC4KICAgICAgICAgLy8gLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUg
aWYgaXQncyBmbHVzaGVkLCBvciB0dXJucyBpbnRvIGEKLSAgICAgICAgLy8gICBNb3ZIaW50IG90
aGVyd2lzZS4KKyAgICAgICAgLy8gICBQaGFudG9tIG90aGVyd2lzZS4KICAgICAgICAgLy8gLSBG
bHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYnV0IHJlbWFpbnMsIGJlY2F1c2Ugd2Ugd2FudCB0byBr
bm93IHdoZW4gYQogICAgICAgICAvLyAgIGZsdXNoZWQgU2V0TG9jYWwncyB2YWx1ZSBpcyBubyBs
b25nZXIgbmVlZGVkLiBUaGlzIGFsc28gbWFrZXMgaXQgc2ltcGxlcgogICAgICAgICAvLyAgIHRv
IHJlYXNvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGEgbG9jYWwsIHNpbmNlIHdlIGNhbiBqdXN0IGRv
IGEgYmFja3dhcmRzCkBAIC0zMDgsNyArMzA4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCBtX2ZsdXNoZWRMb2NhbE9wcy5jb250
YWlucyhub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9k
ZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5taXNjLnJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOyAvLyBP
bmx5IGZvciBVcHNpbG9ucy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDYgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0Q2FsbGVlOgog
ICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICBjYXNlIE1vdkhpbnRB
bmRDaGVjazoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNh
c2UgR2V0QXJndW1lbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MjEsMTEgKzE5MjEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgTW92SGludEFu
ZENoZWNrOiB7Ci0gICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2sobm9kZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9t
YmllSGludDogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTkz
MywxMiArMTkyOCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIC8vIFNldExvY2FsIGRvdWJs
ZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKLSAgICAg
ICAgLy8gYXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3JlIHdlIHNwZWN1bGF0ZSBtYWtl
IHN1cmUgdGhhdCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJlIHRoZSBjaGlsZCBvZiB0aGlzIG5v
ZGUgbmVlZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAgICAgLy8gc3RhY2suCi0gICAgICAg
IGNvbXBpbGVNb3ZIaW50KG5vZGUpOwotICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNlIEZsdXNo
ZWREb3VibGU6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjM2LDExICsyMjM2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92SGlu
dEFuZENoZWNrOiB7Ci0gICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2sobm9kZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2Ug
Wm9tYmllSGludDogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MjI0OCwxMiArMjI0Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIC8vIFNldExvY2FsIGRv
dWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKLSAg
ICAgICAgLy8gYXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3JlIHdlIHNwZWN1bGF0ZSBt
YWtlIHN1cmUgdGhhdCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJlIHRoZSBjaGlsZCBvZiB0aGlz
IG5vZGUgbmVlZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAgICAgLy8gc3RhY2suCi0gICAg
ICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwotICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNlIEZs
dXNoZWREb3VibGU6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMjMwNCw3ICsyMjkzLDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2
YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+bWFjaGluZUxvY2FsKCkp
KTsKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAgICAgCiAgICAgICAgICAg
ICByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkKICAgICAgICAgICAgIHN0
cnVjdHVyZSwgbnVtRWxlbWVudHMpKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3
YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAg
LTExNSw3ICsxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9u
CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1
ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5v
ZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
anVtcHNUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKIHsKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNCwyMiArMTI0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlvbgogICAgIG1faml0LmppdENvZGUoKS0+YXBw
ZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUo
KSkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCkKLXsKLSAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNv
dXJjZSwgbm9kZSwganVtcFRvRmFpbCk7Ci0gICAgaWYgKG1fc3BlY3VsYXRpb25EaXJlY3Rpb24g
PT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0Zvcndh
cmQoKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKLXsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwotfQotCi1PU1JFeGl0SnVt
cFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlKQorT1NS
RXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhv
bGRlcigpOwpAQCAtMTUwLDE5ICsxMzUsMTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVj
dWxhdGl2ZUpJVDo6YgogICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKGluZGV4KTsK
IH0KIAotT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
RWRnZSBub2RlVXNlKQorT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IEVkZ2Ugbm9kZVVzZSkKIHsKICAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8
fCBtX2NhbkV4aXQpOwotICAgIHJldHVybiBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOworICAgIHJldHVybiBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYganVtcHNUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBq
c1ZhbHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFpbCk7Ci0gICAgaWYgKG1fc3BlY3VsYXRpb25E
aXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFzdE9TUkV4
aXRUb0ZvcndhcmQoKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2NhbkV4aXQpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9k
ZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
RWRnZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWls
KQpAQCAtMTcxLDcgKzE1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hl
Y2soRXgKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uu
bm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJk
U3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNw
ZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0
aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTgxLDI0ICsxNjMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFj
a3dhcmRTcGVjdWxhdGlvbgogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgcmVjb3ZlcnlJbmRl
eCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2Us
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zl
cnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYg
cmVjb3ZlcnkpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
YW5FeGl0KTsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJj
ZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKLX0KLQotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQotewotICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVj
ayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7Ci0gICAg
aWYgKG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAg
ICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIEVkZ2UgZWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3Qg
U3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCi17Ci0gICAgc3BlY3VsYXRpb25DaGVjayhr
aW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwor
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCks
IGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdElu
dmFsaWRhdGlvblBvaW50KE5vZGUqIG5vZGUpCkBAIC0yMDYsNyArMTc0LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2NhbkV4aXQpOwotICAgIEFTU0VSVChtX3Nw
ZWN1bGF0aW9uRGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIE9TUkV4aXRD
b21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6
SnVtcExpc3QoKSk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQo
CiAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBKU1ZhbHVlU291cmNlKCksCkBAIC0y
MTcsMjYgKzE4NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kK
ICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCi17
Ci0gICAgbV9qaXQuaml0Q29kZSgpLT5sYXN0T1NSRXhpdCgpLmNvbnZlcnRUb0ZvcndhcmQoCi0g
ICAgICAgIG1fYmxvY2ssIG1fY3VycmVudE5vZGUsIG1faW5kZXhJbkJsb2NrLCB2YWx1ZVJlY292
ZXJ5KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1
ZVJlY292ZXJ5KQotewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y2FuRXhpdCk7Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwotICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2
YWx1ZVJlY292ZXJ5KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2Rl
KiBub2RlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBjb25z
dCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBzVG9GYWlsKTsKLSAgICBjb252ZXJ0
TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CkBAIC0yNTIsMjQgKzE5OSwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3Vy
Y2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNr
KEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFz
c2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKICAgICBBU1NF
UlQobmVlZHNUeXBlQ2hlY2soZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSk7CiAgICAgbV9pbnRl
cnByZXRlci5maWx0ZXIoZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoKTsKLSAgICBiYWNrd2FyZFNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCk7
Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJj
ZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCi17Ci0gICAgYmFja3dhcmRUeXBlQ2hlY2soc291cmNl
LCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOwotICAgIGlmIChtX3NwZWN1
bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAgY29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRU
eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25z
dCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIGJhY2t3YXJkVHlwZUNoZWNr
KHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKLSAgICBjb252
ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CisgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBzb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIAogUmVn
aXN0ZXJTZXQgU3BlY3VsYXRpdmVKSVQ6OnVzZWRSZWdpc3RlcnMoKQpAQCAtMTM4MCwxNCArMTMx
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUKICAgICBOb2Rl
KiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3RpY2VPU1JCaXJ0aChjaGls
ZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZI
aW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT5sb2NhbCgpKSk7Ci19Ci0KLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soTm9kZSogbm9kZSkKLXsKLSAgICBjb21w
aWxlTW92SGludChub2RlKTsKLSAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVF
dmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoKQpAQCAtMTQ4Miw3ICsxNDA5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7
Ci0gICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdERlYWQpOworICAgICAg
ICAgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwg
VmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KIApAQCAtMTUwMSw4ICsxNDI4LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc3BlY3VsYXRpb25E
aXJlY3Rpb24gPSAobV9jdXJyZW50Tm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8g
Rm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIAog
ICAgICAgICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKIAogI2lmIEVOQUJMRShERkdfUkVH
SVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQpAQCAtMTU0MCwxOCArMTQ2NSwxOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiB7CiAgICAgQVNTRVJUKCFtX2N1
cnJlbnROb2RlKTsKICAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzID0gdHJ1ZTsKLSAgICBt
X3NwZWN1bGF0aW9uRGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbjsKICAgICBtX2NvZGVP
cmlnaW5Gb3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdpbigwKTsKICAgICBtX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oMCk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
aml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBu
b2RlID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKLSAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpIHsKKyAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICAvLyBUaGUgYXJndW1lbnQg
aXMgZGVhZC4gV2UgZG9uJ3QgZG8gYW55IGNoZWNrcyBmb3Igc3VjaCBhcmd1bWVudHMuCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSk7CisKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgRmx1c2hGb3JtYXQgZm9y
bWF0ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1hdCgpOwogICAgICAgICAKQEAgLTIx
NjcsMTYgKzIwOTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJs
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAKICAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9k
ZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyKSkgewotICAgICAgICBpZiAobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAgICAgICAgIGZvcndhcmRUeXBlQ2hlY2soCi0g
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNG
dWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLAotICAg
ICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKG9wMUdQUiwgRGF0YUZvcm1hdEpTKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYWNrd2FyZFR5cGVDaGVjaygKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxO
dW1iZXIsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAg
ICB9CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiks
IG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlciwKKyAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9qaXQubW92ZShvcDFHUFIsIHRlbXBH
UFIpOwpAQCAtMjE5OCwxNiArMjExNyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bnQzMlRvRG91YmwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDFUYWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIAogICAgIGlmIChuZWVkc1R5cGVD
aGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIpKSB7Ci0gICAgICAgIGlmIChub2Rl
LT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgewotICAgICAgICAgICAgZm9yd2FyZFR5cGVD
aGVjaygKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRH
UFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCi0gICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxVGFnR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksCi0gICAgICAgICAgICAgICAgVmFsdWVSZWNv
dmVyeTo6aW5QYWlyKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUikpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxs
TnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
KTsKLSAgICAgICAgfQorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1i
ZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAgICAg
fQogICAgIAogICAgIHVuYm94RG91YmxlKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiwgcmVzdWx0
RlBSLCB0ZW1wRlBSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE0Myw0MyArMjE0
MywyOCBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgY29udmVydFRvRG91YmxlKEpT
VmFsdWVPcGVyYW5kJiwgRlBSUmVnIHJlc3VsdCk7CiAjZW5kaWYKICAgICAKLSAgICAvLyBBZGQg
YSBiYWNrd2FyZCBzcGVjdWxhdGlvbiBjaGVjay4KLSAgICB2b2lkIGJhY2t3YXJkU3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwpOwotICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
JiBqdW1wc1RvRmFpbCk7Ci0KLSAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRob3V0
IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCisgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2suCiAg
ICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7Ci0gICAgdm9pZCBzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsKTsKLSAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRob3V0IGFkZGl0
aW9uYWwgcmVjb3ZlcnksIGFuZCB3aXRoIGEgcHJvbWlzZSB0byBzdXBwbHkgYSBqdW1wIGxhdGVy
LgotICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKik7Ci0gICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRl
ciBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2Up
OwotICAgIC8vIEFkZCBhIHNldCBvZiBzcGVjdWxhdGlvbiBjaGVja3Mgd2l0aG91dCBhZGRpdGlv
bmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1
ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0Zh
aWwpOworCisgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRpdGlvbmFs
IHJlY292ZXJ5LCBhbmQgd2l0aCBhIHByb21pc2UgdG8gc3VwcGx5IGEganVtcCBsYXRlci4KKyAg
ICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFs
dWVTb3VyY2UsIE5vZGUqKTsKKyAgICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIHNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1Zh
bHVlU291cmNlLCBFZGdlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9G
YWlsKTsKICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVj
b3ZlcnkuCi0gICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFs
dWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBT
cGVjdWxhdGlvblJlY292ZXJ5Jik7Ci0gICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKKyAgICB2b2lkIHNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CisgICAgdm9pZCBzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CiAgICAgCiAg
ICAgdm9pZCBlbWl0SW52YWxpZGF0aW9uUG9pbnQoTm9kZSopOwogICAgIAotICAgIC8vIEl0IGlz
IGdlbmVyYWxseSBhIGdvb2QgaWRlYSB0byBub3QgdXNlIHRoaXMgZGlyZWN0bHkuCi0gICAgdm9p
ZCBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBWYWx1
ZVJlY292ZXJ5KCkpOwotICAgIAotICAgIC8vIE5vdGU6IG5vdCBzcGVjaWZ5aW5nIHRoZSB2YWx1
ZVJlY292ZXJ5IGFyZ3VtZW50IChsZWF2aW5nIGl0IGFzIFZhbHVlUmVjb3ZlcnkoKSkgaW1wbGll
cwotICAgIC8vIHRoYXQgeW91J3ZlIGVuc3VyZWQgdGhhdCB0aGVyZSBleGlzdHMgYSBNb3ZIaW50
IHByaW9yIHRvIHlvdXIgdXNlIG9mIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKCkuCi0gICAgdm9p
ZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSos
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0g
VmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwot
ICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSos
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zl
cnkmKTsKLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2Us
IEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9u
UmVjb3ZlcnkmKTsKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0
aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlKik7CiAgICAgdm9pZCB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIEVkZ2UpOwog
ICAgIAogICAgIC8vIEhlbHBlcnMgZm9yIHBlcmZvcm1pbmcgdHlwZSBjaGVja3Mgb24gYW4gZWRn
ZSBzdG9yZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdGVycy4KICAgICBib29sIG5lZWRzVHlwZUNoZWNr
KEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKSB7IHJldHVybiBt
X2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCk7IH0K
LSAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCk7CiAgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsK
LSAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CiAKICAgICB2b2lkIHNwZWN1bGF0ZUludDMyKEVkZ2Up
OwogICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUludChFZGdlKTsKQEAgLTIyNTIsNyArMjIzNyw2
IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KICAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5vZGUqIG1fY3VycmVudE5vZGU7Ci0gICAgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gbV9zcGVjdWxhdGlvbkRpcmVjdGlvbjsKICAgICBib29sIG1fY2Fu
RXhpdDsKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICAvLyBWaXJ0dWFsIGFuZCBw
aHlzaWNhbCByZWdpc3RlciBtYXBzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEw
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMzMgKzE2MywyMiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUgJiYgIWl0ZXItPnZh
bHVlLm1fYXJyYXlNb2RlSXNWYWxpZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGluc2VydCBhIGRlYWQgU2V0TG9jYWwgdG8g
dGVsbCBPU1IgdGhhdCB0aGUgY2hpbGQncyB2YWx1ZSBzaG91bGQKLSAgICAgICAgICAgICAgICAg
ICAgLy8gYmUgZHJvcHBlZCBpbnRvIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgaWYgdGhlIENoZWNr
U3RydWN0dXJlIGRlY2lkZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gZXhpdC4KLSAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0g
bm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUp
LCBjaGlsZDEpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBOb2RlRXhpdHNGb3J3YXJk
IHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhlIG5leHQKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVjdXRpbmcg
dGhlIGN1cnJlbnQgb25lLgotICAgICAgICAgICAgICAgICAgICBOb2RlKiBuZXdOb2RlID0gMDsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENlbGxVc2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVyLT52YWx1ZS5tX2FycmF5TW9kZUlzVmFsaWQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5tX2FycmF5TW9kZUhv
aXN0aW5nT2theSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBDaGVja0FycmF5LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhpdGVyLT52YWx1ZS5tX2FycmF5TW9kZS5hc1dvcmQoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZS0+bWVyZ2VGbGFncyhO
b2RlRXhpdHNGb3J3YXJkKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTIyOCw5ICsy
MTcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAgICAgICAgICAv
LyBXZSBjdXJyZW50bHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdlJ3JlIHRoZSBvbmx5IG9uZXMg
d2hvIHdvdWxkCi0gICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCB0aGVzZSBub2RlcyB3aXRo
IE5vZGVFeGl0c0ZvcndhcmQuCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpKTsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzI5LDkgKzMxNSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewotICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdlJ3Jl
IHRoZSBvbmx5IG9uZXMgd2hvIHdvdWxkCi0gICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCB0
aGVzZSBub2RlcyB3aXRoIE5vZGVFeGl0c0ZvcndhcmQuCi0gICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpKTsKICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTAgKzI0NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCiAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaQotICAgICAgICAgICAgICAgICAgICAgICAg
fHwgZWRnZS0+b3AoKSA9PSBab21iaWVIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCBl
ZGdlLT5vcCgpID09IE1vdkhpbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9w
KCkgPT0gTW92SGludEFuZENoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2Ut
Pm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsOSArMjU0LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChub2RlLCBlZGdlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09
IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBa
b21iaWVIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBN
b3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBNb3ZI
aW50QW5kQ2hlY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09
IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9
PSBGbHVzaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI5Miw5ICsyODYsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBNb3ZIaW50
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gTW92SGlu
dEFuZENoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkg
PT0gWm9tYmllSGludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5v
ZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSA9
PSBlZGdlLm5vZGUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTIsNzAgKzE5Miw4IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVj
b25zdHJ1Y3QoCiAgICAgICAgIAogICAgICAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvIGluZm8g
PSBnZW5lcmF0aW9uSW5mb3MuZ2V0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgaWYgKGluZm8uZm9y
bWF0ID09IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRo
ZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ug
d2FudC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBCYWNrd2FyZCByZXdpcmluZyBy
ZWZlcnMgdG86Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgIGE6IFNvbWV0aGlu
ZyguLi4pCi0gICAgICAgICAgICAvLyAgICAgYjogSWQoQGEpIC8vIHNvbWUgaWRlbnRpdHkgZnVu
Y3Rpb24KLSAgICAgICAgICAgIC8vICAgICBjOiBTZXRMb2NhbChAYikKLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAvLyBXaGVyZSB3ZSBmaW5kIEBiIGJlaW5nIGRlYWQsIGJ1dCBAYSBpcyBz
dGlsbCBhbGl2ZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHJld2ly
aW5nIHJlZmVycyB0bzoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICAgYTogU29t
ZXRoaW5nKC4uLikKLSAgICAgICAgICAgIC8vICAgICBiOiBTZXRMb2NhbChAYSkKLSAgICAgICAg
ICAgIC8vICAgICBjOiBJZChAYSkgLy8gc29tZSBpZGVudGl0eSBmdW5jdGlvbgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFdoZXJlIHdlIGZpbmQgQGEgYmVpbmcgZGVhZCwgYnV0IEBi
IGlzIHN0aWxsIGFsaXZlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlICYmIHBlcm1pdHNPU1JC
YWNrd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7Ci0gICAgICAgICAgICAgICAgTWluaWZpZWRJ
RCBpZCA9IG5vZGUtPmNoaWxkMSgpOwotICAgICAgICAgICAgICAgIGlmICh0cnlUb1NldENvbnN0
YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBjb2RlQmxvY2ssIGdyYXBoLmF0KGlkKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGluZm8gPSBn
ZW5lcmF0aW9uSW5mb3MuZ2V0KGlkKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby5mb3JtYXQg
IT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFmb3VuZCkgewotICAg
ICAgICAgICAgICAgIE1pbmlmaWVkSUQgYmVzdElEOwotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJlc3RTY29yZSA9IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgSGFzaE1h
cDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZvPjo6aXRlcmF0b3IgaXRlciA9IGdl
bmVyYXRpb25JbmZvcy5iZWdpbigpOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8TWluaWZpZWRJ
RCwgTWluaWZpZWRHZW5lcmF0aW9uSW5mbz46Oml0ZXJhdG9yIGVuZCA9IGdlbmVyYXRpb25JbmZv
cy5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICAgICAgICAgICAgICBNaW5pZmllZElEIGlkID0gaXRlci0+a2V5OwotICAgICAgICAg
ICAgICAgICAgICBub2RlID0gZ3JhcGguYXQoaWQpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5oYXNDaGlsZDEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gc291cmNl
LmlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZXItPnZhbHVlLmZvcm1hdCA9PSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBt
eVNjb3JlID0gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUobm9kZS0+b3AoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChteVNjb3JlIDw9IGJlc3RTY29yZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBiZXN0SUQgPSBpZDsKLSAg
ICAgICAgICAgICAgICAgICAgYmVzdFNjb3JlID0gbXlTY29yZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCEhYmVzdElEKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGluZm8gPSBnZW5lcmF0aW9uSW5mb3MuZ2V0KGJlc3RJRCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAg
ICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChq
c1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEFTU0VSVChpbmZvLmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220033</attachid>
            <date>2013-12-26 09:39:00 -0800</date>
            <delta_ts>2013-12-28 06:33:32 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>90974</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMDg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBA
QAorMjAxMy0xMi0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgREZHIGZvcndhcmQgZXhpdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpbmFsbHkgZ2V0cyByaWQgb2Yg
Zm9yd2FyZCBleGl0aW5nLiBGb3J3YXJkIGV4aXRpbmcgd2FzIGFsd2F5cyBhIGZyYWdpbGUgY29u
Y2VwdAorICAgICAgICBzaW5jZSBpdCBpbnZvbHZlZCB0aGUgY29tcGlsZXIgdHJ5aW5nIHRvIGZp
Z3VyZSBvdXQgaG93IHRvICJyb2xsIGZvcndhcmQiIHRoZQorICAgICAgICBleGVjdXRpb24gZnJv
bSBzb21lIERGRyBub2RlIHRvIHRoZSBuZXh0IGJ5dGVjb2RlIGluZGV4LiBJdCB3YXMgYWx3YXlz
IGVhc3kgdG8gZmluZAorICAgICAgICBjb3VudGVyZXhhbXBsZXMgd2hlcmUgaXQgYnJva2UsIGFu
ZCBpdCBoYXMgYWx3YXlzIHNlcnZlZCBhcyBhbiBvYnN0YWNsZSB0byBhZGRpbmcKKyAgICAgICAg
Y29tcGlsZXIgaW1wcm92ZW1lbnRzIC0gdGhlIGxhdGVzdCBiZWluZyBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEyNTUyMywgd2hpY2ggdHJpZWQgdG8KKyAgICAgICAgbWFrZSBEQ0Ugd29yayBmb3IgbW9y
ZSB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBmaW5pc2hlcyB0aGUgd29y
ayBvZiByZW1vdmluZyBmb3J3YXJkIGV4aXRpbmcuIEEgbG90IG9mIGZvcndhcmQgZXhpdGluZwor
ICAgICAgICB3YXMgYWxyZWFkeSByZW1vdmVkIGluIHNvbWUgb3RoZXIgYnVncywgYnV0IFNldExv
Y2FsIHN0aWxsIGRpZCBmb3J3YXJkIGV4aXRzLiBTZXRMb2NhbAorICAgICAgICBpcyBpbiBtYW55
IHdheXMgdGhlIGhhcmRlc3QgdG8gcmVtb3ZlLCBzaW5jZSB0aGUgZm9yd2FyZCBleGl0aW5nIG9m
IFNldExvY2FsIGFsc28KKyAgICAgICAgaW1wbGllZCB0aGF0IGFueSBjb252ZXJzaW9uIG5vZGVz
IGluc2VydGVkIGJlZm9yZSB0aGUgU2V0TG9jYWwgd291bGQgdGhlbiBhbHNvIGJlCisgICAgICAg
IG1hcmtlZCBhcyBmb3J3YXJkLWV4aXRpbmcuIEhlbmNlIFNldExvY2FsJ3MgZm9yd2FyZC1leGl0
aW5nIG1hZGUgYSBidW5jaCBvZiBvdGhlcgorICAgICAgICB0aGluZ3MgYWxzbyBmb3J3YXJkLWV4
aXRpbmcsIGFuZCB0aGlzIHdhcyBhbHdheXMgYSBzb3VyY2Ugb2Ygd2VpcmRvIGJ1Z3MuCisgICAg
ICAgIAorICAgICAgICBTZXRMb2NhbCBtdXN0IGJlIGFibGUgdG8gZXhpdCBpbiBjYXNlIGl0IHBl
cmZvcm1zIGEgaG9pc3RlZCB0eXBlIHNwZWN1bGF0aW9uLiBOb2RlcworICAgICAgICBpbnNlcnRl
ZCBqdXN0IGJlZm9yZSBTZXRMb2NhbCBtdXN0IGFsc28gYmUgYWJsZSB0byBleGl0IC0gZm9yIGV4
YW1wbGUgdHlwZSBjaGVjaworICAgICAgICBob2lzdGluZyBtYXkgaW5zZXJ0IGEgQ2hlY2tTdHJ1
Y3R1cmUsIG9yIGZpeHVwIHBoYXNlIG1heSBpbnNlcnQgc29tZXRoaW5nIGxpa2UKKyAgICAgICAg
SW50MzJUb0RvdWJsZS4gQnV0IGlmIGFueSBvZiB0aG9zZSBub2RlcyB0cmllZCB0byBiYWNrd2Fy
ZCBleGl0LCB0aGVuIHRoaXMgY291bGQgbGVhZAorICAgICAgICB0byB0aGUgcmVleGVjdXRpb24g
b2YgYSBzaWRlLWVmZmVjdGluZyBvcGVyYXRpb24sIGZvciBleGFtcGxlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGE6IENhbGwoLi4uKQorICAgICAgICAgICAgYjogU2V0TG9jYWwoQGEsIHIxKQor
ICAgICAgICAKKyAgICAgICAgRm9yIGEgbG9uZyB0aW1lIGl0IHNlZW1lZCBsaWtlIFNldExvY2Fs
ICpoYWQqIHRvIGV4aXQgZm9yd2FyZCBiZWNhdXNlIG9mIHRoaXMuIEJ1dAorICAgICAgICB0aGlz
IGNoYW5nZSBzaWRlLXN0ZXBzIHRoZSBwcm9ibGVtIGJ5IGNoYW5naW5nIHRoZSBCeXRlQ29kZVBh
cnNlciB0byBhbHdheXMgZW1pdCBhCisgICAgICAgIGtpbmQgb2YgInR3by1waGFzZSBjb21taXQi
IGZvciBzdG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzLiBOb3cgd2hlbiB0aGUgQnl0ZUNvZGVQYXJz
ZXIKKyAgICAgICAgd2lzaGVzIHRvIHN0b3JlIHRvIGEgbG9jYWwsIGl0IGZpcnN0IGVtaXRzIGEg
TW92SGludCBhbmQgdGhlbiBlbnF1ZXVlcyBhIFNldExvY2FsLgorICAgICAgICBUaGUgU2V0TG9j
YWwgaXNuJ3QgYWN0dWFsbHkgZW1pdHRlZCB1bnRpbCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0
IGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9uICh3aGljaCB0aGUgZXhjZXB0aW9uIG9mIG9w
X2VudGVyIGFuZCBvcF9yZXQsIHdoaWNoIGVtaXQgdGhlaXJzIGltbWVkaWF0ZWx5CisgICAgICAg
IHNpbmNlIGl0J3MgYWx3YXlzIHNhZmUgdG8gcmVleGVjdXRlIHRob3NlIGJ5dGVjb2RlIGluc3Ry
dWN0aW9ucyBhbmQgc2luY2UgZGVmZXJyaW5nCisgICAgICAgIFNldExvY2FscyB3b3VsZCBiZSB3
ZWlyZCB0aGVyZSAtIG9wX2VudGVyIGhhcyBtYW55IFNldExvY2FscyBhbmQgb3BfcmV0IGlzIGEg
c2V0CisgICAgICAgIGZvbGxvd2VkIGJ5IGEganVtcCBpbiBjYXNlIG9mIGlubGluaW5nLCBzbyB3
ZSdkIGhhdmUgdG8gZW1pdCB0aGUgU2V0TG9jYWwgImFmdGVyIiB0aGUKKyAgICAgICAganVtcCBh
bmQgdGhhdCB3b3VsZCBiZSBhd2t3YXJkKS4gVGhpcyBtZWFucyB0aGF0IHRoZSBhYm92ZSBJUiBz
bmlwcGV0IHdvdWxkIGxvb2sKKyAgICAgICAgc29tZXRoaW5nIGxpa2U6CisgICAgICAgIAorICAg
ICAgICAgICAgYTogQ2FsbCguLi4sIGJjIzQyKQorICAgICAgICAgICAgYjogTW92SGludChAYSwg
cjEsIGJjIzQyKQorICAgICAgICAgICAgYzogU2V0TG9jYWwoQGEsIHIxLCBiYyM0NykKKyAgICAg
ICAgCisgICAgICAgIFdoZXJlIHRoZSBTZXRMb2NhbCBleGl0cyAiYmFja3dhcmRzIiBidXQgYXBw
ZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGJ5dGVjb2RlCisgICAgICAgIGluc3Ry
dWN0aW9uLiBUaGlzIG1lYW5zIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoYXQgU2V0TG9j
YWwsIHRoZSBPU1IgZXhpdAorICAgICAgICBhbmFseXNpcyBhbHJlYWR5IGtub3dzIHRoYXQgcjEg
aXMgYXNzb2NpYXRlZCB3aXRoIEBhLCBhbmQgaXQgbWVhbnMgdGhhdCB0aGUgU2V0TG9jYWwKKyAg
ICAgICAgb3IgYW55dGhpbmcgaG9pc3RlZCBhYm92ZSBpdCBjYW4gZXhpdCBiYWNrd2FyZHMgYXMg
bm9ybWFsLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBtZWFucyB0aGF0IHRo
ZSAiZm9yd2FyZCByZXdpcmluZyIgY2FuIGJlIGtpbGxlZC4gUHJldmlvdXNseSwgd2UgbWlnaHQK
KyAgICAgICAgaGF2ZSBpbnNlcnRlZCBhIGNvbnZlcnNpb24gbm9kZSBvbiBTZXRMb2NhbCBhbmQg
dGhlbiB0aGUgU2V0TG9jYWwgZGllZCAoaS5lLiB0dXJuZWQKKyAgICAgICAgaW50byBhIE1vdkhp
bnQpIGFuZCB0aGUgY29udmVyc2lvbiBub2RlIGVpdGhlciBkaWVkIGNvbXBsZXRlbHkgb3IgaGFk
IGl0cyBsaWZldGltZQorICAgICAgICB0cnVuY2F0ZWQgdG8gYmUgbGVzcyB0aGFuIHRoZSBhY3R1
YWwgdmFsdWUncyBieXRlY29kZSBsaWZldGltZS4gVGhpcyBubyBsb25nZXIgaGFwcGVucworICAg
ICAgICBzaW5jZSBjb252ZXJzaW9uIG5vZGVzIGFyZSBvbmx5IGluc2VydGVkIGF0IFNldExvY2Fs
cy4KKyAgICAgICAgCisgICAgICAgIE1vcmUgcHJlY2lzZWx5LCB0aGlzIGNoYW5nZSBpbnRyb2R1
Y2VzIHR3byBsYXdzIHRoYXQgd2Ugd2VyZSBiYXNpY2FsbHkgYWxyZWFkeQorICAgICAgICBmb2xs
b3dpbmcgYW55d2F5OgorICAgICAgICAKKyAgICAgICAgMSkgQSBNb3ZIaW50J3MgY2hpbGQgc2hv
dWxkIG5ldmVyIGJlIGNoYW5nZWQgZXhjZXB0IGlmIGFsbCBvdGhlciB1c2VzIG9mIHRoYXQgY2hp
bGQKKyAgICAgICAgICAgYXJlIGFsc28gcmVwbGFjZWQuIFNwZWNpZmljYWxseSwgdGhpcyBwcm9o
aWJpdHMgaW5zZXJ0aW9uIG9mIGNvbnZlcnNpb24gbm9kZXMgYXQKKyAgICAgICAgICAgTW92SGlu
dHMuCisgICAgICAgIAorICAgICAgICAyKSBBbnl0aW1lIGFueSBjaGlsZCBpcyByZXBsYWNlZCB3
aXRoIHNvbWV0aGluZyBlbHNlLCBhbmQgYWxsIG90aGVyIHVzZXMgYXJlbid0IGFsc28KKyAgICAg
ICAgICAgcmVwbGFjZWQsIHdlIG11c3QgaW5zZXJ0IGEgUGhhbnRvbSB1c2Ugb2YgdGhlIG9yaWdp
bmFsIGNoaWxkLgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3I6OkFycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldERpcmVjdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6RGVsYXll
ZFNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6RGVsYXllZFNl
dExvY2FsOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6
OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OkRDRVBoYXNlOjpmaXh1cEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6
Y2xlYW5WYXJpYWJsZXMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmZpeEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6Omlu
amVjdEludDMyVG9Eb3VibGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTElDTVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6
TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUpOgorICAgICAg
ICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpiZWxvbmdzSW5N
aW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmNvbnN0YW50
TnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6
CisgICAgICAgICogZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3NVbmNoZWNrZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnRhaW5zTW92SGludCk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzVW5saW5rZWRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
d2lsbEhhdmVDb2RlR2VuT3JPU1IpOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmR1bXBOb2RlRmxhZ3MpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
RmxhZ3MuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50
cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAg
KiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZl
cnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0SW52YWxp
ZGF0aW9uUG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0eXBlQ2hl
Y2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJs
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om5lZWRzVHlwZUNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVj
a0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlND
OjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVj
a3MpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsaWRhdGU6OnZhbGlkYXRlQ1BTKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25z
dHJ1Y3QpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6dHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6YXBwZW5kVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmVt
aXRPU1JFeGl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAq
IGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2RlYWQtaW50MzItdG8t
ZG91YmxlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2RlYWQtdWludDMyLXRvLW51bWJlci5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDEz
LTEyLTI1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTYxMDMzIGFuZCByMTYxMDc0LgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTUsMTAgKzE5NSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBNb3ZIaW50OgotICAg
IGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcuIEEgTW92SGludCBpcyBlZmZlY3RpdmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9j
YWwKLSAgICAgICAgLy8gd2FzIGRlYWQuCisgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgIC8v
IERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEgTW92SGludCBvbmx5IGluZm9ybXMgdXMgYWJv
dXQgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkCisgICAgICAgIC8vIGluIGJ5dGVjb2RlLCBidXQg
dGhpcyBjb2RlIGlzIGp1c3QgY29uY2VybmVkIHdpdGggd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5p
bmcgZHVyaW5nCisgICAgICAgIC8vIERGRyBleGVjdXRpb24uCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5
U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMTYxMDcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDEzICs2MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAgICAgICAgICAgbV9iYWRQcm9w
ZXJ0eUp1bXAgPSBqaXQtPmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCk7CisgICAgICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQt
PnNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtX2JhZEluZGV4aW5nVHlw
ZUp1bXAgPSBqaXQtPmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhCYWRJbmRleGluZ1R5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG1fYmFzZUdQUiksIDApOworICAgICAgICBtX2JhZElu
ZGV4aW5nVHlwZUp1bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChtX2Jhc2VHUFIpLCAwKTsKICAgICB9CiAgICAgCiBw
cm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1By
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE1vdkhpbnQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJpdEFuZDoK
ICAgICAgICAgY2FzZSBCaXRPcjoKICAgICAgICAgY2FzZSBCaXRYb3I6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiwxNSArMjMyLDE5IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQp
KTsKICAgICB9CiAgICAgCi0gICAgZW51bSBTZXRNb2RlIHsgTm9ybWFsU2V0LCBTZXRPbkVudHJ5
IH07CisgICAgZW51bSBTZXRNb2RlIHsgTm9ybWFsU2V0LCBJbW1lZGlhdGVTZXQgfTsKICAgICBO
b2RlKiBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRN
b2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAgICAvLyBJcyB0aGlzIGFuIGFy
Z3VtZW50PwotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2V0QXJndW1lbnQob3BlcmFuZCwgdmFsdWUsIHNldE1vZGUpOwotCi0gICAgICAgIC8v
IE11c3QgYmUgYSBsb2NhbC4KLSAgICAgICAgcmV0dXJuIHNldExvY2FsKG9wZXJhbmQsIHZhbHVl
LCBzZXRNb2RlKTsKKyAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5v
ZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIERlbGF5ZWRTZXRMb2NhbCBkZWxh
eWVkID0gRGVsYXllZFNldExvY2FsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzZXRNb2RlID09IE5vcm1hbFNldCkgeworICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVl
LmFwcGVuZChkZWxheWVkKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gZGVsYXllZC5leGVjdXRlKHRoaXMsIHNldE1vZGUpOwogICAg
IH0KIAogICAgIE5vZGUqIHNldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUs
IFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKQEAgLTExMjEsNiArMTEyNSwyNyBAQCBwcml2
YXRlOgogICAgIH07CiAgICAgCiAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9pbmxpbmVTdGFja1Rv
cDsKKyAgICAKKyAgICBzdHJ1Y3QgRGVsYXllZFNldExvY2FsIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG1fb3BlcmFuZDsKKyAgICAgICAgTm9kZSogbV92YWx1ZTsKKyAgICAgICAgCisgICAg
ICAgIERlbGF5ZWRTZXRMb2NhbCgpIHsgfQorICAgICAgICBEZWxheWVkU2V0TG9jYWwoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlKQorICAgICAgICAgICAgOiBtX29wZXJhbmQo
b3BlcmFuZCkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBleGVjdXRlKEJ5dGVDb2RlUGFyc2VyKiBwYXJz
ZXIsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ci0+c2V0QXJndW1lbnQobV9vcGVyYW5kLCBtX3ZhbHVlLCBzZXRNb2RlKTsKKyAgICAgICAgICAg
IHJldHVybiBwYXJzZXItPnNldExvY2FsKG1fb3BlcmFuZCwgbV92YWx1ZSwgc2V0TW9kZSk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIAorICAgIFZlY3RvcjxEZWxheWVkU2V0TG9jYWwsIDI+IG1f
c2V0TG9jYWxRdWV1ZTsKIAogICAgIC8vIEhhdmUgd2UgYnVpbHQgb3BlcmFuZCBtYXBzPyBXZSBp
bml0aWFsaXplIHRoZW0gbGF6aWx5LCBhbmQgb25seSB3aGVuIGRvaW5nCiAgICAgLy8gaW5saW5p
bmcuCkBAIC0xMzI1LDkgKzEzNTAsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZyhOb2RlCiAgICAgICAgID09IGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSk7CiAg
ICAgaWYgKGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgewogICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlhYmxlID0KLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSwgY2FsbFRhcmdldE5vZGUpLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSwg
Y2FsbFRhcmdldE5vZGUsIEltbWVkaWF0ZVNldCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHNjb3BlVmFyaWFibGUgPQotICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpTY29wZUNoYWluKSwgYWRkVG9HcmFwaChHZXRTY29w
ZSwgY2FsbFRhcmdldE5vZGUpKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OlNjb3BlQ2hhaW4pLCBhZGRUb0dyYXBoKEdldFNj
b3BlLCBjYWxsVGFyZ2V0Tm9kZSksIEltbWVkaWF0ZVNldCktPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAKICAgICAgICAgY2FsbGVlVmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJv
eCh0cnVlKTsKICAgICAgICAgc2NvcGVWYXJpYWJsZS0+bWVyZ2VTaG91bGROZXZlclVuYm94KHRy
dWUpOwpAQCAtMTg3Miw2ICsxODk3LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICB9CiAKICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAgICAgIG1fc2V0TG9jYWxR
dWV1ZS5yZXNpemUoMCk7CisgICAgICAgIAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBq
dW1wIGRlc3RpbmF0aW9ucy4KICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IGxpbWl0KSB7
CiAgICAgICAgICAgICAvLyBPcmRpbmFyaWx5IHdlIHdhbnQgdG8gcGxhbnQgYSBqdW1wLiBCdXQg
cmVmdXNlIHRvIGRvIHRoaXMgaWYgdGhlIGJsb2NrIGlzCkBAIC0xOTAzLDcgKzE5MzIsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3Bf
ZW50ZXI6CiAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGFsbCBsb2NhbHMgdG8gdW5kZWZpbmVk
LgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCi0gICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpLCBjb25zdGFudFVuZGVmaW5lZCgpLCBTZXRPbkVudHJ5KTsKKyAgICAg
ICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGNvbnN0YW50VW5kZWZp
bmVkKCksIEltbWVkaWF0ZVNldCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKQEAgLTI5MDgsNyAr
MjkzNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgIGZsdXNoQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKTsKICAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGlu
ZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICAgICAgc2V0
RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgICAgICBz
ZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSksIEltbWVkaWF0ZVNldCk7CiAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJvbSB0
aGUgZmlyc3QgYmxvY2ssIHRoZW4gd2UncmUgZG9uZSBwYXJzaW5nLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNyArMTMxLDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21i
aWVIaW50OgogICAgIGNhc2UgVXBzaWxvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4Miw2IEBAIGVudW0gUmVm
Q291bnRTdGF0ZSB7CiAKIGVudW0gT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSB7IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIH07CiAKLWVudW0gU3Bl
Y3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3BlY3VsYXRpb24sIEJhY2t3YXJkU3BlY3VsYXRp
b24gfTsKLQogZW51bSBQcm9vZlN0YXR1cyB7IE5lZWRzQ2hlY2ssIElzUHJvdmVkIH07CiAKIGlu
bGluZSBib29sIGlzUHJvdmVkKFByb29mU3RhdHVzIHByb29mU3RhdHVzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTIgKzExMCw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRl
eEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4K
ICAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxk
cmVuOwogICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5yZW1vdmVFZGdlKDApOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoISFjaGlsZHJlbi5jaGlsZDEoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSBwaGFudG9tKFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGNoaWxkcmVu
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUV4aXRz
Rm9yd2FyZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFudG9tLm1lcmdlRmxhZ3Mo
Tm9kZUV4aXRzRm9yd2FyZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIHBoYW50b20pOwotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxkcmVuLmNoaWxkMSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBjaGlsZHJlbik7
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdlKCkpOwog
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQoc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENF
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENF
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDggKzExMywxMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkZXB0aEZpcnN0LnNpemUoKTsgaS0t
OykKICAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGRlcHRoRmlyc3RbaV0pOwogICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhy
ZWFkZWRDUFMpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpCiAgICAgICAgICAgICAgICAgZml4dXBCbG9jayhtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2xlYW5WYXJpYWJsZXMobV9ncmFwaC5tX2Fy
Z3VtZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9yZWZDb3Vu
dFN0YXRlID0gRXhhY3RSZWZDb3VudDsKQEAgLTE1Miw2ICsxNTYsMzYgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgU1NBOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUaHJlYWRlZENQUzog
eworICAgICAgICAgICAgLy8gQ2xlYW4gdXAgdmFyaWFibGUgbGlua3MgZm9yIHRoZSBibG9jay4g
V2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSB0aGUgYWN0dWFsIERDRQorICAgICAgICAgICAgLy8g
YmVjYXVzZSB3ZSBuZWVkIHRvIHNlZSBHZXRMb2NhbHMsIHNvIHdlIGNhbiBieXBhc3MgdGhlbSBp
biBzaXR1YXRpb25zIHdoZXJlIHRoZQorICAgICAgICAgICAgLy8gdmFycy1hdC10YWlsIHBvaW50
IHRvIGEgR2V0TG9jYWwsIHRoZSBHZXRMb2NhbCBpcyBkZWFkLCBidXQgdGhlIFBoaSBpdCBwb2lu
dHMKKyAgICAgICAgICAgIC8vIHRvIGlzIGFsaXZlLgorICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gMDsgcGhpSW5kZXggPCBibG9jay0+cGhpcy5zaXpl
KCk7ICsrcGhpSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5waGlzW3BoaUlu
ZGV4XS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2UgY291bGQgYWN0dWFsbHkgZnJlZSBub2RlcyBoZXJlLiBFeGNlcHQgdGhhdCBpdCBwcm9iYWJs
eQorICAgICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciwgc2luY2Ugd2UgZG9uJ3Qg
YWRkIGFueSBub2RlcyBhZnRlciB0aGlzIHBoYXNlLgorICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MjM5CisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4LS1dID0gYmxvY2stPnBoaXMubGFzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBibG9jay0+cGhpcy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjbGVhblZh
cmlhYmxlcyhibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIGNsZWFuVmFyaWFi
bGVzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJ
bkJsb2NrLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7CkBAIC0xNTksMzcgKzE5MywyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50
OiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKChub2RlLT5vcCgpID09IFNldExvY2FsKSA9PSAo
bV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkud2lsbE5vdEhhdmVDaGVjaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IENvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0
IGl0cwotICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBz
aG91bGQgTW92SGludCB0aGUgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHBl
cm1pdHNPU1JCYWNrd2FyZFJld2lyaW5nKG5vZGUtPmNoaWxkMSgpLT5vcCgpKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgp
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVy
YXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFpvbWJpZUhpbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkg
PSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhN
b3ZIaW50KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoWm9tYmllSGludCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
ID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludEFuZENo
ZWNrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAg
ICAgICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0ZS4KLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgICAgICAgICAgLy8gQ3VycmVu
dGx5IHdlIGFzc3VtZSB0aGF0IERDRSBydW5zIG9ubHkgb25jZS4KKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDog
ewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJl
bigpOyBjaGlsZElkeCsrKSB7CkBAIC0yMjgsNiArMjQ4LDI3IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFyaWFibGVzVmVjdG9yVHlw
ZT4KKyAgICB2b2lkIGNsZWFuVmFyaWFibGVzKFZhcmlhYmxlc1ZlY3RvclR5cGUmIHZhcmlhYmxl
cykKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhcmlhYmxlcy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSB2YXJpYWJsZXNbaV07CisgICAgICAgICAg
ICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSAhPSBQaGFudG9tICYmIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkgeworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZXNbaV0gPSBub2RlOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJpYWJsZXNbaV0gPSAwOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX3dvcmtsaXN0Owog
ICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwNyw5ICs5MDcsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAg
ICAgIGNhc2UgTGFzdE5vZGVUeXBlOgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgIGNh
c2UgTW92SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNh
c2UgQ2hlY2tUaWVyVXBJbkxvb3A6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoK
ICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgpAQCAtOTUxLDcgKzk0OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgb2JzZXJ2ZVVzZUtpbmRPbk5vZGU8U3RyaW5nVXNl
Pihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotCisgICAgICAgICAg
ICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2Fz
ZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9y
IG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgpAQCAtMTAwNSw2ICsxMDAy
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgog
ICAgICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgVHlw
ZWRBcnJheVdhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBa
b21iaWVIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgpA
QCAtMTAxMiw3ICsxMDExLDggQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBvYnNlcnZl
VW50eXBlZEVkZ2UpOworICAgICAgICBpZiAoIW5vZGUtPmNvbnRhaW5zTW92SGludCgpKQorICAg
ICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgb2JzZXJ2ZVVu
dHlwZWRFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBvYnNlcnZlVW50eXBlZEVkZ2UoTm9k
ZSosIEVkZ2UmIGVkZ2UpCkBAIC0xNDc4LDcgKzE0NzgsNyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgaWYgKGlzRG91YmxlKHVzZUtpbmQpKSB7CiAgICAgICAgICAgICBpZiAoZWRnZS0+c2hv
dWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1ldGljKCkpIHsKLSAgICAgICAgICAgICAgICBpbmpl
Y3RJbnQzMlRvRG91YmxlTm9kZShlZGdlLCB1c2VLaW5kLCBtX2N1cnJlbnROb2RlLT5zcGVjdWxh
dGlvbkRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9k
ZShlZGdlLCB1c2VLaW5kKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTE0OTEsNyArMTQ5MSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91YmxlLCBJbnQ1MlRvRG91
YmxlLAogICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBFZGdl
KGVkZ2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQtPnNldFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKG1fY3VycmVudE5vZGUtPnNwZWN1bGF0aW9uRGlyZWN0aW9uKCkp
OwogICAgICAgICAgICAgICAgIGVkZ2UgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTU0NSw3ICsxNTQ0LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MiwgSW50NTJUb1Zh
bHVlLAogICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRn
ZS5ub2RlKCksIFVudHlwZWRVc2UpKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3BlY3VsYXRp
b25EaXJlY3Rpb24obV9jdXJyZW50Tm9kZS0+c3BlY3VsYXRpb25EaXJlY3Rpb24oKSk7CiAgICAg
ICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0xNTg3LDEzICsxNTg1LDExIEBAIHByaXZhdGU6CiAgICAgICAgIGVk
Z2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVO
b2RlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lkIGluamVj
dEludDMyVG9Eb3VibGVOb2RlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVz
ZSkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUsIEludDMy
VG9Eb3VibGUsCiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBFZGdlKGVk
Z2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJk
U3BlY3VsYXRpb24pCi0gICAgICAgICAgICByZXN1bHQtPm1lcmdlRmxhZ3MoTm9kZUV4aXRzRm9y
d2FyZCk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJ
KHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gICB0aW1lIGFuZCBwcmVzZXJ2ZSBzb21lIGtpbmQgb2Ygc2FuaXR5LCBpZiB3ZSBob2lz
dCBzb21ldGhpbmcgdGhhdCBtdXN0IGV4aXQuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEFsc28s
IHdlIG5lZWQgdG8gcmVtZW1iZXIgdG86Ci0gICAgICAgIC8vIC0gQ2xlYXIgTm9kZUV4aXRzRm9y
d2FyZCBmb3IgYW55IG5vZGVzIHdlIGhvaXN0ZWQuCiAgICAgICAgIC8vIC0gVXBkYXRlIHRoZSBz
dGF0ZS1hdC10YWlsIHdpdGggdGhlIG5vZGUgd2UgaG9pc3RlZCwgc28gZnV0dXJlIGhvaXN0IGNh
bmRpZGF0ZXMKICAgICAgICAgLy8gICBrbm93IGFib3V0IGFueSB0eXBlIGNoZWNrcyB3ZSBob2lz
dGVkLgogICAgICAgICAvLwpAQCAtMjMwLDggKzIyOSw2IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0QmVmb3JlTGFzdChub2RlKTsKICAgICAgICAg
bm9kZS0+bWlzYy5vd25lciA9IGRhdGEucHJlSGVhZGVyOwotICAgICAgICBOb2RlRmxhZ3MgZGlk
RXhpdEZvcndhcmQgPSBub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZDsKLSAgICAgICAg
bm9kZS0+Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKICAgICAgICAgbm9kZS0+Y29kZU9y
aWdpbkZvckV4aXRUYXJnZXQgPSBkYXRhLnByZUhlYWRlci0+bGFzdCgpLT5jb2RlT3JpZ2luRm9y
RXhpdFRhcmdldDsKICAgICAgICAgCiAgICAgICAgIC8vIE1vZGlmeSB0aGUgc3RhdGVzIGF0IHRo
ZSBlbmQgb2YgdGhlIHByZUhlYWRlciBvZiB0aGUgbG9vcCB3ZSBob2lzdGVkIHRvLApAQCAtMjU2
LDcgKzI1Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIAogICAgICAgICBub2RlUmVmID0gbV9n
cmFwaC5hZGROb2RlKFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5j
aGlsZHJlbik7Ci0gICAgICAgIG5vZGVSZWYtPm1lcmdlRmxhZ3MoZGlkRXhpdEZvcndhcmQpOwog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkocmV2aXNpb24gMTYxMDcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCwxNSArMzgsMTMgQEAgTWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6ZnJv
bU5vZGUoTm9kZQogICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CiAgICAgcmVzdWx0Lm1faWQgPSBN
aW5pZmllZElEKG5vZGUpOwogICAgIHJlc3VsdC5tX29wID0gbm9kZS0+b3AoKTsKLSAgICBpZiAo
aGFzQ2hpbGQobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gTWlu
aWZpZWRJRChub2RlLT5jaGlsZDEoKS5ub2RlKCkpLm1faWQ7Ci0gICAgZWxzZSBpZiAoaGFzQ29u
c3RhbnROdW1iZXIobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0g
bm9kZS0+Y29uc3RhbnROdW1iZXIoKTsKKyAgICBpZiAoaGFzQ29uc3RhbnROdW1iZXIobm9kZS0+
b3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBub2RlLT5jb25zdGFudE51bWJlcigpOwog
ICAgIGVsc2UgaWYgKGhhc1dlYWtDb25zdGFudChub2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0
Lm1fY2hpbGRPckluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlLT53ZWFrQ29uc3Rh
bnQoKSk7CisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihu
b2RlLT53ZWFrQ29uc3RhbnQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFBoYW50b21Bcmd1bWVudHMpOwotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9
IDA7CisgICAgICAgIHJlc3VsdC5tX2luZm8gPSAwOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5o
CShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlm
aWVkTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsOSBAQCBpbmxpbmUgYm9vbCBi
ZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz
ZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgY2FzZSBWYWx1ZVRv
SW50MzI6Ci0gICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
Ci0gICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKLSAg
ICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCghcGVybWl0c09TUkJhY2t3
YXJkUmV3aXJpbmcodHlwZSkgJiYgIXBlcm1pdHNPU1JGb3J3YXJkUmV3aXJpbmcodHlwZSkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtNjYsMTQgKzU5LDYgQEAgcHVibGlj
OgogICAgIE1pbmlmaWVkSUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgTm9kZVR5
cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CiAgICAgCi0gICAgYm9vbCBoYXNDaGlsZDEo
KSBjb25zdCB7IHJldHVybiBoYXNDaGlsZChtX29wKTsgfQotICAgIAotICAgIE1pbmlmaWVkSUQg
Y2hpbGQxKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNDaGlsZChtX29wKSk7Ci0g
ICAgICAgIHJldHVybiBNaW5pZmllZElEOjpmcm9tQml0cyhtX2NoaWxkT3JJbmZvKTsKLSAgICB9
Ci0gICAgCiAgICAgYm9vbCBoYXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc0NvbnN0YW50
TnVtYmVyKCkgfHwgaGFzV2Vha0NvbnN0YW50KCk7IH0KICAgICAKICAgICBib29sIGhhc0NvbnN0
YW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIobV9vcCk7IH0KQEAg
LTgxLDcgKzY2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNDb25zdGFudE51bWJlcihtX29wKSk7Ci0gICAg
ICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgICAgICByZXR1cm4gbV9pbmZvOwogICAgIH0K
ICAgICAKICAgICBib29sIGhhc1dlYWtDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc1dlYWtD
b25zdGFudChtX29wKTsgfQpAQCAtODksNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgSlNDZWxsKiB3
ZWFrQ29uc3RhbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1dlYWtDb25zdGFu
dChtX29wKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9jaGlsZE9y
SW5mbyk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9pbmZvKTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIE1pbmlmaWVkSUQgZ2V0SUQoTWluaWZpZWROb2RlKiBub2Rl
KSB7IHJldHVybiBub2RlLT5pZCgpOyB9CkBAIC05OSwyMCArODQsNiBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBoYXNDaGlsZChOb2RlVHlwZSB0eXBl
KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgotICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgY2FzZSBJbnQ1MlRv
RG91YmxlOgotICAgICAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQogICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50TnVtYmVyKE5vZGVUeXBlIHR5
cGUpCiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSA9PSBKU0NvbnN0YW50OwpAQCAtMTIzLDcg
Kzk0LDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgTWluaWZpZWRJRCBtX2lkOwotICAg
IHVpbnRwdHJfdCBtX2NoaWxkT3JJbmZvOyAvLyBOb2RlcyBpbiB0aGUgbWluaWZpZWQgZ3JhcGgg
aGF2ZSBvbmx5IG9uZSBjaGlsZCBlYWNoLgorICAgIHVpbnRwdHJfdCBtX2luZm87CiAgICAgTm9k
ZVR5cGUgbV9vcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNw
cAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsNiBAQCBib29sIE5vZGU6Omhhc1Zhcmlh
YmxlQWNjZXNzRGF0YShHcmFwaCYgCiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBjYXNlIEdldEFy
Z3VtZW50OgogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgY2FzZSBNb3ZIaW50OgotICAgIGNhc2Ug
TW92SGludEFuZENoZWNrOgotICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFNldEFyZ3Vt
ZW50OgogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw0MiArMjc0
LDI0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGZpbHRlckZsYWdzKH5mbGFncyk7
CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHNwZWN1bGF0aW9uRGlyZWN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmIChmbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkKLSAg
ICAgICAgICAgIHJldHVybiBGb3J3YXJkU3BlY3VsYXRpb247Ci0gICAgICAgIHJldHVybiBCYWNr
d2FyZFNwZWN1bGF0aW9uOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldFNwZWN1bGF0aW9uRGly
ZWN0aW9uKFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgICAgIGNhc2UgRm9yd2FyZFNwZWN1bGF0aW9uOgotICAg
ICAgICAgICAgbWVyZ2VGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBCYWNrd2FyZFNwZWN1bGF0aW9uOgotICAgICAgICAgICAgY2xlYXJG
bGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKICAgICB2
b2lkIHNldE9wQW5kRGVmYXVsdEZsYWdzKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAgbV9v
cCA9IG9wOwogICAgICAgICBtX2ZsYWdzID0gZGVmYXVsdEZsYWdzKG9wKTsKICAgICB9CiAKKyAg
ICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIHZvaWQgc2V0T3BBbmREZWZhdWx0Tm9u
RXhpdEZsYWdzKE5vZGVUeXBlIG9wKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAm
IE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFnc1Vu
Y2hlY2tlZChvcCk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAg
ICB2b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFnc1VuY2hlY2tlZChOb2RlVHlwZSBvcCkK
ICAgICB7CiAgICAgICAgIG1fb3AgPSBvcDsKLSAgICAgICAgbV9mbGFncyA9IChkZWZhdWx0Rmxh
Z3Mob3ApICYgfk5vZGVFeGl0c0ZvcndhcmQpIHwgKG1fZmxhZ3MgJiBOb2RlRXhpdHNGb3J3YXJk
KTsKKyAgICAgICAgbV9mbGFncyA9IGRlZmF1bHRGbGFncyhvcCk7CiAgICAgfQogCiAgICAgdm9p
ZCBjb252ZXJ0VG9QaGFudG9tKCkKQEAgLTUzMSw5ICs1MTMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgYm9vbCBjb250YWluc01vdkhpbnQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7
Ci0gICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAg
Y2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTY3LDYgKzU0Nyw4IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9j
YWxVbmxpbmtlZDoKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAg
Y2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTExOTAsMTEgKzExNzIsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAgICAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAg
ICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAg
ICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBQaGFudG9tOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw5ICs5Niw2IEBAIHZvaWQgZHVtcE5vZGVGbGFncyhQcmludFN0cmVh
bSYgYWN0dWFsT3UKICAgICBpZiAoIShmbGFncyAmIE5vZGVEb2VzTm90RXhpdCkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgIkNhbkV4aXQiKTsKICAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2Rl
RXhpdHNGb3J3YXJkKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJOb2RlRXhpdHNGb3J3YXJk
Iik7Ci0gICAgCiAgICAgQ1N0cmluZyBzdHJpbmcgPSBvdXQudG9DU3RyaW5nKCk7CiAgICAgaWYg
KCFzdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgIGFjdHVhbE91dC5wcmludCgiPGVtcHR5PiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAx
NjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw5ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogI2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgICAgICAgICAweDQwMDAKIAot
I2RlZmluZSBOb2RlRXhpdHNGb3J3YXJkICAgICAgICAgICAgICAgICAweDgwMDAKLQotI2RlZmlu
ZSBOb2RlSXNTdGF0aWNDb25zdGFudCAgICAgICAgICAgIDB4MTAwMDAgLy8gVXNlZCBvbmx5IGJ5
IHRoZSBwYXJzZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkg
YW5kIGhlbmNlIGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgorI2RlZmluZSBOb2RlSXNT
dGF0aWNDb25zdGFudCAgICAgICAgICAgICAweDgwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBwYXJz
ZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhlbmNl
IGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgogCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVG
bGFnczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICAvKiBBbnkgdHdvIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHNhbWUg
UGhpIGdyYXBoIHdpbGwgc2hhcmUgdGhlIHNhbWUgKi9cCiAgICAgLyogVmFyaWFibGVBY2Nlc3NE
YXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhHZXRM
b2NhbCwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVFeGl0c0Zvcndh
cmQpIFwKLSAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
RXhpdHNGb3J3YXJkKSBcCisgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBtYWNybyhNb3ZI
aW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhab21iaWVIaW50LCBOb2RlRG9lc05v
dEV4aXQpIFwKICAgICBtYWNybyhHZXRBcmd1bWVudCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXApAQCAtMzE4LDgwICszMTcsNiBAQCBpbmxpbmUgTm9kZUZsYWdzIGRlZmF1bHRG
bGFncyhOb2RlVHlwZSBvCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBwZXJtaXRzT1NSQmFja3dh
cmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBJ
ZGVudGl0eToKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIEludDUyVG9W
YWx1ZToKLSAgICBjYXNlIEludDUyVG9Eb3VibGU6Ci0gICAgICAgIC8vIFRoZXNlIGFyZSB0aGUg
b25seSBub2RlIHdoZXJlIHdlIGRvOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgYjogVUlu
dDMyVG9OdW1iZXIoQGEpCi0gICAgICAgIC8vICAgICBjOiBTZXRMb2NhbChAYikKLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gYW5kIHRoZW4gYWxzbyBoYXZlIHNvbWUgdXNlcyBvZiBAYSB3aXRob3V0
IFBoYW50b20naW5nIEBiLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcmlvcml0eSB3
aXRoIHdoaWNoIHdlIHNob3VsZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGUgZm9yIGZvcndhcmQKLS8v
IHJld2lyaW5nLiBIaWdoZXIgaXMgYmV0dGVyLiBaZXJvIG1lYW5zIHRoYXQgdGhlIG5vZGUgaXMg
bm90IHVzZWZ1bCBmb3IgcmV3aXJpbmcuCi0vLyBCeSBjb252ZW50aW9uLCB3ZSB1c2UgMTAwIHRv
IG1lYW4gdGhhdCB0aGUgbm9kZSBpcyB0b3RhbGx5IGVxdWl2YWxlbnQgdG8gaXRzCi0vLyBpbnB1
dCB3aXRoIG5vIGluZm9ybWF0aW9uIGxvc3MuCi1pbmxpbmUgdW5zaWduZWQgZm9yd2FyZFJld2ly
aW5nU2VsZWN0aW9uU2NvcmUoTm9kZVR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAg
IGNhc2UgSWRlbnRpdHk6Ci0gICAgICAgIC8vIFdlIHNob3VsZG4ndCBzZWUgdGhlc2UgYnkgdGhl
IHRpbWUgd2UgZ2V0IHRvIE9TUiBldmVuIHRob3VnaCBpdCBjbGVhcmx5Ci0gICAgICAgIC8vIGlz
IGEgcGVyZmVjdCBpZGVudGl0eSBmdW5jdGlvbi4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBEb3Vi
bGVBc0ludDMyOgotICAgICAgICAvLyBUaGlzIHNwZWN1bGF0ZXMgdGhhdCB0aGUgaW5jb21pbmcg
ZG91YmxlIGlzIGNvbnZlcnRpYmxlIHRvIGFuIGludDMyLiBTbwotICAgICAgICAvLyBpdHMgcmVz
dWx0IGlzIHRvdGFsbHkgZXF1aXZhbGVudC4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAg
Ci0gICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGNvbnZlcnRzIGFuIGlu
dDMyIHRvIGEgZG91YmxlLCBidXQgdGhhdCBsb3NlcyBhIGJpdCBvZiBpbmZvcm1hdGlvbi4KLSAg
ICAgICAgLy8gT1RPSCBpdCdzIHN0aWxsIGFuIGVxdWl2YWxlbnQgbnVtYmVyLgotICAgICAgICBy
ZXR1cm4gNzU7Ci0gICAgICAgIAotICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIC8v
IEl0J3MgY29tcGxldGVseSBmaW5lIHRvIHVzZSB0aGlzIGZvciBPU1IgZXhpdCwgc2luY2UgdGhl
IHVpbnQzMiBpc24ndAotICAgICAgICAvLyBhY3R1YWxseSByZXByZXNlbnRhYmxlIGluIGJ5dGVj
b2RlLgotICAgICAgICByZXR1cm4gMTAwOwotCi0gICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAg
ICAgIC8vIFRoaXMgbG9zZXMgaW5mb3JtYXRpb24uIE9ubHkgdXNlIGl0IGlmIHRoZXJlIGFyZSBu
byBiZXR0ZXIgYWx0ZXJuYXRpdmVzLgotICAgICAgICByZXR1cm4gMjU7Ci0gICAgICAgIAotICAg
IGNhc2UgSW50NTJUb1ZhbHVlOgotICAgICAgICAvLyBMb3NlcyBubyBpbmZvcm1hdGlvbi4gSXQg
anVzdCBib3hlcyB0aGUgdmFsdWUsIHdoaWNoIGlzIHdoYXQgT1NSIHdhbnRzCi0gICAgICAgIC8v
IHRvIGRvIGFueXdheS4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBJ
bnQ1MlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGlzIGxpa2UgSW50MzJUb0RvdWJsZTsgd2Ug
Y2FuIHVzZSBpdCBiZWNhdXNlIGl0IGdpdmVzIGEgc2VtYW50aWNhbGx5Ci0gICAgICAgIC8vIGVx
dWl2YWxlbnQgdmFsdWUgYnV0IHRoYXQgdmFsdWUgbWF5IGJlIGFuIGludDMyIGluIGEgZG91Ymxl
LCBzbyB3ZSdkCi0gICAgICAgIC8vIHJhdGhlciBub3QgaWYgd2UgY2FuIGF2b2lkIGl0LgotICAg
ICAgICByZXR1cm4gNzU7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLX0KLQotaW5saW5lIGJvb2wgcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyhOb2Rl
VHlwZSBvcCkKLXsKLSAgICByZXR1cm4gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUob3Ap
ID4gMDsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMCArMTAzLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUt
PnVubGlua2VkTG9jYWwoKSkgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJp
bGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDE3ICsxMDQsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rpb24o
KSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIENyZWF0ZSBhIE1vdkhpbnQuIFdlIGNhbid0IHVzZSBNb3ZIaW50J3MgZGlyZWN0bHkg
YXQgdGhpcyBzdGFnZSBvZgotICAgICAgICAgICAgLy8gY29tcGlsYXRpb24sIHNvIHdlIGNvb2sg
b25lIHVwIGJ5IGNyZWF0aW5nIGEgbmV3IFZhcmlhYmxlQWNjZXNzRGF0YQotICAgICAgICAgICAg
Ly8gdGhhdCBpc24ndCB1bmlmaWVkIHdpdGggYW55IG9mIHRoZSBvdGhlcnMuIFRoaXMgZW5zdXJl
cyB0aGF0IHRoaXMKLSAgICAgICAgICAgIC8vIFNldExvY2FsIHdpbGwgdHVybiBpbnRvIGEgTW92
SGludCBhbmQgd2lsbCBub3QgaGF2ZSBhbnkgdHlwZSBjaGVja3MuCi0gICAgICAgICAgICBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpKTsK
LSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGUgPSAmbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7Ci0gICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUs
IFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8obmV3VmFyaWFibGUpLAorICAgICAgICAgICAg
bmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwg
TW92SGludCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwK
ICAgICAgICAgICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKLSAgICAgICAgICAgIHNldExv
Y2FsLT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICAg
ICAgfQogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUtPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CiAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c0hl
YWQgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7CkBAIC0xMjIsOSArMTE0
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbG9jYWxzW2xvY2FsXTsKLSAgICAgICAg
ICAgIE5vZGUqIHNldExvY2FsID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgIG5l
d1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNl
dExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKLSAgICAg
ICAgICAgIHNldExvY2FsLT5zZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihCYWNrd2FyZFNwZWN1bGF0
aW9uKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24g
MTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjgsMjYgKzY4LDYgQEAgdm9pZCBPU1JFeGl0Ojpjb3JyZWN0SnVtcChM
aW5rQnVmZmVyJiBsaQogICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZmZXIub2Zm
c2V0T2YobGFiZWwpOwogfQogCi12b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQoQmFzaWNC
bG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCi17Ci0gICAgTm9kZSogbm9kZTsKLSAgICBO
b2RlKiBsYXN0TW92SGludDsKLSAgICBpZiAoIWRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24o
YmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSwgbm9kZSwgbGFz
dE1vdkhpbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdp
biAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7Ci0gICAgCi0gICAgbV9jb2RlT3JpZ2luID0g
bm9kZS0+Y29kZU9yaWdpbjsKLSAgICAKLSAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQobGFzdE1vdkhpbnQpOwotICAgIEFTU0VSVChsYXN0
TW92SGludC0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpOwotICAgIG1fdmFsdWVSZWNvdmVyeU92
ZXJyaWRlID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUobGFz
dE1vdkhpbnQtPmxvY2FsKCksIHZhbHVlUmVjb3ZlcnkpKTsKLX0KLQogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsx
MDEsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNvbnN0OwogICAg
IENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqKSBjb25z
dDsKICAgICB2b2lkIGNvcnJlY3RKdW1wKExpbmtCdWZmZXImKTsKLSAgICAKLSAgICB2b2lkIGNv
bnZlcnRUb0ZvcndhcmQoQmFzaWNCbG9jayosIE5vZGUqLCB1bnNpZ25lZCBub2RlSW5kZXgsIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmKTsKIAogICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAko
cmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDQ1ICs0Niw2IEBAIGJvb2wgT1NSRXhpdEJh
c2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWUKICAgICAgICAgICAgIEZyZXF1ZW50RXhpdFNpdGUo
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKSk7CiB9CiAK
LWJvb2wgT1NSRXhpdEJhc2U6OmRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oCi0gICAgQmFz
aWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGJv
b2wgaGFzVmFsdWVSZWNvdmVyeSwKLSAgICBOb2RlKiYgbm9kZSwgTm9kZSomIGxhc3RNb3ZIaW50
KQotewotICAgIC8vIENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRM
b2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0aCB0
aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3Zl
cnkuCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIWhhc1ZhbHVlUmVjb3Zl
cnkKLSAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAg
ICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW5Gb3JFeGl0VGFy
Z2V0ID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCk7Ci0gICAgfQotICAg
IAotICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3Ry
dWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBoaW50Ci0gICAgLy8gb24gdGhpcyBub2Rl
LgotICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7Ci0gICAgbm9kZSA9
IDA7Ci0gICAgbGFzdE1vdkhpbnQgPSAwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKGlu
ZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBU
aGlzIGlzIHNhZmUKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMg
aXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bwotICAgICAgICAg
ICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGlmIChub2RlLT5j
b250YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKLSAgICAg
ICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKLSAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW5G
b3JFeGl0VGFyZ2V0ICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBpbmRleEluQmxvY2srKzsKLSAgICB9Ci0gICAgCi0g
ICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ICE9IGN1cnJlbnROb2RlLT5j
b2RlT3JpZ2luRm9yRXhpdFRhcmdldCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24gMTYxMDcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCwxMSArNjQsNiBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGVTbG93KHByb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9Ci0gICAgCi0gICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZlcnNpb24gaXMgcmVhbGx5IG5lZWRlZC4KLSAg
ICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oCi0gICAgICAgIEJhc2ljQmxvY2sq
LCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVlUmVj
b3ZlcnksCi0gICAgICAgIE5vZGUqJiBuZXh0QkNOb2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpOwog
CiBwcml2YXRlOgogICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93
KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsOSArNTA0
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIEFy
cmF5aWZ5OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
TW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0gICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAgICAgICAgY2FzZSBD
aGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6
CkBAIC01ODUsNiArNTgyLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50
cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgICAg
ICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAg
ICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHBy
ZWRpY3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4Niw4ICsxODYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIHZhbHVlIHdhcyBhbHJlYWR5IG9uIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUs
IE1vdkhpbnQsIENvZGVPcmlnaW4oKSwgT3BJbmZvKHZhcmlhYmxlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRWRnZShub2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBDb2RlT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIEVk
Z2Uobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjY5LDcgKzI2OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJl
cGxhY2VkIHdpdGggcmVmZXJlbmNlcwogICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNwZWNpZmll
ZCBieSB2YXJpYWJsZXNBdEhlYWQuCiAgICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVz
dEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhCi0gICAgICAgIC8vICAg
TW92SGludCBvdGhlcndpc2UuCisgICAgICAgIC8vICAgUGhhbnRvbSBvdGhlcndpc2UuCiAgICAg
ICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1haW5zLCBiZWNhdXNlIHdl
IHdhbnQgdG8ga25vdyB3aGVuIGEKICAgICAgICAgLy8gICBmbHVzaGVkIFNldExvY2FsJ3MgdmFs
dWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0IHNpbXBsZXIKICAgICAg
ICAgLy8gICB0byByZWFzb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxvY2FsLCBzaW5jZSB3ZSBj
YW4ganVzdCBkbyBhIGJhY2t3YXJkcwpAQCAtMzA4LDcgKzMwOCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVzaGVkTG9j
YWxPcHMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJn
ZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5yZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsgLy8gT25seSBmb3IgVXBzaWxvbnMuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw2
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdl
dENhbGxlZToKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgY2Fz
ZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGlu
dDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjEwNzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIxLDExICsxOTIxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNl
IE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKG5vZGUp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgTW92SGludDoKICAg
ICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTE5MzMsMTIgKzE5MjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAvLyBTZXRM
b2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQg
YW5kCi0gICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVj
dWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQg
b2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAgICAgIC8vIHN0YWNr
LgotICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHN3aXRj
aCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAg
Y2FzZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYxMDcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIzNiwxMSArMjIzNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKG5v
ZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgTW92SGludDoK
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTIyNDgsMTIgKzIyNDMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAvLyBT
ZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9y
ZWQgYW5kCi0gICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBz
cGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKLSAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hp
bGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCi0gICAgICAgIC8vIHN0
YWNrLgotICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHN3
aXRjaCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsKICAgICAg
ICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTIzMDQsNyArMjI5Myw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPm1hY2hp
bmVMb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIAog
ICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3
ICsxMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0FycmF5CiAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIG51bUVsZW1lbnRzKSkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICBy
ZXR1cm47CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRT
cGVjdWxhdGlvbgogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5v
ZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7CiAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CkBAIC0xMjQsMjIgKzEyNCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb24KICAgICBtX2ppdC5qaXRD
b2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5n
cmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3Ry
ZWFtLT5zaXplKCkpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCi17Ci0gICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICByZXR1cm47Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQs
IGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwotICAgIGlmIChtX3NwZWN1bGF0aW9u
RGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAgY29udmVydExhc3RPU1JF
eGl0VG9Gb3J3YXJkKCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVV
c2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCi17Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICBzcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKLX0KLQot
T1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSog
bm9kZSkKK09TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBu
b2RlKQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRK
dW1wUGxhY2Vob2xkZXIoKTsKQEAgLTE1MCwxOSArMTM1LDE2IEBAIE9TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIgU3BlY3VsYXRpdmVKSVQ6OmIKICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRl
cihpbmRleCk7CiB9CiAKLU9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OmJh
Y2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKK09TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBFZGdlIG5vZGVVc2UpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICByZXR1cm4gYmFja3dhcmRTcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKKyAgICByZXR1cm4gc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ug
bm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hl
Y2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOwotICAgIGlmIChtX3Nw
ZWN1bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAgY29udmVy
dExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBq
dW1wc1RvRmFpbCkKQEAgLTE3MSw3ICsxNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBub2RlVXNlLm5vZGUoKSwganVtcHNUb0ZhaWwpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjpiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVl
U291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25z
dCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MSwyNCArMTYzLDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb24KICAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9T
UkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIHJl
Y292ZXJ5SW5kZXgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxh
dGlvblJlY292ZXJ5JiByZWNvdmVyeSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5v
ZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9u
UmVjb3ZlcnkmIHJlY292ZXJ5KQogewogICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7Ci19Ci0K
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKLXsKLSAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBiYWNrd2FyZFNwZWN1
bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCwgcmVjb3Zl
cnkpOwotICAgIGlmIChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlv
bikKLSAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci19Ci0KLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQotewotICAgIHNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJl
Y292ZXJ5KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVV
c2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2ludChOb2RlKiBub2RlKQpAQCAtMjA2LDcgKzE3NCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jYW5FeGl0KTsKLSAgICBB
U1NFUlQobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAg
ICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9qaXQuYXBwZW5kRXhpdEluZm8oSklU
Q29tcGlsZXI6Okp1bXBMaXN0KCkpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhp
dChPU1JFeGl0KAogICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSlNWYWx1ZVNvdXJj
ZSgpLApAQCAtMjE3LDI2ICsxODQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0SW52YWxp
ZGF0aW9uUG9pCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZChjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJl
Y292ZXJ5KQotewotICAgIG1faml0LmppdENvZGUoKS0+bGFzdE9TUkV4aXQoKS5jb252ZXJ0VG9G
b3J3YXJkKAotICAgICAgICBtX2Jsb2NrLCBtX2N1cnJlbnROb2RlLCBtX2luZGV4SW5CbG9jaywg
dmFsdWVSZWNvdmVyeSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9k
ZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNv
dmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhraW5kLCBq
c1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsKTsKLSAgICBjb252ZXJ0TGFzdE9TUkV4aXRU
b0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndh
cmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1Rv
RmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIGJhY2t3YXJkU3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFpbCk7Ci0g
ICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwotfQotCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwpAQCAtMjUyLDI0ICsxOTks
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdgogICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLm5vZGUo
KSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkVHlwZUNoZWNrKEpTVmFsdWVT
b3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3Vn
aCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7
CiAgICAgQVNTRVJUKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCkpOwog
ICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCk7Ci0gICAg
YmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHNvdXJjZSwgZWRnZS5ub2RlKCksIGp1
bXBUb0ZhaWwpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNv
dXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdo
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQotewotICAgIGJhY2t3YXJkVHlwZUNo
ZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKLSAgICBp
ZiAobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRpb24pCi0gICAgICAg
IGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpmb3J3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1
bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKLXsKLSAgICBiYWNrd2Fy
ZFR5cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7
Ci0gICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOworICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCk7
CiB9CiAKIFJlZ2lzdGVyU2V0IFNwZWN1bGF0aXZlSklUOjp1c2VkUmVnaXN0ZXJzKCkKQEAgLTEz
ODAsMTQgKzEzMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2Rl
CiAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgbm90aWNlT1NS
QmlydGgoY2hpbGQpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVF
dmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+bG9jYWwoKSkpOwotfQotCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludEFuZENoZWNrKE5vZGUqIG5vZGUpCi17
Ci0gICAgY29tcGlsZU1vdkhpbnQobm9kZSk7Ci0gICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICBub1Jlc3VsdChub2RlKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9n
KFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWlsKCkKQEAgLTE0ODIsNyAr
MTQwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9t
YmllSGludDogewotICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXREZWFk
KTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtl
ZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTE1MDEsOCArMTQyOCw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3Nw
ZWN1bGF0aW9uRGlyZWN0aW9uID0gKG1fY3VycmVudE5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNG
b3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247Ci0gICAg
ICAgICAgICAKICAgICAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAKICNpZiBFTkFC
TEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKQEAgLTE1NDAsMTggKzE0NjUs
MTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogewogICAgIEFT
U0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IHRy
dWU7Ci0gICAgbV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb247CiAg
ICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7CiAgICAgbV9jb2Rl
T3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3JpZ2luKDApOwogCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsKICAgICAg
ICAgTm9kZSogbm9kZSA9IG1faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV07Ci0gICAgICAgIEFT
U0VSVChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgLy8gVGhl
IGFyZ3VtZW50IGlzIGRlYWQuIFdlIGRvbid0IGRvIGFueSBjaGVja3MgZm9yIHN1Y2ggYXJndW1l
bnRzLgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOworCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKTsKICAgICAg
ICAgCkBAIC0yMTY3LDE2ICsyMDkzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
dDMyVG9Eb3VibAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCiAgICAgaWYgKG5lZWRzVHlw
ZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlcikpIHsKLSAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSB7Ci0gICAgICAgICAgICBmb3J3YXJkVHlw
ZUNoZWNrKAotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxk
MSgpLCBTcGVjRnVsbE51bWJlciwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSwKLSAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihvcDFHUFIsIERhdGFG
b3JtYXRKUykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFja3dhcmRUeXBlQ2hl
Y2soCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCks
IFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKLSAgICAgICAgfQorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgfQogICAgIAogICAgIG1faml0Lm1vdmUob3Ax
R1BSLCB0ZW1wR1BSKTsKQEAgLTIxOTgsMTYgKzIxMTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3Ax
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICAKICAgICBpZiAo
bmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyKSkgewotICAgICAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAgICAgICAgIGZv
cndhcmRUeXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBv
cDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMVRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpLAotICAgICAgICAgICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKAotICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgp
LCBTcGVjRnVsbE51bWJlciwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNw
ZWNGdWxsTnVtYmVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFn
KSkpOwogICAgIH0KICAgICAKICAgICB1bmJveERvdWJsZShvcDFUYWdHUFIsIG9wMVBheWxvYWRH
UFIsIHJlc3VsdEZQUiwgdGVtcEZQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
NDMsNDMgKzIxNDMsMjggQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1wIGNvbnZlcnRU
b0RvdWJsZShKU1ZhbHVlT3BlcmFuZCYsIEZQUlJlZyByZXN1bHQpOwogI2VuZGlmCiAgICAgCi0g
ICAgLy8gQWRkIGEgYmFja3dhcmQgc3BlY3VsYXRpb24gY2hlY2suCi0gICAgdm9pZCBiYWNrd2Fy
ZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKLSAgICB2b2lkIGJhY2t3YXJkU3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpOwotCi0gICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hl
Y2sgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgorICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9u
IGNoZWNrLgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJj
ZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwotICAgIHZvaWQgc3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAganVtcFRvRmFpbCk7Ci0gICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0
aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LCBhbmQgd2l0aCBhIHByb21pc2UgdG8gc3VwcGx5IGEg
anVtcCBsYXRlci4KLSAgICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIGJhY2t3YXJkU3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSopOwotICAgIE9TUkV4aXRKdW1w
UGxhY2Vob2xkZXIgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291
cmNlLCBFZGdlKTsKLSAgICAvLyBBZGQgYSBzZXQgb2Ygc3BlY3VsYXRpb24gY2hlY2tzIHdpdGhv
dXQgYWRkaXRpb25hbCByZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
IGp1bXBzVG9GYWlsKTsKKworICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQg
YWRkaXRpb25hbCByZWNvdmVyeSwgYW5kIHdpdGggYSBwcm9taXNlIHRvIHN1cHBseSBhIGp1bXAg
bGF0ZXIuCisgICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKik7CisgICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlKTsKKyAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
JiBqdW1wc1RvRmFpbCk7CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRp
dGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOwotICAgIHZvaWQgYmFja3dhcmRTcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CisgICAgdm9pZCBz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYpOworICAg
IHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYp
OwogICAgIAogICAgIHZvaWQgZW1pdEludmFsaWRhdGlvblBvaW50KE5vZGUqKTsKICAgICAKLSAg
ICAvLyBJdCBpcyBnZW5lcmFsbHkgYSBnb29kIGlkZWEgdG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5
LgotICAgIHZvaWQgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3Zl
cnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICAKLSAgICAvLyBOb3RlOiBub3Qgc3BlY2lmeWlu
ZyB0aGUgdmFsdWVSZWNvdmVyeSBhcmd1bWVudCAobGVhdmluZyBpdCBhcyBWYWx1ZVJlY292ZXJ5
KCkpIGltcGxpZXMKLSAgICAvLyB0aGF0IHlvdSd2ZSBlbnN1cmVkIHRoYXQgdGhlcmUgZXhpc3Rz
IGEgTW92SGludCBwcmlvciB0byB5b3VyIHVzZSBvZiBmb3J3YXJkU3BlY3VsYXRpb25DaGVjaygp
LgotICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3Vy
Y2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7Ci0gICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNv
dmVyeSgpKTsKLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3Vy
Y2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxh
dGlvblJlY292ZXJ5Jik7Ci0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1Zh
bHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBT
cGVjdWxhdGlvblJlY292ZXJ5Jik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBk
ZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSopOwogICAg
IHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdz
LCBFZGdlKTsKICAgICAKICAgICAvLyBIZWxwZXJzIGZvciBwZXJmb3JtaW5nIHR5cGUgY2hlY2tz
IG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiByZWdpc3RlcnMuCiAgICAgYm9vbCBuZWVk
c1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkg
eyByZXR1cm4gbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gpOyB9Ci0gICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlLCBFZGdl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwpOwogICAgIHZvaWQgdHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCk7Ci0gICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2Us
IFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYpOwogCiAgICAgdm9pZCBzcGVjdWxhdGVJ
bnQzMihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSk7CkBAIC0yMjUy
LDcgKzIyMzcsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5l
cmF0ZWQuCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnROb2Rl
OwotICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fc3BlY3VsYXRpb25EaXJlY3Rpb247CiAgICAg
Ym9vbCBtX2NhbkV4aXQ7CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAgLy8gVmly
dHVhbCBhbmQgcGh5c2ljYWwgcmVnaXN0ZXIgbWFwcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDMzICsxNjMsMjIgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlICYm
ICFpdGVyLT52YWx1ZS5tX2FycmF5TW9kZUlzVmFsaWQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBpbnNlcnQgYSBkZWFkIFNl
dExvY2FsIHRvIHRlbGwgT1NSIHRoYXQgdGhlIGNoaWxkJ3MgdmFsdWUgc2hvdWxkCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGJlIGRyb3BwZWQgaW50byB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGlm
IHRoZSBDaGVja1N0cnVjdHVyZSBkZWNpZGVzCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGV4
aXQuCi0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgICAgICBFZGdl
IGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZv
KHZhcmlhYmxlKSwgY2hpbGQxKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgTm9kZUV4
aXRzRm9yd2FyZCB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBleGl0IHRvIHRoZSBuZXh0Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJl
ZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbmV3
Tm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVy
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGluc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hl
Y2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlci0+dmFsdWUubV9hcnJheU1vZGVJ
c1ZhbGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUubV9h
cnJheU1vZGVIb2lzdGluZ09rYXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8oaXRlci0+dmFsdWUubV9hcnJheU1vZGUuYXNXb3JkKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld05vZGUtPm1l
cmdlRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBA
IC0yMjgsOSArMjE3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICAg
ICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgY3VycmVudGx5IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSdyZSB0aGUg
b25seSBvbmVzIHdobyB3b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQgdGhlc2Ug
bm9kZXMgd2l0aCBOb2RlRXhpdHNGb3J3YXJkLgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSk7CiAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTMyOSw5ICszMTUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IHJlbHkgb24gdGhlIGZhY3Qg
dGhhdCB3ZSdyZSB0aGUgb25seSBvbmVzIHdobyB3b3VsZAotICAgICAgICAgICAgICAgICAgICAv
LyBpbnNlcnQgdGhlc2Ugbm9kZXMgd2l0aCBOb2RlRXhpdHNGb3J3YXJkLgotICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJk
KSk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDEwICsy
NDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBT
ZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1
bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaAotICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBQaGkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gWm9tYmllSGludAotICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgZWRnZS0+b3AoKSA9PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB8
fCBlZGdlLT5vcCgpID09IE1vdkhpbnRBbmRDaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBlZGdlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBpZiAocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU3LDkgKzI1NCw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobm9kZSwgZWRnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRn
ZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2Ut
Pm9wKCkgPT0gWm9tYmllSGludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2Ut
Pm9wKCkgPT0gTW92SGludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9w
KCkgPT0gTW92SGludEFuZENoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRn
ZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gRmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yOTIsOSAr
Mjg2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwg
cHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09
IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkg
PT0gTW92SGludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgp
ID09IE1vdkhpbnRBbmRDaGVjawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZO
b2RlLT5vcCgpID09IFpvbWJpZUhpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBw
cmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTYxMDcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcwICsxOTIsOCBAQCB2b2lkIFZhcmlhYmxlRXZlbnRT
dHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAKICAgICAgICAgTWluaWZpZWRHZW5lcmF0aW9u
SW5mbyBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChzb3VyY2UuaWQoKSk7CiAgICAgICAgIGlm
IChpbmZvLmZvcm1hdCA9PSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICAgICAgLy8gVHJ5IHRv
IHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhl
IHZhbHVlIHdlIHdhbnQuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gQmFja3dhcmQg
cmV3aXJpbmcgcmVmZXJzIHRvOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgICBh
OiBTb21ldGhpbmcoLi4uKQotICAgICAgICAgICAgLy8gICAgIGI6IElkKEBhKSAvLyBzb21lIGlk
ZW50aXR5IGZ1bmN0aW9uCi0gICAgICAgICAgICAvLyAgICAgYzogU2V0TG9jYWwoQGIpCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2hlcmUgd2UgZmluZCBAYiBiZWluZyBkZWFkLCBi
dXQgQGEgaXMgc3RpbGwgYWxpdmUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gRm9y
d2FyZCByZXdpcmluZyByZWZlcnMgdG86Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
ICAgIGE6IFNvbWV0aGluZyguLi4pCi0gICAgICAgICAgICAvLyAgICAgYjogU2V0TG9jYWwoQGEp
Ci0gICAgICAgICAgICAvLyAgICAgYzogSWQoQGEpIC8vIHNvbWUgaWRlbnRpdHkgZnVuY3Rpb24K
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXaGVyZSB3ZSBmaW5kIEBhIGJlaW5nIGRl
YWQsIGJ1dCBAYiBpcyBzdGlsbCBhbGl2ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSAmJiBw
ZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgpKSkgewotICAgICAgICAgICAgICAg
IE1pbmlmaWVkSUQgaWQgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBpZiAodHJ5
VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgY29kZUJsb2NrLCBncmFw
aC5hdChpZCkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlu
Zm8uZm9ybWF0ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91
bmQpIHsKLSAgICAgICAgICAgICAgICBNaW5pZmllZElEIGJlc3RJRDsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBiZXN0U2NvcmUgPSAwOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgTWluaWZpZWRHZW5lcmF0aW9uSW5mbz46Oml0ZXJhdG9y
IGl0ZXIgPSBnZW5lcmF0aW9uSW5mb3MuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBIYXNoTWFw
PE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8+OjppdGVyYXRvciBlbmQgPSBnZW5l
cmF0aW9uSW5mb3MuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgTWluaWZpZWRJRCBpZCA9IGl0ZXItPmtleTsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGdyYXBoLmF0KGlkKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aGFzQ2hpbGQxKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ICE9IHNvdXJjZS5pZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5mb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbXlTY29yZSA9IGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKG5vZGUtPm9w
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobXlTY29yZSA8PSBiZXN0U2NvcmUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgYmVzdElE
ID0gaWQ7Ci0gICAgICAgICAgICAgICAgICAgIGJlc3RTY29yZSA9IG15U2NvcmU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghIWJlc3RJ
RCkgewotICAgICAgICAgICAgICAgICAgICBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChiZXN0
SUQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby5mb3JtYXQgIT0gRGF0YUZvcm1h
dE5vbmUpOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5k
KSB7Ci0gICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6
Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5
Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoaW5mby5mb3JtYXQgIT0gRGF0YUZvcm1hdE5v
bmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50
OgogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAg
IGNhc2UgUGhhbnRvbToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDgg
KzIyOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVF
ZmZlY3RzID0gbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZyhtX25vZGUpOwogICAgICAgICAK
LSAgICAgICAgbV9kaXJlY3Rpb24gPSAobV9ub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2Fy
ZCkgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwotICAgICAgICAK
ICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBVcHNpbG9uOgog
ICAgICAgICAgICAgY29tcGlsZVVwc2lsb24oKTsKQEAgLTI2MCw5ICsyNTgsNiBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjb21waWxlWm9tYmllSGlu
dCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgot
ICAgICAgICAgICAgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpOwotICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgIGNvbXBpbGVQaGFudG9tKCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTY1NywxNSArNjUyLDE1IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgc3dpdGNoICh1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkgewogICAgICAg
ICBjYXNlIEludDMyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBtX25vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2Rl
LCBpc05vdEludDMyKGpzVmFsdWUpKTsKICAgICAgICAgICAgIHNldEludDMyKHVuYm94SW50MzIo
anNWYWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVl
KSwgbV9ub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05vdENlbGwoanNWYWx1ZSkp
OwogICAgICAgICAgICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFs
dWUpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG1fbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKICAgICAgICAgICAgIHNldEJvb2xl
YW4odW5ib3hCb29sZWFuKGpzVmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFVudHlwZWRVc2U6CkBAIC03MDEsOCArNjk2LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVTZXRMb2NhbCgpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25v
ZGUpOwotICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1f
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpIHsKICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZTogewpAQCAtNzUzLDE5
ICs3NDYsMTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkKICAg
ICB7Ci0gICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAgICAgIEFTU0VSVChtX25v
ZGUtPmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+b3AoKSAhPSBa
b21iaWVIaW50KTsKKyAgICAgICAgCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
bV9ub2RlLT51bmxpbmtlZExvY2FsKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQo
b3BlcmFuZCkgPSBBdmFpbGFiaWxpdHkobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVab21iaWVIaW50KCkKICAgICB7Ci0gICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBBdmFpbGFiaWxpdHk6
OnVuYXZhaWxhYmxlKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU1vdkhpbnRBbmRD
aGVjaygpCi0gICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwotICAgICAgICBz
cGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJh
bmQobV9ub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQaGFudG9tKCkKQEAgLTExNzcsNDAgKzEx
NjcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUludDMyVG9Eb3VibGUoKQog
ICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+
Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyKQotICAgICAgICAgICAgfHwgbV9ub2RlLT5zcGVjdWxh
dGlvbkRpcmVjdGlvbigpID09IEJhY2t3YXJkU3BlY3VsYXRpb24pIHsKLSAgICAgICAgICAgIHNl
dERvdWJsZShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgYm94ZWRWYWx1ZSA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkRvdWJsZSB1bmJveGluZyBpbnQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZG91Ymxl
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlIHVuYm94aW5nIGRvdWJsZSBjYXNl
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkRvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5icmFuY2goaXNOb3RJbnQzMihib3hlZFZhbHVlKSwgZG91YmxlQ2FzZSwgaW50Q2Fz
ZSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGludENhc2UsIGRvdWJsZUNhc2UpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgaW50VG9Eb3VibGUgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5pbnRUb0Rv
dWJsZSh1bmJveEludDMyKGJveGVkVmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIGNv
bnRpbnVhdGlvbik7Ci0KLSAgICAgICAgZm9yd2FyZFR5cGVDaGVjaygKLSAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZShib3hlZFZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIs
Ci0gICAgICAgICAgICBpc0NlbGxPck1pc2MoYm94ZWRWYWx1ZSksIGpzVmFsdWVWYWx1ZShib3hl
ZFZhbHVlKSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayB1bmJveGVkRG91Ymxl
ID0gbV9vdXQuYW5jaG9yKHVuYm94RG91YmxlKGJveGVkVmFsdWUpKTsKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91YmxlLCB1bmJveGVkRG91YmxlKTsK
LSAgICAgICAgCi0gICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAgICBzZXREb3VibGUo
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlQ2hlY2tTdHJ1Y3R1cmUoKQpAQCAtMzE5NiwyNiArMzE1MywxMCBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVCYWNrd2FyZCgKLSAgICAgICAgRXhp
dEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZh
bHVlIGZhaWxDb25kaXRpb24pCi0gICAgewotICAgICAgICBhcHBlbmRPU1JFeGl0KAotICAgICAg
ICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgQmFja3dhcmRT
cGVjdWxhdGlvbiwgRm9ybWF0dGVkVmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlRm9yd2FyZCgKLSAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93
VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sCi0gICAgICAgIGNv
bnN0IEZvcm1hdHRlZFZhbHVlJiByZWNvdmVyeSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZE9TUkV4
aXQoCi0gICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9u
LCBGb3J3YXJkU3BlY3VsYXRpb24sIHJlY292ZXJ5KTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBz
cGVjdWxhdGUoCiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVl
LCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAg
YXBwZW5kT1NSRXhpdCgKLSAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZh
aWxDb25kaXRpb24sIG1fZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgYXBw
ZW5kT1NSRXhpdChraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB0ZXJtaW5hdGUoRXhpdEtpbmQga2luZCkKQEAgLTMyMjMsNDEg
KzMxNjQsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwg
MCwgbV9vdXQuYm9vbGVhblRydWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJhY2t3YXJkVHlw
ZUNoZWNrKAotICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUs
IFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKLSAgICAgICAgTFZhbHVlIGZhaWxD
b25kaXRpb24pCi0gICAgewotICAgICAgICBhcHBlbmRUeXBlQ2hlY2soCi0gICAgICAgICAgICBs
b3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24sIEJh
Y2t3YXJkU3BlY3VsYXRpb24sCi0gICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKAotICAgICAgICBGb3JtYXR0ZWRWYWx1
ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwKLSAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIGNvbnN0IEZvcm1hdHRlZFZhbHVl
JiByZWNvdmVyeSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZFR5cGVDaGVjaygKLSAgICAgICAgICAg
IGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwg
Rm9yd2FyZFNwZWN1bGF0aW9uLAotICAgICAgICAgICAgcmVjb3ZlcnkpOwotICAgIH0KLSAgICAK
ICAgICB2b2lkIHR5cGVDaGVjaygKICAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVk
Z2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCiAgICAgICAg
IExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgYXBwZW5kVHlwZUNoZWNrKAot
ICAgICAgICAgICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWls
Q29uZGl0aW9uLCBtX2RpcmVjdGlvbiwKLSAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKCkpOwor
ICAgICAgICBhcHBlbmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRU
aHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhcHBlbmRUeXBl
Q2hlY2soCiAgICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAotICAgICAgICBMVmFsdWUgZmFpbENv
bmRpdGlvbiwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1ZSBy
ZWNvdmVyeSkKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewogICAgICAgICBp
ZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVD
aGVjayhoaWdoVmFsdWUudXNlS2luZCgpKSk7Ci0gICAgICAgIGFwcGVuZE9TUkV4aXQoQmFkVHlw
ZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRpb24sIGRpcmVjdGlvbiwg
cmVjb3ZlcnkpOworICAgICAgICBhcHBlbmRPU1JFeGl0KEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdo
VmFsdWUubm9kZSgpLCBmYWlsQ29uZGl0aW9uKTsKICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0
ZXIoaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpOwogICAgIH0KICAgICAKQEAgLTQwOTIs
OCArNDAxMyw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5kT1NSRXhp
dCgKLSAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUq
IGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sCi0gICAgICAgIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAgICAgIEV4aXRL
aW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1
ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgbV9hdmFp
bGFiaWxpdHksICJcbiIpOwpAQCAtNDExOCwzOCArNDAzOCwyMCBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0
aW9uKTsKICAgICAgICAgCi0gICAgICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSwg
ZGlyZWN0aW9uLCByZWNvdmVyeSk7CisgICAgICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0LCBsb3dW
YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgZW1pdE9TUkV4aXRDYWxsKAotICAgICAgICBPU1JFeGl0JiBleGl0LCBG
b3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLAot
ICAgICAgICBGb3JtYXR0ZWRWYWx1ZSByZWNvdmVyeSkKKyAgICB2b2lkIGVtaXRPU1JFeGl0Q2Fs
bChPU1JFeGl0JiBleGl0LCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSkKICAgICB7CiAgICAgICAg
IEV4aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOwogICAgICAgICAKICAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47CiAgICAgICAgIAotICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24pCi0gICAgICAgICAgICBidWlsZEV4aXRB
cmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBsb3dWYWx1ZSwgY29kZU9yaWdpbik7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRp
b24pOwotICAgICAgICAgICAgaWYgKCFyZWNvdmVyeSkgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gbV9ub2RlSW5kZXg7IG5vZGVJbmRleCA8IG1faGlnaEJsb2Nr
LT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID09IGNvZGVPcmlnaW4pCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiA9IG5v
ZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0OwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3Jp
Z2luKTsKLSAgICAgICAgICAgIGV4aXQuY29udmVydFRvRm9yd2FyZChtX2hpZ2hCbG9jaywgbV9u
b2RlLCBtX25vZGVJbmRleCwgcmVjb3ZlcnksIGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUsIGNvZGVPcmln
aW4pOwogICAgICAgICAKICAgICAgICAgY2FsbFN0YWNrbWFwKGV4aXQsIGFyZ3VtZW50cyk7CiAg
ICAgfQpAQCAtNDMwOSwxNiArNDIxMSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQodmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOwot
ICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKLSAgICAgICAgCi0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm9wZXJhbmQob3BlcmFuZCkgPSBBdmFpbGFiaWxpdHkobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBzZXRJbnQzMihOb2Rl
KiBub2RlLCBMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBtX2ludDMyVmFsdWVzLnNldChu
b2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwpAQCAtNDQ4OSw3ICs0
MzgxLDYgQEAgcHJpdmF0ZToKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlOwogICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIE5vZGUqIG1fbm9kZTsKLSAgICBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKICAgICAKICAgICB1aW50MzJfdCBtX3N0
YWNrbWFwSURzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNDEgKzYxLDYgQEAgQ29kZUxvY2F0aW9u
SnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25GbwogICAgICAgICBtX3BhdGNoYWJsZUNvZGVPZmZz
ZXQpOwogfQogCi12b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQoCi0gICAgQmFzaWNCbG9j
ayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsCi0gICAgY29u
c3QgRm9ybWF0dGVkVmFsdWUgJnZhbHVlLCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMpCi17
Ci0gICAgTm9kZSogbm9kZTsKLSAgICBOb2RlKiBsYXN0TW92SGludDsKLSAgICBpZiAoIWRvU2Vh
cmNoRm9yRm9yd2FyZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEh
dmFsdWUsIG5vZGUsIGxhc3RNb3ZIaW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIAotICAg
IG1fY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47Ci0gICAgCi0gICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBvdmVycmlkZGVuT3Bl
cmFuZCA9IGxhc3RNb3ZIaW50LT5sb2NhbCgpOwotICAgIAotICAgIC8vIElzIHRoZSB2YWx1ZSBm
b3IgdGhpcyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZXhpdCwg
b3IgaXMKLSAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8gSWYgaXQncyBhbiBhcmd1bWVudCBhbHJl
YWR5LCB0aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsKLSAgICAvLyBvdGhlcndpc2UgYWRkIGFu
b3RoZXIgYXJndW1lbnQuCi0gICAgaWYgKG1fdmFsdWVzLm9wZXJhbmQob3ZlcnJpZGRlbk9wZXJh
bmQpLmlzQXJndW1lbnQoKSkgewotICAgICAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50ID0g
bV92YWx1ZXMub3BlcmFuZChvdmVycmlkZGVuT3BlcmFuZCkuZXhpdEFyZ3VtZW50KCk7Ci0gICAg
ICAgIGFyZ3VtZW50c1tleGl0QXJndW1lbnQuYXJndW1lbnQoKV0gPSB2YWx1ZS52YWx1ZSgpOwot
ICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG92ZXJyaWRkZW5PcGVyYW5kKSA9IEV4aXRWYWx1ZTo6
ZXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgZXhpdEFyZ3VtZW50LndpdGhGb3JtYXQodmFsdWUu
Zm9ybWF0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBh
cmd1bWVudCA9IGFyZ3VtZW50cy5zaXplKCk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZS52
YWx1ZSgpKTsKLSAgICBtX3ZhbHVlcy5vcGVyYW5kKG92ZXJyaWRkZW5PcGVyYW5kKSA9IEV4aXRW
YWx1ZTo6ZXhpdEFyZ3VtZW50KAotICAgICAgICBFeGl0QXJndW1lbnQodmFsdWUuZm9ybWF0KCks
IGFyZ3VtZW50KSk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMTAgKzE2Niw2IEBAIHN0cnVjdCBPU1JFeGl0
IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAgICB1aW50MzJfdCBtX3N0YWNrbWFwSUQ7CiAg
ICAgCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9j
ayogZnRsQ29kZUJsb2NrKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQo
Ci0gICAgICAgIERGRzo6QmFzaWNCbG9jayosIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2ln
bmVkIG5vZGVJbmRleCwKLSAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUmLCBFeGl0QXJndW1l
bnRMaXN0JiBhcmd1bWVudHMpOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZWFkLWludDMyLXRvLWRvdWJs
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Rl
YWQtaW50MzItdG8tZG91YmxlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9kZWFkLWludDMyLXRvLWRvdWJsZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oaW50LCBvKSB7CisgICAgdmFyIHggPSBpbnQ7
CisgICAgby5mID0geDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAg
ICB4ICs9IDAuNTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkKKyAgICBmb28oNDIsIHt9KTsKKwordmFyIG8gPSB7ZzogNDN9OworZm9vKDQ3LCBv
KTsKK2lmIChvLmYgIT0gNDcpCisgICAgdGhyb3cgIkVycm9yOiBvLmYgaXMgIiArIG8uZjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC11aW50MzItdG8tbnVt
YmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
ZGVhZC11aW50MzItdG8tbnVtYmVyLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9kZWFkLXVpbnQzMi10by1udW1iZXIuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKGEsIG8pIHsKKyAgICB2YXIgeCA9IGEg
Pj4+IDA7CisgICAgby5mID0geCB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsr
aSkKKyAgICAgICAgeCsrOworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgKytpKQorICAgIGZvbyg0Miwge30pOworCit2YXIgbyA9IHtnOiA0M307Citmb28o
NDcsIG8pOworaWYgKG8uZiAhPSA0NykKKyAgICB0aHJvdyAiRXJyb3I6IG8uZiBpcyAiICsgby5m
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220074</attachid>
            <date>2013-12-28 06:33:32 -0800</date>
            <delta_ts>2013-12-28 16:40:35 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>98187</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBA
QAorMjAxMy0xMi0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgREZHIGZvcndhcmQgZXhpdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpbmFsbHkgZ2V0cyByaWQgb2Yg
Zm9yd2FyZCBleGl0aW5nLiBGb3J3YXJkIGV4aXRpbmcgd2FzIGFsd2F5cyBhIGZyYWdpbGUgY29u
Y2VwdAorICAgICAgICBzaW5jZSBpdCBpbnZvbHZlZCB0aGUgY29tcGlsZXIgdHJ5aW5nIHRvIGZp
Z3VyZSBvdXQgaG93IHRvICJyb2xsIGZvcndhcmQiIHRoZQorICAgICAgICBleGVjdXRpb24gZnJv
bSBzb21lIERGRyBub2RlIHRvIHRoZSBuZXh0IGJ5dGVjb2RlIGluZGV4LiBJdCB3YXMgYWx3YXlz
IGVhc3kgdG8gZmluZAorICAgICAgICBjb3VudGVyZXhhbXBsZXMgd2hlcmUgaXQgYnJva2UsIGFu
ZCBpdCBoYXMgYWx3YXlzIHNlcnZlZCBhcyBhbiBvYnN0YWNsZSB0byBhZGRpbmcKKyAgICAgICAg
Y29tcGlsZXIgaW1wcm92ZW1lbnRzIC0gdGhlIGxhdGVzdCBiZWluZyBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEyNTUyMywgd2hpY2ggdHJpZWQgdG8KKyAgICAgICAgbWFrZSBEQ0Ugd29yayBmb3IgbW9y
ZSB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBmaW5pc2hlcyB0aGUgd29y
ayBvZiByZW1vdmluZyBmb3J3YXJkIGV4aXRpbmcuIEEgbG90IG9mIGZvcndhcmQgZXhpdGluZwor
ICAgICAgICB3YXMgYWxyZWFkeSByZW1vdmVkIGluIHNvbWUgb3RoZXIgYnVncywgYnV0IFNldExv
Y2FsIHN0aWxsIGRpZCBmb3J3YXJkIGV4aXRzLiBTZXRMb2NhbAorICAgICAgICBpcyBpbiBtYW55
IHdheXMgdGhlIGhhcmRlc3QgdG8gcmVtb3ZlLCBzaW5jZSB0aGUgZm9yd2FyZCBleGl0aW5nIG9m
IFNldExvY2FsIGFsc28KKyAgICAgICAgaW1wbGllZCB0aGF0IGFueSBjb252ZXJzaW9uIG5vZGVz
IGluc2VydGVkIGJlZm9yZSB0aGUgU2V0TG9jYWwgd291bGQgdGhlbiBhbHNvIGJlCisgICAgICAg
IG1hcmtlZCBhcyBmb3J3YXJkLWV4aXRpbmcuIEhlbmNlIFNldExvY2FsJ3MgZm9yd2FyZC1leGl0
aW5nIG1hZGUgYSBidW5jaCBvZiBvdGhlcgorICAgICAgICB0aGluZ3MgYWxzbyBmb3J3YXJkLWV4
aXRpbmcsIGFuZCB0aGlzIHdhcyBhbHdheXMgYSBzb3VyY2Ugb2Ygd2VpcmRvIGJ1Z3MuCisgICAg
ICAgIAorICAgICAgICBTZXRMb2NhbCBtdXN0IGJlIGFibGUgdG8gZXhpdCBpbiBjYXNlIGl0IHBl
cmZvcm1zIGEgaG9pc3RlZCB0eXBlIHNwZWN1bGF0aW9uLiBOb2RlcworICAgICAgICBpbnNlcnRl
ZCBqdXN0IGJlZm9yZSBTZXRMb2NhbCBtdXN0IGFsc28gYmUgYWJsZSB0byBleGl0IC0gZm9yIGV4
YW1wbGUgdHlwZSBjaGVjaworICAgICAgICBob2lzdGluZyBtYXkgaW5zZXJ0IGEgQ2hlY2tTdHJ1
Y3R1cmUsIG9yIGZpeHVwIHBoYXNlIG1heSBpbnNlcnQgc29tZXRoaW5nIGxpa2UKKyAgICAgICAg
SW50MzJUb0RvdWJsZS4gQnV0IGlmIGFueSBvZiB0aG9zZSBub2RlcyB0cmllZCB0byBiYWNrd2Fy
ZCBleGl0LCB0aGVuIHRoaXMgY291bGQgbGVhZAorICAgICAgICB0byB0aGUgcmVleGVjdXRpb24g
b2YgYSBzaWRlLWVmZmVjdGluZyBvcGVyYXRpb24sIGZvciBleGFtcGxlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGE6IENhbGwoLi4uKQorICAgICAgICAgICAgYjogU2V0TG9jYWwoQGEsIHIxKQor
ICAgICAgICAKKyAgICAgICAgRm9yIGEgbG9uZyB0aW1lIGl0IHNlZW1lZCBsaWtlIFNldExvY2Fs
ICpoYWQqIHRvIGV4aXQgZm9yd2FyZCBiZWNhdXNlIG9mIHRoaXMuIEJ1dAorICAgICAgICB0aGlz
IGNoYW5nZSBzaWRlLXN0ZXBzIHRoZSBwcm9ibGVtIGJ5IGNoYW5naW5nIHRoZSBCeXRlQ29kZVBh
cnNlciB0byBhbHdheXMgZW1pdCBhCisgICAgICAgIGtpbmQgb2YgInR3by1waGFzZSBjb21taXQi
IGZvciBzdG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzLiBOb3cgd2hlbiB0aGUgQnl0ZUNvZGVQYXJz
ZXIKKyAgICAgICAgd2lzaGVzIHRvIHN0b3JlIHRvIGEgbG9jYWwsIGl0IGZpcnN0IGVtaXRzIGEg
TW92SGludCBhbmQgdGhlbiBlbnF1ZXVlcyBhIFNldExvY2FsLgorICAgICAgICBUaGUgU2V0TG9j
YWwgaXNuJ3QgYWN0dWFsbHkgZW1pdHRlZCB1bnRpbCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0
IGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9uICh3aGljaCB0aGUgZXhjZXB0aW9uIG9mIG9w
X2VudGVyIGFuZCBvcF9yZXQsIHdoaWNoIGVtaXQgdGhlaXJzIGltbWVkaWF0ZWx5CisgICAgICAg
IHNpbmNlIGl0J3MgYWx3YXlzIHNhZmUgdG8gcmVleGVjdXRlIHRob3NlIGJ5dGVjb2RlIGluc3Ry
dWN0aW9ucyBhbmQgc2luY2UgZGVmZXJyaW5nCisgICAgICAgIFNldExvY2FscyB3b3VsZCBiZSB3
ZWlyZCB0aGVyZSAtIG9wX2VudGVyIGhhcyBtYW55IFNldExvY2FscyBhbmQgb3BfcmV0IGlzIGEg
c2V0CisgICAgICAgIGZvbGxvd2VkIGJ5IGEganVtcCBpbiBjYXNlIG9mIGlubGluaW5nLCBzbyB3
ZSdkIGhhdmUgdG8gZW1pdCB0aGUgU2V0TG9jYWwgImFmdGVyIiB0aGUKKyAgICAgICAganVtcCBh
bmQgdGhhdCB3b3VsZCBiZSBhd2t3YXJkKS4gVGhpcyBtZWFucyB0aGF0IHRoZSBhYm92ZSBJUiBz
bmlwcGV0IHdvdWxkIGxvb2sKKyAgICAgICAgc29tZXRoaW5nIGxpa2U6CisgICAgICAgIAorICAg
ICAgICAgICAgYTogQ2FsbCguLi4sIGJjIzQyKQorICAgICAgICAgICAgYjogTW92SGludChAYSwg
cjEsIGJjIzQyKQorICAgICAgICAgICAgYzogU2V0TG9jYWwoQGEsIHIxLCBiYyM0NykKKyAgICAg
ICAgCisgICAgICAgIFdoZXJlIHRoZSBTZXRMb2NhbCBleGl0cyAiYmFja3dhcmRzIiBidXQgYXBw
ZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGJ5dGVjb2RlCisgICAgICAgIGluc3Ry
dWN0aW9uLiBUaGlzIG1lYW5zIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoYXQgU2V0TG9j
YWwsIHRoZSBPU1IgZXhpdAorICAgICAgICBhbmFseXNpcyBhbHJlYWR5IGtub3dzIHRoYXQgcjEg
aXMgYXNzb2NpYXRlZCB3aXRoIEBhLCBhbmQgaXQgbWVhbnMgdGhhdCB0aGUgU2V0TG9jYWwKKyAg
ICAgICAgb3IgYW55dGhpbmcgaG9pc3RlZCBhYm92ZSBpdCBjYW4gZXhpdCBiYWNrd2FyZHMgYXMg
bm9ybWFsLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBtZWFucyB0aGF0IHRo
ZSAiZm9yd2FyZCByZXdpcmluZyIgY2FuIGJlIGtpbGxlZC4gUHJldmlvdXNseSwgd2UgbWlnaHQK
KyAgICAgICAgaGF2ZSBpbnNlcnRlZCBhIGNvbnZlcnNpb24gbm9kZSBvbiBTZXRMb2NhbCBhbmQg
dGhlbiB0aGUgU2V0TG9jYWwgZGllZCAoaS5lLiB0dXJuZWQKKyAgICAgICAgaW50byBhIE1vdkhp
bnQpIGFuZCB0aGUgY29udmVyc2lvbiBub2RlIGVpdGhlciBkaWVkIGNvbXBsZXRlbHkgb3IgaGFk
IGl0cyBsaWZldGltZQorICAgICAgICB0cnVuY2F0ZWQgdG8gYmUgbGVzcyB0aGFuIHRoZSBhY3R1
YWwgdmFsdWUncyBieXRlY29kZSBsaWZldGltZS4gVGhpcyBubyBsb25nZXIgaGFwcGVucworICAg
ICAgICBzaW5jZSBjb252ZXJzaW9uIG5vZGVzIGFyZSBvbmx5IGluc2VydGVkIGF0IFNldExvY2Fs
cy4KKyAgICAgICAgCisgICAgICAgIE1vcmUgcHJlY2lzZWx5LCB0aGlzIGNoYW5nZSBpbnRyb2R1
Y2VzIHR3byBsYXdzIHRoYXQgd2Ugd2VyZSBiYXNpY2FsbHkgYWxyZWFkeQorICAgICAgICBmb2xs
b3dpbmcgYW55d2F5OgorICAgICAgICAKKyAgICAgICAgMSkgQSBNb3ZIaW50J3MgY2hpbGQgc2hv
dWxkIG5ldmVyIGJlIGNoYW5nZWQgZXhjZXB0IGlmIGFsbCBvdGhlciB1c2VzIG9mIHRoYXQgY2hp
bGQKKyAgICAgICAgICAgYXJlIGFsc28gcmVwbGFjZWQuIFNwZWNpZmljYWxseSwgdGhpcyBwcm9o
aWJpdHMgaW5zZXJ0aW9uIG9mIGNvbnZlcnNpb24gbm9kZXMgYXQKKyAgICAgICAgICAgTW92SGlu
dHMuCisgICAgICAgIAorICAgICAgICAyKSBBbnl0aW1lIGFueSBjaGlsZCBpcyByZXBsYWNlZCB3
aXRoIHNvbWV0aGluZyBlbHNlLCBhbmQgYWxsIG90aGVyIHVzZXMgYXJlbid0IGFsc28KKyAgICAg
ICAgICAgcmVwbGFjZWQsIHdlIG11c3QgaW5zZXJ0IGEgUGhhbnRvbSB1c2Ugb2YgdGhlIG9yaWdp
bmFsIGNoaWxkLgorCisgICAgICAgIFRoaXMgaXMgYSBzbGlnaHQgY29tcGlsZS10aW1lIHJlZ3Jl
c3Npb24gYnV0IGhhcyBubyBlZmZlY3Qgb24gY29kZS1nZW4uIEl0IHVubG9ja3MgYQorICAgICAg
ICBidW5jaCBvZiBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBzbyBJIHRoaW5rIGl0J3Mgd29y
dGggaXQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0aW9uQ291bnQpOgor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yOjpBcnJheWlmeVNsb3dQYXRo
R2VuZXJhdG9yKToKKyAgICAgICAgKiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFn
YXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6ZWxpbWluYXRl
KToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNs
b2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6
OkRDRVBoYXNlOjpmaXh1cEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Y2xl
YW5WYXJpYWJsZXMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVj
dEludDMyVG9Eb3VibGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTElDTVBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TElD
TVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpiZWxvbmdzSW5NaW5p
ZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmNvbnN0YW50TnVt
YmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6Cisg
ICAgICAgICogZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1Zh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpjb252ZXJ0VG9QaGFudG9tKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojpjb252ZXJ0VG9QaGFudG9tVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9JZGVudGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udGFpbnNNb3ZI
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNVbmxpbmtlZExvY2FsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjp3aWxsSGF2ZUNvZGVHZW5Pck9TUik6CisgICAgICAgICogZGZn
L0RGR05vZGVGbGFncy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZHVtcE5vZGVGbGFncyk6Cisg
ICAgICAgICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5o
OgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXRCYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3Bh
Z2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OmRv
RG91YmxlVm90aW5nKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUludDMyVG9Eb3VibGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkZXRlY3RQZWVw
SG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5lZWRzVHlw
ZUNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRT
dHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhh
c2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGRmZy9ERkdWYWxp
ZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlQ1BTKToKKyAg
ICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0
QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0
TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTW92SGlu
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVab21iaWVIaW50
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUludDMyVG9Eb3Vi
bGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBlQ2hlY2spOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6ZW1pdE9TUkV4aXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dC5jcHA6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvZGVhZC1pbnQzMi10by1kb3VibGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvZGVhZC11aW50MzItdG8tbnVtYmVyLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisKIDIwMTMtMTItMjUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjEwMzMgYW5kIHIx
NjEwNzQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmluCiAKICAgICBpZiAoY29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7
CisgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7CiAgICAgaWYgKHRoaXMt
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCkKICAgICAgICAgb3V0LnByaW50KCIgKFNBQkkpIik7CiAgICAgaWYgKG93bmVyRXhlY3V0
YWJsZSgpLT5uZXZlcklubGluZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNyArMjQ0LDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCB1c2VzT3Bjb2RlKE9wY29kZUlEKTsKIAotICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uQ291bnQoKSB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0K
KyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVj
dGlvbnMuc2l6ZSgpOyB9CiAKICAgICBpbnQgYXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShzaXpl
X3QgYXJndW1lbnQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsMTAgKzE5NSwxMCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCi0gICAgY2FzZSBNb3ZIaW50OgotICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0g
ICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEgTW92SGludCBpcyBlZmZlY3Rp
dmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKLSAgICAgICAgLy8gd2FzIGRlYWQuCisg
ICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcu
IEEgTW92SGludCBvbmx5IGluZm9ybXMgdXMgYWJvdXQgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVk
CisgICAgICAgIC8vIGluIGJ5dGVjb2RlLCBidXQgdGhpcyBjb2RlIGlzIGp1c3QgY29uY2VybmVk
IHdpdGggd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcgZHVyaW5nCisgICAgICAgIC8vIERGRyBl
eGVjdXRpb24uCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xNTgzLDYgKzE1
ODMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tOgorICAgIGNhc2UgQ2hlY2s6
CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgog
ICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDYg
KzMzMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyZXMgb2Yg
YW5vdGhlciB2YXJpYWJsZS4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBNb3ZIaW50cyBhdCBhbGwsIHNpbmNlIHRoZXkg
cmVwcmVzZW50IHdoYXQgaGFwcGVucworICAgICAgICAgICAgICAgICAgICAvLyBpbiBieXRlY29k
ZS4gV2UgcmVtYXRlcmlhbGl6ZSBhcmd1bWVudHMgb2JqZWN0cyBvbiBPU1IgZXhpdCBhbnl3YXku
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1l
bnRzVXNlcyhub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEzICs2
MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6Ci0gICAgICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPmJhY2t3YXJkU3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAgICAgICAg
ICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPmJhY2t3YXJkU3BlY3Vs
YXRpb25DaGVjayhCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG1f
YmFzZUdQUiksIDApOworICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPnNwZWN1
bGF0aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCht
X2Jhc2VHUFIpLCAwKTsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2
ICsxODcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIENoZWNrOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6CiAgICAg
ICAgIGNhc2UgQml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2MTA3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzIsMTUgKzIzMiwxOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAg
ICAgfQogICAgIAotICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgU2V0T25FbnRyeSB9Owor
ICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgSW1tZWRpYXRlU2V0IH07CiAgICAgTm9kZSog
c2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVu
dD8KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJu
IHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKLQotICAgICAgICAvLyBNdXN0
IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSwgc2V0
TW9kZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQub2Zmc2V0
KCkpLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZCA9
IERlbGF5ZWRTZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
c2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKKyAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBl
bmQoZGVsYXllZCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzLCBzZXRNb2RlKTsKICAgICB9CiAK
ICAgICBOb2RlKiBzZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRN
b2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC0xMTIxLDYgKzExMjUsMjcgQEAgcHJpdmF0ZToK
ICAgICB9OwogICAgIAogICAgIElubGluZVN0YWNrRW50cnkqIG1faW5saW5lU3RhY2tUb3A7Cisg
ICAgCisgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAgICAgIAorICAgICAgICBE
ZWxheWVkU2V0TG9jYWwoKSB7IH0KKyAgICAgICAgRGVsYXllZFNldExvY2FsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9vcGVyYW5kKG9wZXJh
bmQpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTm9kZSogZXhlY3V0ZShCeXRlQ29kZVBhcnNlciogcGFyc2VyLCBT
ZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X29wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNl
dEFyZ3VtZW50KG1fb3BlcmFuZCwgbV92YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgICAgICByZXR1
cm4gcGFyc2VyLT5zZXRMb2NhbChtX29wZXJhbmQsIG1fdmFsdWUsIHNldE1vZGUpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExv
Y2FsUXVldWU7CiAKICAgICAvLyBIYXZlIHdlIGJ1aWx0IG9wZXJhbmQgbWFwcz8gV2UgaW5pdGlh
bGl6ZSB0aGVtIGxhemlseSwgYW5kIG9ubHkgd2hlbiBkb2luZwogICAgIC8vIGlubGluaW5nLgpA
QCAtMTMyNSw5ICsxMzUwLDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZQogICAgICAgICA9PSBjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpOwogICAgIGlm
IChjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpIHsKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KEpTU3RhY2s6OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIGNhbGxU
YXJnZXROb2RlLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBzY29wZVZhcmlhYmxlID0KLSAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6U2NvcGVDaGFpbiksIGFkZFRvR3JhcGgoR2V0U2NvcGUsIGNh
bGxUYXJnZXROb2RlKSktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihKU1N0YWNrOjpTY29wZUNoYWluKSwgYWRkVG9HcmFwaChHZXRTY29wZSwg
Y2FsbFRhcmdldE5vZGUpLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgCiAgICAgICAgIGNhbGxlZVZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1
ZSk7CiAgICAgICAgIHNjb3BlVmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsK
QEAgLTE4NzIsNiArMTg5NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1f
c2V0TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICBtX3NldExvY2FsUXVldWUu
cmVzaXplKDApOworICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBk
ZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBsaW1pdCkgewogICAg
ICAgICAgICAgLy8gT3JkaW5hcmlseSB3ZSB3YW50IHRvIHBsYW50IGEganVtcC4gQnV0IHJlZnVz
ZSB0byBkbyB0aGlzIGlmIHRoZSBibG9jayBpcwpAQCAtMTkwMyw3ICsxOTMyLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2VudGVy
OgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5lZC4KICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPm1fbnVtVmFyczsgKytpKQotICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgU2V0T25FbnRyeSk7CisgICAgICAgICAg
ICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25zdGFudFVuZGVmaW5lZCgp
LCBJbW1lZGlhdGVTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW50ZXIpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBAIC0yOTA4LDcgKzI5Mzcs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCk7CiAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFj
a1RvcC0+bV9yZXR1cm5WYWx1ZS5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgICAgIHNldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICAgICAgc2V0RGly
ZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlhdGVTZXQpOwogICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcmV0dXJuaW5nIGZyb20gdGhlIGZp
cnN0IGJsb2NrLCB0aGVuIHdlJ3JlIGRvbmUgcGFyc2luZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1
MSw3ICsxMDUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBBU1NFUlQobm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3MocGhhbnRvbVR5cGUpOworICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CiAgICAgICAgIGlmIChwaGFu
dG9tVHlwZSA9PSBQaGFudG9tKQogICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50
b21DaGlsZHJlbihub2RlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw5ICsxMjks
OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBD
b25zdGFudFN0b3JhZ2VQb2ludGVyOgogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAgICAgY2Fz
ZSBEb3VibGVBc0ludDMyOgorICAgIGNhc2UgQ2hlY2s6CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNh
c2UgWm9tYmllSGludDoKICAgICBjYXNlIFVwc2lsb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw4ICsxODIsNiBAQCBl
bnVtIFJlZkNvdW50U3RhdGUgewogCiBlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRv
bWF0aWNPcGVyYW5kU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9OwogCi1l
bnVtIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNw
ZWN1bGF0aW9uIH07Ci0KIGVudW0gUHJvb2ZTdGF0dXMgeyBOZWVkc0NoZWNrLCBJc1Byb3ZlZCB9
OwogCiBpbmxpbmUgYm9vbCBpc1Byb3ZlZChQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsx
MTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9u
IGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2Rl
LT5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVtb3ZlRWRnZSgwKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBj
aGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVFeGl0c0ZvcndhcmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhbnRvbS5tZXJn
ZUZsYWdzKE5vZGVFeGl0c0ZvcndhcmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBwaGFudG9tKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZHJlbi5j
aGlsZDEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgY2hp
bGRyZW4pOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRn
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2Uo
KSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsMTIg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGVwdGhGaXJzdC5zaXpl
KCk7IGktLTspCiAgICAgICAgICAgICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsKICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KQogICAgICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNsZWFuVmFyaWFibGVzKG1fZ3Jh
cGgubV9hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1f
cmVmQ291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CkBAIC0xNTIsNiArMTU2LDM2IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgICAgICBjYXNlIFNT
QToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVGhyZWFk
ZWRDUFM6IHsKKyAgICAgICAgICAgIC8vIENsZWFuIHVwIHZhcmlhYmxlIGxpbmtzIGZvciB0aGUg
YmxvY2suIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgdGhlIGFjdHVhbCBEQ0UKKyAgICAgICAg
ICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0byBzZWUgR2V0TG9jYWxzLCBzbyB3ZSBjYW4gYnlwYXNz
IHRoZW0gaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUKKyAgICAgICAgICAgIC8vIHZhcnMtYXQtdGFp
bCBwb2ludCB0byBhIEdldExvY2FsLCB0aGUgR2V0TG9jYWwgaXMgZGVhZCwgYnV0IHRoZSBQaGkg
aXQgcG9pbnRzCisgICAgICAgICAgICAvLyB0byBpcyBhbGl2ZS4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IDA7IHBoaUluZGV4IDwgYmxvY2stPnBo
aXMuc2l6ZSgpOyArK3BoaUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+cGhp
c1twaGlJbmRleF0tPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGNvdWxkIGFjdHVhbGx5IGZyZWUgbm9kZXMgaGVyZS4gRXhjZXB0IHRoYXQgaXQg
cHJvYmFibHkKKyAgICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIsIHNpbmNlIHdl
IGRvbid0IGFkZCBhbnkgbm9kZXMgYWZ0ZXIgdGhpcyBwaGFzZS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjIzOQorICAg
ICAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleC0tXSA9IGJsb2NrLT5waGlzLmxh
c3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnBoaXMucmVtb3ZlTGFzdCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2xlYW5WYXJpYWJsZXMoYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBjbGVh
blZhcmlhYmxlcyhibG9jay0+dmFyaWFibGVzQXRUYWlsKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7
IGluZGV4SW5CbG9jay0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChp
bmRleEluQmxvY2spOwpAQCAtMTU5LDM3ICsxOTMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2Ug
TW92SGludDogewotICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBk
ZWFkIGJ1dCBpdHMKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRo
ZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAmJiBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5jaGlsZDEoKS0+b3AoKSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMSgpLT5j
aGlsZDEoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91
bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhab21iaWVIaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpID0gRWRnZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhp
bnRBbmRDaGVjayk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsK
LSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBEQ0UgcnVucyBvbmx5IG9uY2UuCisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OiB7
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7IGNoaWxkSWR4KyspIHsKQEAgLTIyOCw2ICsyNDgsMjcgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYWJsZXNWZWN0b3JUeXBl
PgorICAgIHZvaWQgY2xlYW5WYXJpYWJsZXMoVmFyaWFibGVzVmVjdG9yVHlwZSYgdmFyaWFibGVz
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFyaWFibGVzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IHZhcmlhYmxlc1tpXTsKKyAgICAgICAgICAg
IGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFBoYW50b20gJiYgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2Fs
KSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAgICAgIGlm
IChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
c1tpXSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlc1tpXSA9IDA7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fd29ya2xpc3Q7CiAg
ICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg2LDcgKzg4Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFBo
YW50b206Ci0gICAgICAgIGNhc2UgSWRlbnRpdHk6IHsKKyAgICAgICAgY2FzZSBJZGVudGl0eToK
KyAgICAgICAgY2FzZSBDaGVjazogewogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1ldGlj
KCkpCkBAIC05MDcsOSArOTA4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0Ogog
ICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAg
ICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1
cm46CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKQEAgLTk1MSw3ICs5NDks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlPFN0cmlu
Z1VzZT4obm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKLQorICAgICAg
ICAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9w
IGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJz
IGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKQEAgLTEwMDUsNiAr
MTAwMyw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVj
azoKICAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNl
IFR5cGVkQXJyYXlXYXRjaHBvaW50OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNh
c2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVs
dDoKQEAgLTEwMTIsNyArMTAxMiw4IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgb2Jz
ZXJ2ZVVudHlwZWRFZGdlKTsKKyAgICAgICAgaWYgKCFub2RlLT5jb250YWluc01vdkhpbnQoKSkK
KyAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIG9ic2Vy
dmVVbnR5cGVkRWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgb2JzZXJ2ZVVudHlwZWRFZGdl
KE5vZGUqLCBFZGdlJiBlZGdlKQpAQCAtMTQ3OCw3ICsxNDc5LDcgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGlmIChpc0RvdWJsZSh1c2VLaW5kKSkgewogICAgICAgICAgICAgaWYgKGVkZ2Ut
PnNob3VsZFNwZWN1bGF0ZUludDMyRm9yQXJpdGhtZXRpYygpKSB7Ci0gICAgICAgICAgICAgICAg
aW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoZWRnZSwgdXNlS2luZCwgbV9jdXJyZW50Tm9kZS0+c3Bl
Y3VsYXRpb25EaXJlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJs
ZU5vZGUoZWRnZSwgdXNlS2luZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xNDkxLDcgKzE0OTIsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgSW50NTJU
b0RvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwg
RWRnZShlZGdlLm5vZGUoKSwgTnVtYmVyVXNlKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihtX2N1cnJlbnROb2RlLT5zcGVjdWxhdGlvbkRpcmVjdGlv
bigpKTsKICAgICAgICAgICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTE1NDUsNyArMTU0NSw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTIsIEludDUy
VG9WYWx1ZSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBFZGdl
KGVkZ2Uubm9kZSgpLCBVbnR5cGVkVXNlKSk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFNwZWN1
bGF0aW9uRGlyZWN0aW9uKG1fY3VycmVudE5vZGUtPnNwZWN1bGF0aW9uRGlyZWN0aW9uKCkpOwog
ICAgICAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMTU4NywxMyArMTU4NiwxMSBAQCBwcml2YXRlOgogICAgICAg
ICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBp
bmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1i
ZXJVc2UpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91YmxlLCBJ
bnQzMlRvRG91YmxlLAogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRn
ZShlZGdlLm5vZGUoKSwgTnVtYmVyVXNlKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9y
d2FyZFNwZWN1bGF0aW9uKQotICAgICAgICAgICAgcmVzdWx0LT5tZXJnZUZsYWdzKE5vZGVFeGl0
c0ZvcndhcmQpOwogICAgICAgICAKICAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5k
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJ
Q01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vICAgdGltZSBhbmQgcHJlc2VydmUgc29tZSBraW5kIG9mIHNhbml0eSwgaWYgd2Ug
aG9pc3Qgc29tZXRoaW5nIHRoYXQgbXVzdCBleGl0LgogICAgICAgICAvLwogICAgICAgICAvLyBB
bHNvLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRvOgotICAgICAgICAvLyAtIENsZWFyIE5vZGVFeGl0
c0ZvcndhcmQgZm9yIGFueSBub2RlcyB3ZSBob2lzdGVkLgogICAgICAgICAvLyAtIFVwZGF0ZSB0
aGUgc3RhdGUtYXQtdGFpbCB3aXRoIHRoZSBub2RlIHdlIGhvaXN0ZWQsIHNvIGZ1dHVyZSBob2lz
dCBjYW5kaWRhdGVzCiAgICAgICAgIC8vICAga25vdyBhYm91dCBhbnkgdHlwZSBjaGVja3Mgd2Ug
aG9pc3RlZC4KICAgICAgICAgLy8KQEAgLTIzMCw4ICsyMjksNiBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgZGF0YS5wcmVIZWFkZXItPmluc2VydEJlZm9yZUxhc3Qobm9kZSk7CiAgICAg
ICAgIG5vZGUtPm1pc2Mub3duZXIgPSBkYXRhLnByZUhlYWRlcjsKLSAgICAgICAgTm9kZUZsYWdz
IGRpZEV4aXRGb3J3YXJkID0gbm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQ7Ci0gICAg
ICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7CiAgICAgICAgIG5vZGUtPmNv
ZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gZGF0YS5wcmVIZWFkZXItPmxhc3QoKS0+Y29kZU9yaWdp
bkZvckV4aXRUYXJnZXQ7CiAgICAgICAgIAogICAgICAgICAvLyBNb2RpZnkgdGhlIHN0YXRlcyBh
dCB0aGUgZW5kIG9mIHRoZSBwcmVIZWFkZXIgb2YgdGhlIGxvb3Agd2UgaG9pc3RlZCB0bywKQEAg
LTI1Niw3ICsyNTMsNiBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbm9kZVJlZiA9
IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9k
ZS0+Y2hpbGRyZW4pOwotICAgICAgICBub2RlUmVmLT5tZXJnZUZsYWdzKGRpZEV4aXRGb3J3YXJk
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAJKHJldmlzaW9uIDE2MTA3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTUgKzM4LDEzIEBAIE1pbmlmaWVkTm9kZSBNaW5pZmllZE5vZGU6
OmZyb21Ob2RlKE5vZGUKICAgICBNaW5pZmllZE5vZGUgcmVzdWx0OwogICAgIHJlc3VsdC5tX2lk
ID0gTWluaWZpZWRJRChub2RlKTsKICAgICByZXN1bHQubV9vcCA9IG5vZGUtPm9wKCk7Ci0gICAg
aWYgKGhhc0NoaWxkKG5vZGUtPm9wKCkpKQotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9
IE1pbmlmaWVkSUQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKS5tX2lkOwotICAgIGVsc2UgaWYgKGhh
c0NvbnN0YW50TnVtYmVyKG5vZGUtPm9wKCkpKQotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5m
byA9IG5vZGUtPmNvbnN0YW50TnVtYmVyKCk7CisgICAgaWYgKGhhc0NvbnN0YW50TnVtYmVyKG5v
ZGUtPm9wKCkpKQorICAgICAgICByZXN1bHQubV9pbmZvID0gbm9kZS0+Y29uc3RhbnROdW1iZXIo
KTsKICAgICBlbHNlIGlmIChoYXNXZWFrQ29uc3RhbnQobm9kZS0+b3AoKSkpCi0gICAgICAgIHJl
c3VsdC5tX2NoaWxkT3JJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZS0+d2Vha0Nv
bnN0YW50KCkpOworICAgICAgICByZXN1bHQubV9pbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+d2Vha0NvbnN0YW50KCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hpbGRPcklu
Zm8gPSAwOworICAgICAgICByZXN1bHQubV9pbmZvID0gMDsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5v
ZGUuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
aW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDkgQEAgaW5saW5lIGJv
b2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIHN3aXRjaCAodHlwZSkgewogICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgIGNhc2UgVmFs
dWVUb0ludDMyOgotICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOgotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6
Ci0gICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgY2FzZSBJbnQ1MlRvRG91YmxlOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoIXBlcm1pdHNPU1JC
YWNrd2FyZFJld2lyaW5nKHR5cGUpICYmICFwZXJtaXRzT1NSRm9yd2FyZFJld2lyaW5nKHR5cGUp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KQEAgLTY2LDE0ICs1OSw2IEBAIHB1
YmxpYzoKICAgICBNaW5pZmllZElEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogICAgIE5v
ZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQogICAgIAotICAgIGJvb2wgaGFzQ2hp
bGQxKCkgY29uc3QgeyByZXR1cm4gaGFzQ2hpbGQobV9vcCk7IH0KLSAgICAKLSAgICBNaW5pZmll
ZElEIGNoaWxkMSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFzQ2hpbGQobV9vcCkp
OwotICAgICAgICByZXR1cm4gTWluaWZpZWRJRDo6ZnJvbUJpdHMobV9jaGlsZE9ySW5mbyk7Ci0g
ICAgfQotICAgIAogICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNDb25z
dGFudE51bWJlcigpIHx8IGhhc1dlYWtDb25zdGFudCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXND
b25zdGFudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGhhc0NvbnN0YW50TnVtYmVyKG1fb3ApOyB9
CkBAIC04MSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjb25zdGFudE51bWJlcigp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnROdW1iZXIobV9vcCkpOwot
ICAgICAgICByZXR1cm4gbV9jaGlsZE9ySW5mbzsKKyAgICAgICAgcmV0dXJuIG1faW5mbzsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBoYXNXZWFrQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNX
ZWFrQ29uc3RhbnQobV9vcCk7IH0KQEAgLTg5LDcgKzc0LDcgQEAgcHVibGljOgogICAgIEpTQ2Vs
bCogd2Vha0NvbnN0YW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNXZWFrQ29u
c3RhbnQobV9vcCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fY2hp
bGRPckluZm8pOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1faW5mbyk7
CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBNaW5pZmllZElEIGdldElEKE1pbmlmaWVkTm9kZSog
bm9kZSkgeyByZXR1cm4gbm9kZS0+aWQoKTsgfQpAQCAtOTksMjAgKzg0LDYgQEAgcHVibGljOgog
ICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgaGFzQ2hpbGQoTm9kZVR5cGUg
dHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgotICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6Ci0gICAgICAgIGNhc2UgSW50
NTJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihOb2RlVHlw
ZSB0eXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gSlNDb25zdGFudDsKQEAgLTEy
Myw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIE1pbmlmaWVkSUQgbV9pZDsK
LSAgICB1aW50cHRyX3QgbV9jaGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlmaWVkIGdy
YXBoIGhhdmUgb25seSBvbmUgY2hpbGQgZWFjaC4KKyAgICB1aW50cHRyX3QgbV9pbmZvOwogICAg
IE5vZGVUeXBlIG1fb3A7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDYgQEAgYm9vbCBOb2RlOjpoYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmIAogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBH
ZXRBcmd1bWVudDoKICAgICBjYXNlIFNldExvY2FsOgotICAgIGNhc2UgTW92SGludDoKLSAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBTZXRB
cmd1bWVudDoKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNTkg
KzI3NCwyNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBmaWx0ZXJGbGFncyh+Zmxh
Z3MpOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBzcGVjdWxhdGlvbkRp
cmVjdGlvbigpCi0gICAgewotICAgICAgICBpZiAoZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQp
Ci0gICAgICAgICAgICByZXR1cm4gRm9yd2FyZFNwZWN1bGF0aW9uOwotICAgICAgICByZXR1cm4g
QmFja3dhcmRTcGVjdWxhdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRTcGVjdWxhdGlv
bkRpcmVjdGlvbihTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAgICBjYXNlIEZvcndhcmRTcGVjdWxhdGlvbjoK
LSAgICAgICAgICAgIG1lcmdlRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNhc2UgQmFja3dhcmRTcGVjdWxhdGlvbjoKLSAgICAgICAgICAgIGNs
ZWFyRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCiAg
ICAgdm9pZCBzZXRPcEFuZERlZmF1bHRGbGFncyhOb2RlVHlwZSBvcCkKICAgICB7CiAgICAgICAg
IG1fb3AgPSBvcDsKICAgICAgICAgbV9mbGFncyA9IGRlZmF1bHRGbGFncyhvcCk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3MoTm9kZVR5cGUgb3ApCi0gICAg
ewotICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKLSAgICAgICAg
c2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVja2VkKG9wKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFnc1VuY2hlY2tlZChOb2RlVHlwZSBvcCkKLSAg
ICB7Ci0gICAgICAgIG1fb3AgPSBvcDsKLSAgICAgICAgbV9mbGFncyA9IChkZWZhdWx0RmxhZ3Mo
b3ApICYgfk5vZGVFeGl0c0ZvcndhcmQpIHwgKG1fZmxhZ3MgJiBOb2RlRXhpdHNGb3J3YXJkKTsK
LSAgICB9Ci0KICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b20oKQogICAgIHsKLSAgICAgICAgc2V0
T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzKFBoYW50b20pOworICAgICAgICBzZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21VbmNo
ZWNrZWQoKQogICAgIHsKLSAgICAgICAgc2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVj
a2VkKFBoYW50b20pOworICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAg
ICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0lkZW50aXR5KCkKICAgICB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNoaWxkMSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNoaWxkMigpKTsK
LSAgICAgICAgc2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzKElkZW50aXR5KTsKKyAgICAgICAg
c2V0T3BBbmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOwogICAgIH0KIAogICAgIGJvb2wgbXVzdEdl
bmVyYXRlKCkKQEAgLTUzMSw5ICs0OTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgYm9vbCBjb250
YWluc01vdkhpbnQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7Ci0gICAgICAgIGNh
c2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50
QW5kQ2hlY2s6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTY3LDYgKzUzMyw4IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoK
ICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExOTAsMTEgKzEx
NTgsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNh
c2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICBjYXNlIFZh
bHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgY2FzZSBE
b3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBQaGFudG9tOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw5ICs5Niw2IEBAIHZvaWQgZHVtcE5vZGVGbGFncyhQcmludFN0cmVhbSYgYWN0dWFsT3UK
ICAgICBpZiAoIShmbGFncyAmIE5vZGVEb2VzTm90RXhpdCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgIkNhbkV4aXQiKTsKICAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlRXhpdHNGb3J3YXJk
KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJOb2RlRXhpdHNGb3J3YXJkIik7Ci0gICAgCiAg
ICAgQ1N0cmluZyBzdHJpbmcgPSBvdXQudG9DU3RyaW5nKCk7CiAgICAgaWYgKCFzdHJpbmcubGVu
Z3RoKCkpCiAgICAgICAgIGFjdHVhbE91dC5wcmludCgiPGVtcHR5PiIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw5ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2RlZmlu
ZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgICAgICAgICAweDQwMDAKIAotI2RlZmluZSBOb2Rl
RXhpdHNGb3J3YXJkICAgICAgICAgICAgICAgICAweDgwMDAKLQotI2RlZmluZSBOb2RlSXNTdGF0
aWNDb25zdGFudCAgICAgICAgICAgIDB4MTAwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBwYXJzZXIs
IHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhlbmNlIGNv
dWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgorI2RlZmluZSBOb2RlSXNTdGF0aWNDb25zdGFu
dCAgICAgICAgICAgICAweDgwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBwYXJzZXIsIHRvIGRldGVy
bWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhlbmNlIGNvdWxkIGJlIGZv
bGRlZCBhdCBwYXJzZS10aW1lLgogCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVGbGFnczsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTYxMDcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NywxMiArNTcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIC8qIEFueSB0d28gbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc2FtZSBQaGkgZ3JhcGgg
d2lsbCBzaGFyZSB0aGUgc2FtZSAqL1wKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0
aHVzIHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBOb2Rl
UmVzdWx0SlMpIFwKLSAgICBtYWNybyhTZXRMb2NhbCwgTm9kZUV4aXRzRm9yd2FyZCkgXAotICAg
IG1hY3JvKE1vdkhpbnRBbmRDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0Zvcndh
cmQpIFwKKyAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVE
b2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIG1hY3JvKEdldEFyZ3VtZW50LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNr
LCAwKSAvKiBVc2VkIGlmIHdlIHdhbnQganVzdCBhIHR5cGUgY2hlY2sgYnV0IG5vdCBsaXZlbmVz
cy4gRENFIGVpdGhlcnMga2lsbHMgdGhpcyBvciBjb252ZXJ0cyBpdCB0byBQaGFudG9tLiAqL1wK
ICAgICBtYWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikg
XAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwK
ICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApA
QCAtMzE4LDgwICszMTgsNiBAQCBpbmxpbmUgTm9kZUZsYWdzIGRlZmF1bHRGbGFncyhOb2RlVHlw
ZSBvCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhO
b2RlVHlwZSBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBJZGVudGl0eToKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICBj
YXNlIEludDUyVG9Eb3VibGU6Ci0gICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgb25seSBub2RlIHdo
ZXJlIHdlIGRvOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgYjogVUludDMyVG9OdW1iZXIo
QGEpCi0gICAgICAgIC8vICAgICBjOiBTZXRMb2NhbChAYikKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gYW5kIHRoZW4gYWxzbyBoYXZlIHNvbWUgdXNlcyBvZiBAYSB3aXRob3V0IFBoYW50b20naW5n
IEBiLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcmlvcml0eSB3aXRoIHdoaWNoIHdl
IHNob3VsZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGUgZm9yIGZvcndhcmQKLS8vIHJld2lyaW5nLiBI
aWdoZXIgaXMgYmV0dGVyLiBaZXJvIG1lYW5zIHRoYXQgdGhlIG5vZGUgaXMgbm90IHVzZWZ1bCBm
b3IgcmV3aXJpbmcuCi0vLyBCeSBjb252ZW50aW9uLCB3ZSB1c2UgMTAwIHRvIG1lYW4gdGhhdCB0
aGUgbm9kZSBpcyB0b3RhbGx5IGVxdWl2YWxlbnQgdG8gaXRzCi0vLyBpbnB1dCB3aXRoIG5vIGlu
Zm9ybWF0aW9uIGxvc3MuCi1pbmxpbmUgdW5zaWduZWQgZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9u
U2NvcmUoTm9kZVR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgSWRlbnRp
dHk6Ci0gICAgICAgIC8vIFdlIHNob3VsZG4ndCBzZWUgdGhlc2UgYnkgdGhlIHRpbWUgd2UgZ2V0
IHRvIE9TUiBldmVuIHRob3VnaCBpdCBjbGVhcmx5Ci0gICAgICAgIC8vIGlzIGEgcGVyZmVjdCBp
ZGVudGl0eSBmdW5jdGlvbi4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBEb3VibGVBc0ludDMyOgot
ICAgICAgICAvLyBUaGlzIHNwZWN1bGF0ZXMgdGhhdCB0aGUgaW5jb21pbmcgZG91YmxlIGlzIGNv
bnZlcnRpYmxlIHRvIGFuIGludDMyLiBTbwotICAgICAgICAvLyBpdHMgcmVzdWx0IGlzIHRvdGFs
bHkgZXF1aXZhbGVudC4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBJ
bnQzMlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGNvbnZlcnRzIGFuIGludDMyIHRvIGEgZG91
YmxlLCBidXQgdGhhdCBsb3NlcyBhIGJpdCBvZiBpbmZvcm1hdGlvbi4KLSAgICAgICAgLy8gT1RP
SCBpdCdzIHN0aWxsIGFuIGVxdWl2YWxlbnQgbnVtYmVyLgotICAgICAgICByZXR1cm4gNzU7Ci0g
ICAgICAgIAotICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIC8vIEl0J3MgY29tcGxl
dGVseSBmaW5lIHRvIHVzZSB0aGlzIGZvciBPU1IgZXhpdCwgc2luY2UgdGhlIHVpbnQzMiBpc24n
dAotICAgICAgICAvLyBhY3R1YWxseSByZXByZXNlbnRhYmxlIGluIGJ5dGVjb2RlLgotICAgICAg
ICByZXR1cm4gMTAwOwotCi0gICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgIC8vIFRoaXMg
bG9zZXMgaW5mb3JtYXRpb24uIE9ubHkgdXNlIGl0IGlmIHRoZXJlIGFyZSBubyBiZXR0ZXIgYWx0
ZXJuYXRpdmVzLgotICAgICAgICByZXR1cm4gMjU7Ci0gICAgICAgIAotICAgIGNhc2UgSW50NTJU
b1ZhbHVlOgotICAgICAgICAvLyBMb3NlcyBubyBpbmZvcm1hdGlvbi4gSXQganVzdCBib3hlcyB0
aGUgdmFsdWUsIHdoaWNoIGlzIHdoYXQgT1NSIHdhbnRzCi0gICAgICAgIC8vIHRvIGRvIGFueXdh
eS4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBJbnQ1MlRvRG91Ymxl
OgotICAgICAgICAvLyBUaGlzIGlzIGxpa2UgSW50MzJUb0RvdWJsZTsgd2UgY2FuIHVzZSBpdCBi
ZWNhdXNlIGl0IGdpdmVzIGEgc2VtYW50aWNhbGx5Ci0gICAgICAgIC8vIGVxdWl2YWxlbnQgdmFs
dWUgYnV0IHRoYXQgdmFsdWUgbWF5IGJlIGFuIGludDMyIGluIGEgZG91YmxlLCBzbyB3ZSdkCi0g
ICAgICAgIC8vIHJhdGhlciBub3QgaWYgd2UgY2FuIGF2b2lkIGl0LgotICAgICAgICByZXR1cm4g
NzU7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotaW5saW5lIGJvb2wgcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKLXsK
LSAgICByZXR1cm4gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUob3ApID4gMDsKLX0KLQog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMywxNyArMTAzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExv
Y2FsKCkpID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxNyArMTA0LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RP
U1JFbnRyeUxvY2FsLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJs
ZS0+bG9jYWwoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDcmVh
dGUgYSBNb3ZIaW50LiBXZSBjYW4ndCB1c2UgTW92SGludCdzIGRpcmVjdGx5IGF0IHRoaXMgc3Rh
Z2Ugb2YKLSAgICAgICAgICAgIC8vIGNvbXBpbGF0aW9uLCBzbyB3ZSBjb29rIG9uZSB1cCBieSBj
cmVhdGluZyBhIG5ldyBWYXJpYWJsZUFjY2Vzc0RhdGEKLSAgICAgICAgICAgIC8vIHRoYXQgaXNu
J3QgdW5pZmllZCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlz
Ci0gICAgICAgICAgICAvLyBTZXRMb2NhbCB3aWxsIHR1cm4gaW50byBhIE1vdkhpbnQgYW5kIHdp
bGwgbm90IGhhdmUgYW55IHR5cGUgY2hlY2tzLgotICAgICAgICAgICAgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSk7Ci0gICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlID0gJm1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEubGFzdCgpOwotICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBuZXdSb290LT5h
cHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRMb2NhbCwg
Y29kZU9yaWdpbiwgT3BJbmZvKG5ld1ZhcmlhYmxlKSwKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFw
cGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksCiAgICAgICAgICAg
ICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7Ci0gICAgICAgICAgICBzZXRMb2NhbC0+c2V0U3Bl
Y3VsYXRpb25EaXJlY3Rpb24oQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIH0KICAgICAg
ICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lz
dGVyczsgKytsb2NhbCkgewogICAgICAgICAgICAgTm9kZSogcHJldmlvdXNIZWFkID0gdGFyZ2V0
LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwpAQCAtMTIyLDkgKzExNCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGxvY2Fsc1tsb2NhbF07Ci0gICAgICAgICAgICBOb2RlKiBz
ZXRMb2NhbCA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICBuZXdSb290LT5hcHBl
bmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29k
ZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7Ci0gICAgICAgICAgICBzZXRM
b2NhbC0+c2V0U3BlY3VsYXRpb25EaXJlY3Rpb24oQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDI2ICs2OCw2IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYg
bGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGxhYmVs
KTsKIH0KIAotdm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxvY2sqIGJsb2Nr
LCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJlY292
ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIE5vZGUqIG5vZGU7Ci0gICAgTm9kZSogbGFzdE1v
dkhpbnQ7Ci0gICAgaWYgKCFkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKGJsb2NrLCBjdXJy
ZW50Tm9kZSwgbm9kZUluZGV4LCAhIXZhbHVlUmVjb3ZlcnksIG5vZGUsIGxhc3RNb3ZIaW50KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIAotICAgIG1fY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVP
cmlnaW47Ci0gICAgCi0gICAgaWYgKCF2YWx1ZVJlY292ZXJ5KQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQVNTRVJUKGxhc3RNb3ZIaW50KTsKLSAgICBBU1NFUlQobGFzdE1vdkhpbnQtPmNo
aWxkMSgpID09IGN1cnJlbnROb2RlKTsKLSAgICBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZSA9IGFk
b3B0UmVmKAotICAgICAgICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKGxhc3RNb3ZIaW50LT5s
b2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDYgQEAgc3Ry
dWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKICAgICBDb2RlTG9jYXRp
b25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7CiAgICAgdm9p
ZCBjb3JyZWN0SnVtcChMaW5rQnVmZmVyJik7Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Gb3J3
YXJkKEJhc2ljQmxvY2sqLCBOb2RlKiwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJl
Y292ZXJ5Jik7CiAKICAgICB1bnNpZ25lZCBtX3N0cmVhbUluZGV4OwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHJldmlzaW9uIDE2
MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw0NSArNDYsNiBAQCBib29sIE9TUkV4aXRCYXNlOjpjb25zaWRl
ckFkZGluZ0FzRnJlcXVlCiAgICAgICAgICAgICBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdp
bkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCkpOwogfQogCi1ib29sIE9TUkV4
aXRCYXNlOjpkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKAotICAgIEJhc2ljQmxvY2sqIGJs
b2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVl
UmVjb3ZlcnksCi0gICAgTm9kZSomIG5vZGUsIE5vZGUqJiBsYXN0TW92SGludCkKLXsKLSAgICAv
LyBDaGVjayB0aGF0IGVpdGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRo
ZSBwcmVjZWRpbmcgbm9kZSB3YXMgYQotICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29k
ZSBvcmlnaW4sIG9yIHRoYXQgd2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5LgotICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICYmICFoYXNWYWx1ZVJlY292ZXJ5Ci0gICAgICAg
ICYmICFjdXJyZW50Tm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgTm9kZSogc2V0
TG9jYWwgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
c2V0TG9jYWwsIHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9PSBjdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBG
aW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbi4gQWxz
byB0cmFjayB0aGUgbGFzdCBtb3YgaGludAotICAgIC8vIG9uIHRoaXMgbm9kZS4KLSAgICB1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAxOwotICAgIG5vZGUgPSAwOwotICAgIGxh
c3RNb3ZIaW50ID0gMDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sg
PT0gYmxvY2stPnNpemUoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0
dXJuLiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZl
Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0
ZWNvZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhl
Y3V0ZSB0aGF0IGJ5dGVjb2RlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVt
cCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZI
aW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0
TW92SGludCA9IG5vZGU7Ci0gICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgaW5kZXhJbkJsb2NrKys7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChu
b2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbkZv
ckV4aXRUYXJnZXQpOwotICAgIHJldHVybiB0cnVlOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsMTEgKzY0LDYgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xv
dyhwcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQotICAgIAotICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZm9yd2FyZCBjb252ZXJzaW9uIGlzIHJlYWxseSBuZWVkZWQuCi0gICAgYm9vbCBkb1Nl
YXJjaEZvckZvcndhcmRDb252ZXJzaW9uKAotICAgICAgICBCYXNpY0Jsb2NrKiwgTm9kZSogY3Vy
cmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAotICAg
ICAgICBOb2RlKiYgbmV4dEJDTm9kZSwgTm9kZSomIGxhc3RNb3ZIaW50KTsKIAogcHJpdmF0ZToK
ICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sq
IHByb2ZpbGVkQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDkgKzUwNCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2FzZSBBcnJheWlmeToKICAg
ICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0g
ICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAg
ICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBB
dFJldHVybjoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgpAQCAtNTc3LDYg
KzU3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoK
ICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgY2FzZSBDaGVjazoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6
CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICBjYXNlIFVucmVhY2hh
YmxlOgpAQCAtNTg1LDYgKzU4Myw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25S
ZWVudHJ5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKICAg
ICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgorICAgICAgICBjYXNlIE1vdkhpbnQ6
CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMg
YSBwcmVkaWN0aW9uLgpAQCAtNzQ0LDYgKzc0NCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE1vdkhpbnQ6Cisg
ICAgICAgICAgICAvLyBJZ25vcmUgdGhlc2Ugc2luY2UgdGhleSBoYXZlIG5vIGVmZmVjdCBvbiBp
bi1ERkcgZXhlY3V0aW9uLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDggKzE4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdmFsdWUgd2FzIGFscmVhZHkgb24gdGhlIHN0YWNrLgogICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgQ29kZU9yaWdpbigpLCBPcEluZm8odmFyaWFibGUp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsIENvZGVPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2Nh
bCgpLm9mZnNldCgpKSwgRWRnZShub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yNjksNyArMjY5LDcg
QEAgcHVibGljOgogICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJs
ZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzCiAgICAgICAgIC8vICAgdG8g
dGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4KICAgICAgICAgLy8gLSBTZXRM
b2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYgaXQncyBmbHVzaGVkLCBvciB0dXJucyBpbnRv
IGEKLSAgICAgICAgLy8gICBNb3ZIaW50IG90aGVyd2lzZS4KKyAgICAgICAgLy8gICBDaGVjayBv
dGhlcndpc2UuCiAgICAgICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1h
aW5zLCBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyB3aGVuIGEKICAgICAgICAgLy8gICBmbHVzaGVk
IFNldExvY2FsJ3MgdmFsdWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0
IHNpbXBsZXIKICAgICAgICAgLy8gICB0byByZWFzb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxv
Y2FsLCBzaW5jZSB3ZSBjYW4ganVzdCBkbyBhIGJhY2t3YXJkcwpAQCAtMzA4LDcgKzMwOCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkg
fHwgbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKENoZWNrKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5yZXBsYWNl
bWVudCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsgLy8gT25seSBmb3IgVXBzaWxvbnMuCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjEwNzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldExvY2FsOgogICAg
IGNhc2UgU2V0TG9jYWw6Ci0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgpAQCAtMjUw
LDYgKzI0OSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKICAg
ICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgY2FzZSBDaGVjazoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjEsMjQgKzE5MjEsMTQgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92
SGludEFuZENoZWNrKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAg
IGNhc2UgTW92SGludDoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICBjYXNlIFpvbWJpZUhp
bnQ6CisgICAgY2FzZSBDaGVjazogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxs
IGJlIHN0b3JlZCBhbmQKLSAgICAgICAgLy8gYXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVm
b3JlIHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJl
IHRoZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAg
ICAgLy8gc3RhY2suCi0gICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwotICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkg
ewogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM2LDI0ICsyMjM2LDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGlu
dEFuZENoZWNrKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNh
c2UgTW92SGludDoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICBjYXNlIFpvbWJpZUhpbnQ6
CisgICAgY2FzZSBDaGVjazogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAg
IC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJl
IHN0b3JlZCBhbmQKLSAgICAgICAgLy8gYXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3Jl
IHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJlIHRo
ZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAgICAg
Ly8gc3RhY2suCi0gICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwotICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewog
ICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMjMwNCw3ICsyMjk0LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
bV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+
bWFjaGluZUxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0SlMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2LDcgKzEwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkK
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgbnVtRWxlbWVudHMpKSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNr
d2FyZFNwZWN1bGF0aW9uCiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4
aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBK
U1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9k
ZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKIHsK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNCwyMiArMTI0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlvbgogICAgIG1faml0
LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1f
aml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywg
bV9zdHJlYW0tPnNpemUoKSkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSog
bm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKLXsKLSAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7Ci0gICAgaWYgKG1fc3BlY3Vs
YXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFz
dE9TUkV4aXRUb0ZvcndhcmQoKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ug
bm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKLXsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwot
fQotCi1PU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBO
b2RlKiBub2RlKQorT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm4gT1NS
RXhpdEp1bXBQbGFjZWhvbGRlcigpOwpAQCAtMTUwLDE5ICsxMzUsMTYgQEAgT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6YgogICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyKGluZGV4KTsKIH0KIAotT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJ
VDo6YmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQorT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsKICAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHJldHVybiBiYWNrd2FyZFNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOworICAgIHJldHVy
biBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
RWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIGlm
ICghbV9jb21waWxlT2theSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2t3YXJkU3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFpbCk7Ci0gICAgaWYg
KG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBj
b252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGp1bXBzVG9GYWlsKQpAQCAtMTcxLDcgKzE1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0aW9uQ2hlY2soRXgKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewogICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgxLDI0ICsxNjMsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlvbgogICAgIG1faml0LmppdENvZGUoKS0+YXBw
ZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUo
KSwgcmVjb3ZlcnlJbmRleCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNw
ZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVk
Z2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3Vs
YXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsK
LX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQot
ewotICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2t3YXJk
U3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsLCBy
ZWNvdmVyeSk7Ci0gICAgaWYgKG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1
bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKLX0KLQotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2UgZWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCi17Ci0gICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFp
bCwgcmVjb3ZlcnkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwg
bm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaW50KE5vZGUqIG5vZGUpCkBAIC0yMDYsNyArMTc0
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2NhbkV4aXQpOwot
ICAgIEFTU0VSVChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24p
OwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5m
byhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRP
U1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBKU1ZhbHVl
U291cmNlKCksCkBAIC0yMTcsMjYgKzE4NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJ
bnZhbGlkYXRpb25Qb2kKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZh
bHVlUmVjb3ZlcnkpCi17Ci0gICAgbV9qaXQuaml0Q29kZSgpLT5sYXN0T1NSRXhpdCgpLmNvbnZl
cnRUb0ZvcndhcmQoCi0gICAgICAgIG1fYmxvY2ssIG1fY3VycmVudE5vZGUsIG1faW5kZXhJbkJs
b2NrLCB2YWx1ZVJlY292ZXJ5KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1
ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwotICAgIGNvbnZlcnRMYXN0T1NS
RXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1
bXBzVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7Ci0gICAgYmFja3dh
cmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBzVG9GYWls
KTsKLSAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Ci19Ci0K
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlKQogewogICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CkBAIC0yNTIsMjQg
KzE5OSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVVc2Uu
bm9kZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRUeXBlQ2hlY2soSlNW
YWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCkKIHsKICAgICBBU1NFUlQobmVlZHNUeXBlQ2hlY2soZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdo
KSk7CiAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoKTsK
LSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdlLm5vZGUo
KSwganVtcFRvRmFpbCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1Zh
bHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCi17Ci0gICAgYmFja3dhcmRU
eXBlQ2hlY2soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOwot
ICAgIGlmIChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAg
ICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIGJh
Y2t3YXJkVHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9G
YWlsKTsKLSAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Cisg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBzb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9G
YWlsKTsKIH0KIAogUmVnaXN0ZXJTZXQgU3BlY3VsYXRpdmVKSVQ6OnVzZWRSZWdpc3RlcnMoKQpA
QCAtMTM4MCwxNCArMTMxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50
KE5vZGUKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3Rp
Y2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJp
YWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT5sb2NhbCgpKSk7Ci19
Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soTm9kZSogbm9k
ZSkKLXsKLSAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICBzcGVjdWxhdGUobm9kZSwgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgIG5vUmVzdWx0KG5vZGUpOworICAgIG1fc3RyZWFtLT5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoKQpAQCAtMTQ4
Miw3ICsxNDA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1h
dERlYWQpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVu
bGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTUwMSw4ICsxNDI4LDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAg
IGRhdGFMb2coIlxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPSAobV9jdXJyZW50Tm9kZS0+ZmxhZ3MoKSAmIE5vZGVF
eGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsK
LSAgICAgICAgICAgIAogICAgICAgICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKIAogI2lm
IEVOQUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQpAQCAtMTU0MCwxOCAr
MTQ2NSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiB7CiAg
ICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKICAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
ID0gdHJ1ZTsKLSAgICBtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlv
bjsKICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdpbigwKTsKICAgICBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oMCk7CiAKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewog
ICAgICAgICBOb2RlKiBub2RlID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKLSAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICAv
LyBUaGUgYXJndW1lbnQgaXMgZGVhZC4gV2UgZG9uJ3QgZG8gYW55IGNoZWNrcyBmb3Igc3VjaCBh
cmd1bWVudHMuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICBBU1NFUlQo
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
Rmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1hdCgpOwog
ICAgICAgICAKQEAgLTIxNjcsMTYgKzIwOTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSW50MzJUb0RvdWJsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9w
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAKICAgICBpZiAobmVl
ZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyKSkgewotICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAgICAgICAgIGZvcndh
cmRUeXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKG9wMUdQUiwg
RGF0YUZvcm1hdEpTKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYWNrd2FyZFR5
cGVDaGVjaygKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwotICAgICAgICB9CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlciwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9qaXQubW92
ZShvcDFHUFIsIHRlbXBHUFIpOwpAQCAtMjE5OCwxNiArMjExNyw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIAogICAg
IGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIpKSB7Ci0g
ICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgewotICAgICAgICAg
ICAgZm9yd2FyZFR5cGVDaGVjaygKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFUYWdH
UFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
b3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksCi0gICAgICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUikpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2soCi0gICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpKTsKLSAgICAgICAgfQorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEo
KSwgU3BlY0Z1bGxOdW1iZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CiAgICAgfQogICAgIAogICAgIHVuYm94RG91YmxlKG9wMVRhZ0dQUiwgb3AxUGF5
bG9hZEdQUiwgcmVzdWx0RlBSLCB0ZW1wRlBSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjk3LDggKzY5NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gaW50
ZXJ2ZW5pbmcgbm9kZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSBtX2luZGV4SW5CbG9jayArIDE7IGluZGV4IDwgbV9ibG9jay0+c2l6ZSgpIC0gMTsg
KytpbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4KTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBVSU5UX01BWDsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0
J3MgYSBQaGFudG9tIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkLgorICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gUGhhbnRvbSAmJiAhbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2Rl
LgpAQCAtMjE0Myw0MyArMjE0NywyOCBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAg
Y29udmVydFRvRG91YmxlKEpTVmFsdWVPcGVyYW5kJiwgRlBSUmVnIHJlc3VsdCk7CiAjZW5kaWYK
ICAgICAKLSAgICAvLyBBZGQgYSBiYWNrd2FyZCBzcGVjdWxhdGlvbiBjaGVjay4KLSAgICB2b2lk
IGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSos
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwotICAgIHZvaWQgYmFja3dhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCk7Ci0KLSAgICAvLyBBZGQgYSBzcGVjdWxh
dGlvbiBjaGVjayB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCisgICAgLy8gQWRkIGEgc3Bl
Y3VsYXRpb24gY2hlY2suCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1Zh
bHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7Ci0gICAg
dm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKLSAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBj
aGVjayB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnksIGFuZCB3aXRoIGEgcHJvbWlzZSB0byBz
dXBwbHkgYSBqdW1wIGxhdGVyLgotICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgYmFja3dhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKik7Ci0gICAgT1NS
RXhpdEp1bXBQbGFjZWhvbGRlciBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpT
VmFsdWVTb3VyY2UsIEVkZ2UpOwotICAgIC8vIEFkZCBhIHNldCBvZiBzcGVjdWxhdGlvbiBjaGVj
a3Mgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYganVtcHNUb0ZhaWwpOworCisgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sg
d2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LCBhbmQgd2l0aCBhIHByb21pc2UgdG8gc3VwcGx5
IGEganVtcCBsYXRlci4KKyAgICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIHNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqKTsKKyAgICBPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsKTsKICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3
aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7Ci0gICAgdm9pZCBiYWNrd2Fy
ZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKKyAg
ICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5
Jik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBF
ZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJl
Y292ZXJ5Jik7CiAgICAgCiAgICAgdm9pZCBlbWl0SW52YWxpZGF0aW9uUG9pbnQoTm9kZSopOwog
ICAgIAotICAgIC8vIEl0IGlzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSB0byBub3QgdXNlIHRoaXMg
ZGlyZWN0bHkuCi0gICAgdm9pZCBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3QgVmFs
dWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwotICAgIAotICAgIC8vIE5vdGU6IG5vdCBz
cGVjaWZ5aW5nIHRoZSB2YWx1ZVJlY292ZXJ5IGFyZ3VtZW50IChsZWF2aW5nIGl0IGFzIFZhbHVl
UmVjb3ZlcnkoKSkgaW1wbGllcwotICAgIC8vIHRoYXQgeW91J3ZlIGVuc3VyZWQgdGhhdCB0aGVy
ZSBleGlzdHMgYSBNb3ZIaW50IHByaW9yIHRvIHlvdXIgdXNlIG9mIGZvcndhcmRTcGVjdWxhdGlv
bkNoZWNrKCkuCi0gICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNW
YWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIGZvcndhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBW
YWx1ZVJlY292ZXJ5KCkpOwotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNW
YWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0
IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0
aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgogICAgIHZvaWQg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2Rl
Kik7CiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNW
YWx1ZVJlZ3MsIEVkZ2UpOwogICAgIAogICAgIC8vIEhlbHBlcnMgZm9yIHBlcmZvcm1pbmcgdHlw
ZSBjaGVja3Mgb24gYW4gZWRnZSBzdG9yZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdGVycy4KICAgICBi
b29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoKSB7IHJldHVybiBtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVz
UGFzc2VkVGhyb3VnaCk7IH0KLSAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3Vy
Y2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwg
RWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsKTsKLSAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJj
ZSwgRWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CiAKICAgICB2b2lkIHNw
ZWN1bGF0ZUludDMyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUludChFZGdlKTsK
QEAgLTIyNTIsNyArMjI0MSw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJl
aW5nIGdlbmVyYXRlZC4KICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5vZGUqIG1fY3Vy
cmVudE5vZGU7Ci0gICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9zcGVjdWxhdGlvbkRpcmVjdGlv
bjsKICAgICBib29sIG1fY2FuRXhpdDsKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAg
ICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5
cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMzMgKzE2Mywy
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1
Y3R1cmUgJiYgIWl0ZXItPnZhbHVlLm1fYXJyYXlNb2RlSXNWYWxpZCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGluc2VydCBh
IGRlYWQgU2V0TG9jYWwgdG8gdGVsbCBPU1IgdGhhdCB0aGUgY2hpbGQncyB2YWx1ZSBzaG91bGQK
LSAgICAgICAgICAgICAgICAgICAgLy8gYmUgZHJvcHBlZCBpbnRvIHRoaXMgYnl0ZWNvZGUgdmFy
aWFibGUgaWYgdGhlIENoZWNrU3RydWN0dXJlIGRlY2lkZXMKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdG8gZXhpdC4KLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAg
ICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2lu
LCBPcEluZm8odmFyaWFibGUpLCBjaGlsZDEpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFVz
ZSBOb2RlRXhpdHNGb3J3YXJkIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhl
IG5leHQKLSAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVy
IHRoYW4gcmVleGVjdXRpbmcgdGhlIGN1cnJlbnQgb25lLgotICAgICAgICAgICAgICAgICAgICBO
b2RlKiBuZXdOb2RlID0gMDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1f
c3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENl
bGxVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVyLT52YWx1ZS5tX2Fy
cmF5TW9kZUlzVmFsaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyLT52
YWx1ZS5tX2FycmF5TW9kZUhvaXN0aW5nT2theSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBu
ZXdOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2RlT3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhpdGVyLT52YWx1ZS5tX2FycmF5TW9kZS5hc1dvcmQo
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxs
VXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3
Tm9kZS0+bWVyZ2VGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTIyOCw5ICsyMTcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdl
J3JlIHRoZSBvbmx5IG9uZXMgd2hvIHdvdWxkCi0gICAgICAgICAgICAgICAgICAgIC8vIGluc2Vy
dCB0aGVzZSBub2RlcyB3aXRoIE5vZGVFeGl0c0ZvcndhcmQuCi0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzI5LDkgKzMxNSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tBcnJheTogewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgcmVseSBvbiB0
aGUgZmFjdCB0aGF0IHdlJ3JlIHRoZSBvbmx5IG9uZXMgd2hvIHdvdWxkCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGluc2VydCB0aGVzZSBub2RlcyB3aXRoIE5vZGVFeGl0c0ZvcndhcmQuCi0gICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0
c0ZvcndhcmQpKTsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRM
b2NhbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDUsMTAgKzI0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5v
cCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09
IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZs
dXNoCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaQotICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBab21iaWVIaW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IE1vdkhpbnQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGludEFuZENoZWNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsOSArMjU0LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChub2RlLCBlZGdlKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgZWRnZS0+b3AoKSA9PSBab21iaWVIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgZWRnZS0+b3AoKSA9PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
ZWRnZS0+b3AoKSA9PSBNb3ZIaW50QW5kQ2hlY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgZWRnZS0+b3AoKSA9PSBGbHVzaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAg
LTI5Miw5ICsyODYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+cHJlZGVjZXNz
b3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9k
ZS0+b3AoKSA9PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5v
ZGUtPm9wKCkgPT0gTW92SGludEFuZENoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gWm9tYmllSGludAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNjEw
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jaGVja0FycmF5
SG9pc3RpbmdGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZh
bHNlKQorICAgICAgICAsIG1faXNMb2FkZWRGcm9tKGZhbHNlKQogICAgICAgICAsIG1fZG91Ymxl
Rm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkKICAgICB7CiAgICAgICAgIGNsZWFy
Vm90ZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkyLDcwICsxOTIsOCBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0
KAogICAgICAgICAKICAgICAgICAgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyBpbmZvID0gZ2VuZXJh
dGlvbkluZm9zLmdldChzb3VyY2UuaWQoKSk7CiAgICAgICAgIGlmIChpbmZvLmZvcm1hdCA9PSBE
YXRhRm9ybWF0Tm9uZSkgewotICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBh
biBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gQmFja3dhcmQgcmV3aXJpbmcgcmVmZXJzIHRv
OgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgICBhOiBTb21ldGhpbmcoLi4uKQot
ICAgICAgICAgICAgLy8gICAgIGI6IElkKEBhKSAvLyBzb21lIGlkZW50aXR5IGZ1bmN0aW9uCi0g
ICAgICAgICAgICAvLyAgICAgYzogU2V0TG9jYWwoQGIpCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gV2hlcmUgd2UgZmluZCBAYiBiZWluZyBkZWFkLCBidXQgQGEgaXMgc3RpbGwgYWxp
dmUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gRm9yd2FyZCByZXdpcmluZyByZWZl
cnMgdG86Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgIGE6IFNvbWV0aGluZygu
Li4pCi0gICAgICAgICAgICAvLyAgICAgYjogU2V0TG9jYWwoQGEpCi0gICAgICAgICAgICAvLyAg
ICAgYzogSWQoQGEpIC8vIHNvbWUgaWRlbnRpdHkgZnVuY3Rpb24KLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyBXaGVyZSB3ZSBmaW5kIEBhIGJlaW5nIGRlYWQsIGJ1dCBAYiBpcyBzdGls
bCBhbGl2ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSAmJiBwZXJtaXRzT1NSQmFja3dhcmRS
ZXdpcmluZyhub2RlLT5vcCgpKSkgewotICAgICAgICAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSBu
b2RlLT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudFJlY292
ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgY29kZUJsb2NrLCBncmFwaC5hdChpZCkpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpbmZvID0gZ2VuZXJhdGlv
bkluZm9zLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8uZm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAg
ICAgICBNaW5pZmllZElEIGJlc3RJRDsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBiZXN0U2Nv
cmUgPSAwOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEhhc2hNYXA8TWluaWZp
ZWRJRCwgTWluaWZpZWRHZW5lcmF0aW9uSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBnZW5lcmF0aW9u
SW5mb3MuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlm
aWVkR2VuZXJhdGlvbkluZm8+OjppdGVyYXRvciBlbmQgPSBnZW5lcmF0aW9uSW5mb3MuZW5kKCk7
Ci0gICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTWluaWZpZWRJRCBpZCA9IGl0ZXItPmtleTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IGdyYXBoLmF0KGlkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbm9kZS0+aGFzQ2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZS5pZCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpdGVyLT52YWx1ZS5mb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXlTY29yZSA9
IGZvcndhcmRSZXdpcmluZ1NlbGVjdGlvblNjb3JlKG5vZGUtPm9wKCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAobXlTY29yZSA8PSBiZXN0U2NvcmUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgYmVzdElEID0gaWQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGJlc3RTY29yZSA9IG15U2NvcmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghIWJlc3RJRCkgewotICAgICAgICAgICAg
ICAgICAgICBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChiZXN0SUQpOwotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaW5mby5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAg
ICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBBU1NFUlQoaW5mby5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiAKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgR2V0TG9j
YWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgUGhhbnRvbToKQEAg
LTExMSw2ICsxMTAsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSog
CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKICAgICBjYXNl
IENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgY2FzZSBDaGVjazoKICAgICAgICAgLy8gVGhl
c2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5SWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw4ICsyMjgsNiBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1faW50ZXJwcmV0ZXIuc3Rh
cnRFeGVjdXRpbmcobV9ub2RlKTsKICAgICAgICAgCi0gICAgICAgIG1fZGlyZWN0aW9uID0gKG1f
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDog
QmFja3dhcmRTcGVjdWxhdGlvbjsKLSAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgIGNvbXBpbGVVcHNpbG9u
KCk7CkBAIC0yNjAsOSArMjU4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBab21iaWVIaW50
OgogICAgICAgICAgICAgY29tcGlsZVpvbWJpZUhpbnQoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50
QW5kQ2hlY2soKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBoYW50b206CiAg
ICAgICAgICAgICBjb21waWxlUGhhbnRvbSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02NTcs
MTUgKzY1MiwxNSBAQCBwcml2YXRlOgogCiAgICAgICAgIHN3aXRjaCAodXNlS2luZEZvcih2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKSkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9u
b2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CiAg
ICAgICAgICAgICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFsdWUpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2Fy
ZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RDZWxsKGpzVmFs
dWUpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG1fbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKICAgICAgICAgICAgIHNldEpTVmFsdWUo
anNWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgot
ICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFs
dWUpLCBtX25vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBtX25vZGUsIGlzTm90Qm9vbGVhbihq
c1ZhbHVlKSk7CiAgICAgICAgICAgICBzZXRCb29sZWFuKHVuYm94Qm9vbGVhbihqc1ZhbHVlKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgpAQCAtNzAxLDgg
KzY5Niw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlU2V0TG9jYWwoKQogICAg
IHsKLSAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2RlKTsKLSAgICAgICAgCiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSB7CiAgICAgICAgIGNh
c2UgRmx1c2hlZEpTVmFsdWU6IHsKQEAgLTc1MywxOSArNzQ2LDE2IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCBjb21waWxlTW92SGludCgpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGlu
dChtX25vZGUpOworICAgICAgICBBU1NFUlQobV9ub2RlLT5jb250YWluc01vdkhpbnQoKSk7Cisg
ICAgICAgIEFTU0VSVChtX25vZGUtPm9wKCkgIT0gWm9tYmllSGludCk7CisgICAgICAgIAorICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpOwor
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG1f
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlWm9t
YmllSGludCgpCiAgICAgewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX25v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5k
KGRhdGEtPmxvY2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKQotICAgIHsKLSAgICAgICAgb2Jz
ZXJ2ZU1vdkhpbnQobV9ub2RlKTsKLSAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG1fbm9kZS0+dW5saW5rZWRMb2NhbCgp
KSA9IEF2YWlsYWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlUGhhbnRvbSgpCkBAIC0xMTc3LDQwICsxMTY3LDcgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIGNvbXBpbGVJbnQzMlRvRG91YmxlKCkKICAgICB7Ci0gICAgICAgIGlmICghbV9pbnRl
cnByZXRlci5uZWVkc1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlcikK
LSAgICAgICAgICAgIHx8IG1fbm9kZS0+c3BlY3VsYXRpb25EaXJlY3Rpb24oKSA9PSBCYWNrd2Fy
ZFNwZWN1bGF0aW9uKSB7Ci0gICAgICAgICAgICBzZXREb3VibGUobG93RG91YmxlKG1fbm9kZS0+
Y2hpbGQxKCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIGJveGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBp
bnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgaW50IGNhc2Ui
KSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkRvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgY29u
dGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIo
Ym94ZWRWYWx1ZSksIGRvdWJsZUNhc2UsIGludENhc2UpOwotICAgICAgICAKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVDYXNlKTsK
LSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGludFRvRG91YmxlID0gbV9vdXQuYW5j
aG9yKAotICAgICAgICAgICAgbV9vdXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMihib3hlZFZhbHVl
KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIGZv
cndhcmRUeXBlQ2hlY2soCi0gICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSksIG1f
bm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgaXNDZWxsT3JNaXNj
KGJveGVkVmFsdWUpLCBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSkpOwotICAgICAgICAKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgdW5ib3hlZERvdWJsZSA9IG1fb3V0LmFuY2hvcih1bmJveERvdWJs
ZShib3hlZFZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBl
LCBpbnRUb0RvdWJsZSwgdW5ib3hlZERvdWJsZSk7Ci0gICAgICAgIAotICAgICAgICBzZXREb3Vi
bGUocmVzdWx0KTsKKyAgICAgICAgc2V0RG91YmxlKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKQEAgLTMx
OTYsMjYgKzMxNTMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291
dC5pbnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlQmFja3dhcmQoCi0gICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQotICAgIHsK
LSAgICAgICAgYXBwZW5kT1NSRXhpdCgKLSAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIGZhaWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24sIEZvcm1hdHRlZFZhbHVl
KCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoCi0gICAgICAgIEV4
aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExW
YWx1ZSBmYWlsQ29uZGl0aW9uLAotICAgICAgICBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgcmVjb3Zl
cnkpCi0gICAgewotICAgICAgICBhcHBlbmRPU1JFeGl0KAotICAgICAgICAgICAga2luZCwgbG93
VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgRm9yd2FyZFNwZWN1bGF0aW9uLCByZWNv
dmVyeSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgc3BlY3VsYXRlKAogICAgICAgICBFeGl0S2lu
ZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUg
ZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIGFwcGVuZE9TUkV4aXQoCi0gICAgICAgICAg
ICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBtX2RpcmVjdGlvbiwg
Rm9ybWF0dGVkVmFsdWUoKSk7CisgICAgICAgIGFwcGVuZE9TUkV4aXQoa2luZCwgbG93VmFsdWUs
IGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgdGVybWlu
YXRlKEV4aXRLaW5kIGtpbmQpCkBAIC0zMjIzLDQxICszMTY0LDIxIEBAIHByaXZhdGU6CiAgICAg
ICAgIHNwZWN1bGF0ZShraW5kLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjaygKLSAgICAgICAgRm9ybWF0dGVk
VmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3Nl
ZFRocm91Z2gsCi0gICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQotICAgIHsKLSAgICAgICAg
YXBwZW5kVHlwZUNoZWNrKAotICAgICAgICAgICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQ
YXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uLAotICAgICAg
ICAgICAgRm9ybWF0dGVkVmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZm9yd2FyZFR5
cGVDaGVjaygKLSAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCi0gICAgICAgIExWYWx1ZSBmYWls
Q29uZGl0aW9uLCBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgcmVjb3ZlcnkpCi0gICAgewotICAgICAg
ICBhcHBlbmRUeXBlQ2hlY2soCi0gICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBl
c1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVjdWxhdGlvbiwKLSAgICAg
ICAgICAgIHJlY292ZXJ5KTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCB0eXBlQ2hlY2soCiAgICAg
ICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAogICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAg
ICB7Ci0gICAgICAgIGFwcGVuZFR5cGVDaGVjaygKLSAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgbV9kaXJlY3Rpb24sCi0g
ICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKGxv
d1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbik7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAogICAgICAgICBGb3JtYXR0ZWRW
YWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2Vk
VGhyb3VnaCwKLSAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAgICAgIExWYWx1ZSBm
YWlsQ29uZGl0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlw
ZUNoZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkp
OwotICAgICAgICBhcHBlbmRPU1JFeGl0KEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9k
ZSgpLCBmYWlsQ29uZGl0aW9uLCBkaXJlY3Rpb24sIHJlY292ZXJ5KTsKKyAgICAgICAgYXBwZW5k
T1NSRXhpdChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwgZmFpbENvbmRpdGlv
bik7CiAgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRU
aHJvdWdoKTsKICAgICB9CiAgICAgCkBAIC00MDkyLDggKzQwMTMsNyBAQCBwcml2YXRlOgogICAg
IH0KICAgICAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCi0gICAgICAgIEV4aXRLaW5kIGtpbmQs
IEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29u
ZGl0aW9uLAotICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRl
ZFZhbHVlIHJlY292ZXJ5KQorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBs
b3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7CiAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCks
ICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIG1fYXZhaWxhYmlsaXR5LCAiXG4iKTsKQEAgLTQxMTgs
MzggKzQwMzgsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBl
bWl0T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUsIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOworICAg
ICAgICBlbWl0T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQudW5yZWFjaGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVtaXRPU1JFeGl0
Q2FsbCgKLSAgICAgICAgT1NSRXhpdCYgZXhpdCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwKLSAgICAgICAgRm9ybWF0dGVkVmFsdWUgcmVj
b3ZlcnkpCisgICAgdm9pZCBlbWl0T1NSRXhpdENhbGwoT1NSRXhpdCYgZXhpdCwgRm9ybWF0dGVk
VmFsdWUgbG93VmFsdWUpCiAgICAgewogICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFyZ3VtZW50
czsKICAgICAgICAgCiAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2Rl
T3JpZ2luOwogICAgICAgICAKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1
bGF0aW9uKQotICAgICAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywg
bG93VmFsdWUsIGNvZGVPcmlnaW4pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIGlmICghcmVj
b3ZlcnkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1fbm9k
ZUluZGV4OyBub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewot
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCA9PSBjb2RlT3JpZ2luKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhp
dCwgYXJndW1lbnRzLCBsb3dWYWx1ZSwgY29kZU9yaWdpbik7Ci0gICAgICAgICAgICBleGl0LmNv
bnZlcnRUb0ZvcndhcmQobV9oaWdoQmxvY2ssIG1fbm9kZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5
LCBhcmd1bWVudHMpOwotICAgICAgICB9CisgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0
LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKICAgICAgICAgCiAgICAgICAgIGNh
bGxTdGFja21hcChleGl0LCBhcmd1bWVudHMpOwogICAgIH0KQEAgLTQzMDksMTYgKzQyMTEsNiBA
QCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG5vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkg
IT0gWm9tYmllSGludCk7Ci0gICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG5vZGUtPmxvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVy
YW5kKG9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAg
fQotICAgIAogICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAg
IHsKICAgICAgICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1
ZSwgbV9oaWdoQmxvY2spKTsKQEAgLTQ0ODksNyArNDM4MSw2IEBAIHByaXZhdGU6CiAgICAgQ29k
ZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICB1bnNpZ25lZCBtX25vZGVJ
bmRleDsKICAgICBOb2RlKiBtX25vZGU7Ci0gICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJl
Y3Rpb247CiAgICAgCiAgICAgdWludDMyX3QgbV9zdGFja21hcElEczsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDQxICs2MSw2IEBAIENvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9u
Rm8KICAgICAgICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KTsKIH0KIAotdm9pZCBPU1JFeGl0Ojpj
b252ZXJ0VG9Gb3J3YXJkKAotICAgIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9k
ZSwgdW5zaWduZWQgbm9kZUluZGV4LAotICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlICZ2YWx1ZSwg
RXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQotewotICAgIE5vZGUqIG5vZGU7Ci0gICAgTm9k
ZSogbGFzdE1vdkhpbnQ7Ci0gICAgaWYgKCFkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKGJs
b2NrLCBjdXJyZW50Tm9kZSwgbm9kZUluZGV4LCAhIXZhbHVlLCBub2RlLCBsYXN0TW92SGludCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKTsKLSAgICAKLSAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2Rl
T3JpZ2luOwotICAgIAotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0TW92SGludC0+bG9jYWwo
KTsKLSAgICAKLSAgICAvLyBJcyB0aGUgdmFsdWUgZm9yIHRoaXMgb3BlcmFuZCBiZWluZyBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGV4aXQsIG9yIGlzCi0gICAgLy8gaXQgc29tZXRoaW5n
IGVsc2U/IElmIGl0J3MgYW4gYXJndW1lbnQgYWxyZWFkeSwgdGhlbiByZXBsYWNlIHRoYXQgYXJn
dW1lbnQ7Ci0gICAgLy8gb3RoZXJ3aXNlIGFkZCBhbm90aGVyIGFyZ3VtZW50LgotICAgIGlmICht
X3ZhbHVlcy5vcGVyYW5kKG92ZXJyaWRkZW5PcGVyYW5kKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAg
ICAgRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCA9IG1fdmFsdWVzLm9wZXJhbmQob3ZlcnJpZGRl
bk9wZXJhbmQpLmV4aXRBcmd1bWVudCgpOwotICAgICAgICBhcmd1bWVudHNbZXhpdEFyZ3VtZW50
LmFyZ3VtZW50KCldID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgbV92YWx1ZXMub3BlcmFuZChv
dmVycmlkZGVuT3BlcmFuZCkgPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKLSAgICAgICAgICAg
IGV4aXRBcmd1bWVudC53aXRoRm9ybWF0KHZhbHVlLmZvcm1hdCgpKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVudHMuc2l6ZSgp
OwotICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUudmFsdWUoKSk7Ci0gICAgbV92YWx1ZXMub3Bl
cmFuZChvdmVycmlkZGVuT3BlcmFuZCkgPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKLSAgICAg
ICAgRXhpdEFyZ3VtZW50KHZhbHVlLmZvcm1hdCgpLCBhcmd1bWVudCkpOwotfQotCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY2LDEwICsxNjYsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNl
CiAgICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAgIAogICAgIENvZGVMb2NhdGlvbkp1bXAg
Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7Ci0g
ICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKAotICAgICAgICBERkc6OkJhc2ljQmxvY2sq
LCBERkc6Ok5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsCi0gICAgICAgIGNv
bnN0IEZvcm1hdHRlZFZhbHVlJiwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvZGVhZC1pbnQzMi10by1kb3VibGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZWFkLWludDMyLXRvLWRvdWJsZS5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1pbnQz
Mi10by1kb3VibGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24g
Zm9vKGludCwgbykgeworICAgIHZhciB4ID0gaW50OworICAgIG8uZiA9IHg7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgeCArPSAwLjU7Cit9CisKK25vSW5saW5l
KGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgZm9vKDQyLCB7fSk7
CisKK3ZhciBvID0ge2c6IDQzfTsKK2Zvbyg0Nywgbyk7CitpZiAoby5mICE9IDQ3KQorICAgIHRo
cm93ICJFcnJvcjogby5mIGlzICIgKyBvLmY7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2RlYWQtdWludDMyLXRvLW51bWJlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RlYWQtdWludDMyLXRvLW51bWJlci5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC11
aW50MzItdG8tbnVtYmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0
aW9uIGZvbyhhLCBvKSB7CisgICAgdmFyIHggPSBhID4+PiAwOworICAgIG8uZiA9IHggfCAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHgrKzsKK30KKworbm9J
bmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICBmb28oNDIs
IHt9KTsKKwordmFyIG8gPSB7ZzogNDN9OworZm9vKDQ3LCBvKTsKK2lmIChvLmYgIT0gNDcpCisg
ICAgdGhyb3cgIkVycm9yOiBvLmYgaXMgIiArIG8uZjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220080</attachid>
            <date>2013-12-28 16:40:35 -0800</date>
            <delta_ts>2013-12-28 19:19:03 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>98748</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMTEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBA
QAorMjAxMy0xMi0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgREZHIGZvcndhcmQgZXhpdGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGZpbmFsbHkgZ2V0cyByaWQgb2Yg
Zm9yd2FyZCBleGl0aW5nLiBGb3J3YXJkIGV4aXRpbmcgd2FzIGFsd2F5cyBhIGZyYWdpbGUgY29u
Y2VwdAorICAgICAgICBzaW5jZSBpdCBpbnZvbHZlZCB0aGUgY29tcGlsZXIgdHJ5aW5nIHRvIGZp
Z3VyZSBvdXQgaG93IHRvICJyb2xsIGZvcndhcmQiIHRoZQorICAgICAgICBleGVjdXRpb24gZnJv
bSBzb21lIERGRyBub2RlIHRvIHRoZSBuZXh0IGJ5dGVjb2RlIGluZGV4LiBJdCB3YXMgYWx3YXlz
IGVhc3kgdG8gZmluZAorICAgICAgICBjb3VudGVyZXhhbXBsZXMgd2hlcmUgaXQgYnJva2UsIGFu
ZCBpdCBoYXMgYWx3YXlzIHNlcnZlZCBhcyBhbiBvYnN0YWNsZSB0byBhZGRpbmcKKyAgICAgICAg
Y29tcGlsZXIgaW1wcm92ZW1lbnRzIC0gdGhlIGxhdGVzdCBiZWluZyBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEyNTUyMywgd2hpY2ggdHJpZWQgdG8KKyAgICAgICAgbWFrZSBEQ0Ugd29yayBmb3IgbW9y
ZSB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBmaW5pc2hlcyB0aGUgd29y
ayBvZiByZW1vdmluZyBmb3J3YXJkIGV4aXRpbmcuIEEgbG90IG9mIGZvcndhcmQgZXhpdGluZwor
ICAgICAgICB3YXMgYWxyZWFkeSByZW1vdmVkIGluIHNvbWUgb3RoZXIgYnVncywgYnV0IFNldExv
Y2FsIHN0aWxsIGRpZCBmb3J3YXJkIGV4aXRzLiBTZXRMb2NhbAorICAgICAgICBpcyBpbiBtYW55
IHdheXMgdGhlIGhhcmRlc3QgdG8gcmVtb3ZlLCBzaW5jZSB0aGUgZm9yd2FyZCBleGl0aW5nIG9m
IFNldExvY2FsIGFsc28KKyAgICAgICAgaW1wbGllZCB0aGF0IGFueSBjb252ZXJzaW9uIG5vZGVz
IGluc2VydGVkIGJlZm9yZSB0aGUgU2V0TG9jYWwgd291bGQgdGhlbiBhbHNvIGJlCisgICAgICAg
IG1hcmtlZCBhcyBmb3J3YXJkLWV4aXRpbmcuIEhlbmNlIFNldExvY2FsJ3MgZm9yd2FyZC1leGl0
aW5nIG1hZGUgYSBidW5jaCBvZiBvdGhlcgorICAgICAgICB0aGluZ3MgYWxzbyBmb3J3YXJkLWV4
aXRpbmcsIGFuZCB0aGlzIHdhcyBhbHdheXMgYSBzb3VyY2Ugb2Ygd2VpcmRvIGJ1Z3MuCisgICAg
ICAgIAorICAgICAgICBTZXRMb2NhbCBtdXN0IGJlIGFibGUgdG8gZXhpdCBpbiBjYXNlIGl0IHBl
cmZvcm1zIGEgaG9pc3RlZCB0eXBlIHNwZWN1bGF0aW9uLiBOb2RlcworICAgICAgICBpbnNlcnRl
ZCBqdXN0IGJlZm9yZSBTZXRMb2NhbCBtdXN0IGFsc28gYmUgYWJsZSB0byBleGl0IC0gZm9yIGV4
YW1wbGUgdHlwZSBjaGVjaworICAgICAgICBob2lzdGluZyBtYXkgaW5zZXJ0IGEgQ2hlY2tTdHJ1
Y3R1cmUsIG9yIGZpeHVwIHBoYXNlIG1heSBpbnNlcnQgc29tZXRoaW5nIGxpa2UKKyAgICAgICAg
SW50MzJUb0RvdWJsZS4gQnV0IGlmIGFueSBvZiB0aG9zZSBub2RlcyB0cmllZCB0byBiYWNrd2Fy
ZCBleGl0LCB0aGVuIHRoaXMgY291bGQgbGVhZAorICAgICAgICB0byB0aGUgcmVleGVjdXRpb24g
b2YgYSBzaWRlLWVmZmVjdGluZyBvcGVyYXRpb24sIGZvciBleGFtcGxlOgorICAgICAgICAKKyAg
ICAgICAgICAgIGE6IENhbGwoLi4uKQorICAgICAgICAgICAgYjogU2V0TG9jYWwoQGEsIHIxKQor
ICAgICAgICAKKyAgICAgICAgRm9yIGEgbG9uZyB0aW1lIGl0IHNlZW1lZCBsaWtlIFNldExvY2Fs
ICpoYWQqIHRvIGV4aXQgZm9yd2FyZCBiZWNhdXNlIG9mIHRoaXMuIEJ1dAorICAgICAgICB0aGlz
IGNoYW5nZSBzaWRlLXN0ZXBzIHRoZSBwcm9ibGVtIGJ5IGNoYW5naW5nIHRoZSBCeXRlQ29kZVBh
cnNlciB0byBhbHdheXMgZW1pdCBhCisgICAgICAgIGtpbmQgb2YgInR3by1waGFzZSBjb21taXQi
IGZvciBzdG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzLiBOb3cgd2hlbiB0aGUgQnl0ZUNvZGVQYXJz
ZXIKKyAgICAgICAgd2lzaGVzIHRvIHN0b3JlIHRvIGEgbG9jYWwsIGl0IGZpcnN0IGVtaXRzIGEg
TW92SGludCBhbmQgdGhlbiBlbnF1ZXVlcyBhIFNldExvY2FsLgorICAgICAgICBUaGUgU2V0TG9j
YWwgaXNuJ3QgYWN0dWFsbHkgZW1pdHRlZCB1bnRpbCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0
IGJ5dGVjb2RlCisgICAgICAgIGluc3RydWN0aW9uICh3aGljaCB0aGUgZXhjZXB0aW9uIG9mIG9w
X2VudGVyIGFuZCBvcF9yZXQsIHdoaWNoIGVtaXQgdGhlaXJzIGltbWVkaWF0ZWx5CisgICAgICAg
IHNpbmNlIGl0J3MgYWx3YXlzIHNhZmUgdG8gcmVleGVjdXRlIHRob3NlIGJ5dGVjb2RlIGluc3Ry
dWN0aW9ucyBhbmQgc2luY2UgZGVmZXJyaW5nCisgICAgICAgIFNldExvY2FscyB3b3VsZCBiZSB3
ZWlyZCB0aGVyZSAtIG9wX2VudGVyIGhhcyBtYW55IFNldExvY2FscyBhbmQgb3BfcmV0IGlzIGEg
c2V0CisgICAgICAgIGZvbGxvd2VkIGJ5IGEganVtcCBpbiBjYXNlIG9mIGlubGluaW5nLCBzbyB3
ZSdkIGhhdmUgdG8gZW1pdCB0aGUgU2V0TG9jYWwgImFmdGVyIiB0aGUKKyAgICAgICAganVtcCBh
bmQgdGhhdCB3b3VsZCBiZSBhd2t3YXJkKS4gVGhpcyBtZWFucyB0aGF0IHRoZSBhYm92ZSBJUiBz
bmlwcGV0IHdvdWxkIGxvb2sKKyAgICAgICAgc29tZXRoaW5nIGxpa2U6CisgICAgICAgIAorICAg
ICAgICAgICAgYTogQ2FsbCguLi4sIGJjIzQyKQorICAgICAgICAgICAgYjogTW92SGludChAYSwg
cjEsIGJjIzQyKQorICAgICAgICAgICAgYzogU2V0TG9jYWwoQGEsIHIxLCBiYyM0NykKKyAgICAg
ICAgCisgICAgICAgIFdoZXJlIHRoZSBTZXRMb2NhbCBleGl0cyAiYmFja3dhcmRzIiBidXQgYXBw
ZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGJ5dGVjb2RlCisgICAgICAgIGluc3Ry
dWN0aW9uLiBUaGlzIG1lYW5zIHRoYXQgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRoYXQgU2V0TG9j
YWwsIHRoZSBPU1IgZXhpdAorICAgICAgICBhbmFseXNpcyBhbHJlYWR5IGtub3dzIHRoYXQgcjEg
aXMgYXNzb2NpYXRlZCB3aXRoIEBhLCBhbmQgaXQgbWVhbnMgdGhhdCB0aGUgU2V0TG9jYWwKKyAg
ICAgICAgb3IgYW55dGhpbmcgaG9pc3RlZCBhYm92ZSBpdCBjYW4gZXhpdCBiYWNrd2FyZHMgYXMg
bm9ybWFsLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBtZWFucyB0aGF0IHRo
ZSAiZm9yd2FyZCByZXdpcmluZyIgY2FuIGJlIGtpbGxlZC4gUHJldmlvdXNseSwgd2UgbWlnaHQK
KyAgICAgICAgaGF2ZSBpbnNlcnRlZCBhIGNvbnZlcnNpb24gbm9kZSBvbiBTZXRMb2NhbCBhbmQg
dGhlbiB0aGUgU2V0TG9jYWwgZGllZCAoaS5lLiB0dXJuZWQKKyAgICAgICAgaW50byBhIE1vdkhp
bnQpIGFuZCB0aGUgY29udmVyc2lvbiBub2RlIGVpdGhlciBkaWVkIGNvbXBsZXRlbHkgb3IgaGFk
IGl0cyBsaWZldGltZQorICAgICAgICB0cnVuY2F0ZWQgdG8gYmUgbGVzcyB0aGFuIHRoZSBhY3R1
YWwgdmFsdWUncyBieXRlY29kZSBsaWZldGltZS4gVGhpcyBubyBsb25nZXIgaGFwcGVucworICAg
ICAgICBzaW5jZSBjb252ZXJzaW9uIG5vZGVzIGFyZSBvbmx5IGluc2VydGVkIGF0IFNldExvY2Fs
cy4KKyAgICAgICAgCisgICAgICAgIE1vcmUgcHJlY2lzZWx5LCB0aGlzIGNoYW5nZSBpbnRyb2R1
Y2VzIHR3byBsYXdzIHRoYXQgd2Ugd2VyZSBiYXNpY2FsbHkgYWxyZWFkeQorICAgICAgICBmb2xs
b3dpbmcgYW55d2F5OgorICAgICAgICAKKyAgICAgICAgMSkgQSBNb3ZIaW50J3MgY2hpbGQgc2hv
dWxkIG5ldmVyIGJlIGNoYW5nZWQgZXhjZXB0IGlmIGFsbCBvdGhlciB1c2VzIG9mIHRoYXQgY2hp
bGQKKyAgICAgICAgICAgYXJlIGFsc28gcmVwbGFjZWQuIFNwZWNpZmljYWxseSwgdGhpcyBwcm9o
aWJpdHMgaW5zZXJ0aW9uIG9mIGNvbnZlcnNpb24gbm9kZXMgYXQKKyAgICAgICAgICAgTW92SGlu
dHMuCisgICAgICAgIAorICAgICAgICAyKSBBbnl0aW1lIGFueSBjaGlsZCBpcyByZXBsYWNlZCB3
aXRoIHNvbWV0aGluZyBlbHNlLCBhbmQgYWxsIG90aGVyIHVzZXMgYXJlbid0IGFsc28KKyAgICAg
ICAgICAgcmVwbGFjZWQsIHdlIG11c3QgaW5zZXJ0IGEgUGhhbnRvbSB1c2Ugb2YgdGhlIG9yaWdp
bmFsIGNoaWxkLgorCisgICAgICAgIFRoaXMgaXMgYSBzbGlnaHQgY29tcGlsZS10aW1lIHJlZ3Jl
c3Npb24gYnV0IGhhcyBubyBlZmZlY3Qgb24gY29kZS1nZW4uIEl0IHVubG9ja3MgYQorICAgICAg
ICBidW5jaCBvZiBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBzbyBJIHRoaW5rIGl0J3Mgd29y
dGggaXQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0aW9uQ291bnQpOgor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yOjpBcnJheWlmeVNsb3dQYXRo
R2VuZXJhdG9yKToKKyAgICAgICAgKiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFn
YXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpEZWxheWVkU2V0TG9jYWw6OkRlbGF5ZWRTZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkRlbGF5ZWRTZXRMb2NhbDo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6ZWxpbWluYXRl
KToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNs
b2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6
OkRDRVBoYXNlOjpmaXh1cEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Y2xl
YW5WYXJpYWJsZXMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVj
dEludDMyVG9Eb3VibGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTElDTVBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TElD
TVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpiZWxvbmdzSW5NaW5p
ZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmNvbnN0YW50TnVt
YmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6Cisg
ICAgICAgICogZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1Zh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpjb252ZXJ0VG9QaGFudG9tKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojpjb252ZXJ0VG9QaGFudG9tVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9JZGVudGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udGFpbnNNb3ZI
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNVbmxpbmtlZExvY2FsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjp3aWxsSGF2ZUNvZGVHZW5Pck9TUik6CisgICAgICAgICogZGZn
L0RGR05vZGVGbGFncy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZHVtcE5vZGVGbGFncyk6Cisg
ICAgICAgICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5o
OgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXRCYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3Bh
Z2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OmRv
RG91YmxlVm90aW5nKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUludDMyVG9Eb3VibGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkZXRlY3RQZWVw
SG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5lZWRzVHlw
ZUNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRT
dHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhh
c2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGRmZy9ERkdWYWxp
ZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlQ1BTKToKKyAg
ICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0
QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0
TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTW92SGlu
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVab21iaWVIaW50
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUludDMyVG9Eb3Vi
bGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBlQ2hlY2spOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6ZW1pdE9TUkV4aXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dC5jcHA6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvZGVhZC1pbnQzMi10by1kb3VibGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvZGVhZC11aW50MzItdG8tbnVtYmVyLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisKIDIwMTMtMTItMjUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjEwMzMgYW5kIHIx
NjEwNzQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmluCiAKICAgICBpZiAoY29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7
CisgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7CiAgICAgaWYgKHRoaXMt
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCkKICAgICAgICAgb3V0LnByaW50KCIgKFNBQkkpIik7CiAgICAgaWYgKG93bmVyRXhlY3V0
YWJsZSgpLT5uZXZlcklubGluZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNyArMjQ0LDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCB1c2VzT3Bjb2RlKE9wY29kZUlEKTsKIAotICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uQ291bnQoKSB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0K
KyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVj
dGlvbnMuc2l6ZSgpOyB9CiAKICAgICBpbnQgYXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShzaXpl
X3QgYXJndW1lbnQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsMTAgKzE5NSwxMCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCi0gICAgY2FzZSBNb3ZIaW50OgotICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7Ci0g
ICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEgTW92SGludCBpcyBlZmZlY3Rp
dmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKLSAgICAgICAgLy8gd2FzIGRlYWQuCisg
ICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcu
IEEgTW92SGludCBvbmx5IGluZm9ybXMgdXMgYWJvdXQgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVk
CisgICAgICAgIC8vIGluIGJ5dGVjb2RlLCBidXQgdGhpcyBjb2RlIGlzIGp1c3QgY29uY2VybmVk
IHdpdGggd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcgZHVyaW5nCisgICAgICAgIC8vIERGRyBl
eGVjdXRpb24uCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xNTgzLDYgKzE1
ODMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tOgorICAgIGNhc2UgQ2hlY2s6
CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgog
ICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDYg
KzMzMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyZXMgb2Yg
YW5vdGhlciB2YXJpYWJsZS4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBNb3ZIaW50cyBhdCBhbGwsIHNpbmNlIHRoZXkg
cmVwcmVzZW50IHdoYXQgaGFwcGVucworICAgICAgICAgICAgICAgICAgICAvLyBpbiBieXRlY29k
ZS4gV2UgcmVtYXRlcmlhbGl6ZSBhcmd1bWVudHMgb2JqZWN0cyBvbiBPU1IgZXhpdCBhbnl3YXku
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1l
bnRzVXNlcyhub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEzICs2
MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6Ci0gICAgICAgICAgICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPmJhY2t3YXJkU3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAgICAgICAg
ICAgICAgbV9iYWRQcm9wZXJ0eUp1bXAgPSBqaXQtPnNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPmJhY2t3YXJkU3BlY3Vs
YXRpb25DaGVjayhCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG1f
YmFzZUdQUiksIDApOworICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPnNwZWN1
bGF0aW9uQ2hlY2soQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCht
X2Jhc2VHUFIpLCAwKTsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2
ICsxODcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIENoZWNrOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6CiAgICAg
ICAgIGNhc2UgQml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2MTA3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzIsMTUgKzIzMiwxOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAg
ICAgfQogICAgIAotICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgU2V0T25FbnRyeSB9Owor
ICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgSW1tZWRpYXRlU2V0IH07CiAgICAgTm9kZSog
c2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVu
dD8KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJu
IHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKLQotICAgICAgICAvLyBNdXN0
IGJlIGEgbG9jYWwuCi0gICAgICAgIHJldHVybiBzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSwgc2V0
TW9kZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQub2Zmc2V0
KCkpLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZCA9
IERlbGF5ZWRTZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
c2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKKyAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBl
bmQoZGVsYXllZCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGRlbGF5ZWQuZXhlY3V0ZSh0aGlzLCBzZXRNb2RlKTsKICAgICB9CiAK
ICAgICBOb2RlKiBzZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRN
b2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC0xMTIxLDYgKzExMjUsMjcgQEAgcHJpdmF0ZToK
ICAgICB9OwogICAgIAogICAgIElubGluZVN0YWNrRW50cnkqIG1faW5saW5lU3RhY2tUb3A7Cisg
ICAgCisgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAgICAgIAorICAgICAgICBE
ZWxheWVkU2V0TG9jYWwoKSB7IH0KKyAgICAgICAgRGVsYXllZFNldExvY2FsKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9vcGVyYW5kKG9wZXJh
bmQpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTm9kZSogZXhlY3V0ZShCeXRlQ29kZVBhcnNlciogcGFyc2VyLCBT
ZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X29wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNl
dEFyZ3VtZW50KG1fb3BlcmFuZCwgbV92YWx1ZSwgc2V0TW9kZSk7CisgICAgICAgICAgICByZXR1
cm4gcGFyc2VyLT5zZXRMb2NhbChtX29wZXJhbmQsIG1fdmFsdWUsIHNldE1vZGUpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAyPiBtX3NldExv
Y2FsUXVldWU7CiAKICAgICAvLyBIYXZlIHdlIGJ1aWx0IG9wZXJhbmQgbWFwcz8gV2UgaW5pdGlh
bGl6ZSB0aGVtIGxhemlseSwgYW5kIG9ubHkgd2hlbiBkb2luZwogICAgIC8vIGlubGluaW5nLgpA
QCAtMTMyNSw5ICsxMzUwLDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZQogICAgICAgICA9PSBjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpOwogICAgIGlm
IChjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxsKCkpIHsKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KEpTU3RhY2s6OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIGNhbGxU
YXJnZXROb2RlLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBzY29wZVZhcmlhYmxlID0KLSAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6U2NvcGVDaGFpbiksIGFkZFRvR3JhcGgoR2V0U2NvcGUsIGNh
bGxUYXJnZXROb2RlKSktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihKU1N0YWNrOjpTY29wZUNoYWluKSwgYWRkVG9HcmFwaChHZXRTY29wZSwg
Y2FsbFRhcmdldE5vZGUpLCBJbW1lZGlhdGVTZXQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAg
ICAgICAgCiAgICAgICAgIGNhbGxlZVZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1
ZSk7CiAgICAgICAgIHNjb3BlVmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsK
QEAgLTE4NzIsNiArMTg5NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1f
c2V0TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICBtX3NldExvY2FsUXVldWUu
cmVzaXplKDApOworICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBk
ZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBsaW1pdCkgewogICAg
ICAgICAgICAgLy8gT3JkaW5hcmlseSB3ZSB3YW50IHRvIHBsYW50IGEganVtcC4gQnV0IHJlZnVz
ZSB0byBkbyB0aGlzIGlmIHRoZSBibG9jayBpcwpAQCAtMTkwMyw3ICsxOTMyLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2VudGVy
OgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5lZC4KICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPm1fbnVtVmFyczsgKytpKQotICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgU2V0T25FbnRyeSk7CisgICAgICAgICAg
ICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25zdGFudFVuZGVmaW5lZCgp
LCBJbW1lZGlhdGVTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW50ZXIpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBAIC0yOTA4LDcgKzI5Mzcs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCk7CiAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFj
a1RvcC0+bV9yZXR1cm5WYWx1ZS5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgICAgIHNldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICAgICAgc2V0RGly
ZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlhdGVTZXQpOwogICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcmV0dXJuaW5nIGZyb20gdGhlIGZp
cnN0IGJsb2NrLCB0aGVuIHdlJ3JlIGRvbmUgcGFyc2luZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1
MSw3ICsxMDUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBBU1NFUlQobm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3MocGhhbnRvbVR5cGUpOworICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7CiAgICAgICAgIGlmIChwaGFu
dG9tVHlwZSA9PSBQaGFudG9tKQogICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50
b21DaGlsZHJlbihub2RlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw5ICsxMjks
OSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBD
b25zdGFudFN0b3JhZ2VQb2ludGVyOgogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAgICAgY2Fz
ZSBEb3VibGVBc0ludDMyOgorICAgIGNhc2UgQ2hlY2s6CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNh
c2UgWm9tYmllSGludDoKICAgICBjYXNlIFVwc2lsb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw4ICsxODIsNiBAQCBl
bnVtIFJlZkNvdW50U3RhdGUgewogCiBlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRv
bWF0aWNPcGVyYW5kU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9OwogCi1l
bnVtIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNw
ZWN1bGF0aW9uIH07Ci0KIGVudW0gUHJvb2ZTdGF0dXMgeyBOZWVkc0NoZWNrLCBJc1Byb3ZlZCB9
OwogCiBpbmxpbmUgYm9vbCBpc1Byb3ZlZChQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEyICsx
MTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9u
IGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2Rl
LT5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVtb3ZlRWRnZSgwKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBj
aGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVFeGl0c0ZvcndhcmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhbnRvbS5tZXJn
ZUZsYWdzKE5vZGVFeGl0c0ZvcndhcmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBwaGFudG9tKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZHJlbi5j
aGlsZDEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgY2hp
bGRyZW4pOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRn
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2Uo
KSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsMTIg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGVwdGhGaXJzdC5zaXpl
KCk7IGktLTspCiAgICAgICAgICAgICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsKICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KQogICAgICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNsZWFuVmFyaWFibGVzKG1fZ3Jh
cGgubV9hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1f
cmVmQ291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CkBAIC0xNTIsNiArMTU2LDM2IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgICAgICBjYXNlIFNT
QToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVGhyZWFk
ZWRDUFM6IHsKKyAgICAgICAgICAgIC8vIENsZWFuIHVwIHZhcmlhYmxlIGxpbmtzIGZvciB0aGUg
YmxvY2suIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgdGhlIGFjdHVhbCBEQ0UKKyAgICAgICAg
ICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0byBzZWUgR2V0TG9jYWxzLCBzbyB3ZSBjYW4gYnlwYXNz
IHRoZW0gaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUKKyAgICAgICAgICAgIC8vIHZhcnMtYXQtdGFp
bCBwb2ludCB0byBhIEdldExvY2FsLCB0aGUgR2V0TG9jYWwgaXMgZGVhZCwgYnV0IHRoZSBQaGkg
aXQgcG9pbnRzCisgICAgICAgICAgICAvLyB0byBpcyBhbGl2ZS4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IDA7IHBoaUluZGV4IDwgYmxvY2stPnBo
aXMuc2l6ZSgpOyArK3BoaUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+cGhp
c1twaGlJbmRleF0tPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGNvdWxkIGFjdHVhbGx5IGZyZWUgbm9kZXMgaGVyZS4gRXhjZXB0IHRoYXQgaXQg
cHJvYmFibHkKKyAgICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIsIHNpbmNlIHdl
IGRvbid0IGFkZCBhbnkgbm9kZXMgYWZ0ZXIgdGhpcyBwaGFzZS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjIzOQorICAg
ICAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleC0tXSA9IGJsb2NrLT5waGlzLmxh
c3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnBoaXMucmVtb3ZlTGFzdCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2xlYW5WYXJpYWJsZXMoYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBjbGVh
blZhcmlhYmxlcyhibG9jay0+dmFyaWFibGVzQXRUYWlsKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7
IGluZGV4SW5CbG9jay0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChp
bmRleEluQmxvY2spOwpAQCAtMTU5LDM3ICsxOTMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2Ug
TW92SGludDogewotICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBk
ZWFkIGJ1dCBpdHMKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRo
ZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAmJiBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5jaGlsZDEoKS0+b3AoKSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMSgpLT5j
aGlsZDEoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91
bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhab21iaWVIaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpID0gRWRnZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhp
bnRBbmRDaGVjayk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsK
LSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBEQ0UgcnVucyBvbmx5IG9uY2UuCisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OiB7
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7IGNoaWxkSWR4KyspIHsKQEAgLTIyOCw2ICsyNDgsMjcgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYXJpYWJsZXNWZWN0b3JUeXBl
PgorICAgIHZvaWQgY2xlYW5WYXJpYWJsZXMoVmFyaWFibGVzVmVjdG9yVHlwZSYgdmFyaWFibGVz
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFyaWFibGVzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IHZhcmlhYmxlc1tpXTsKKyAgICAgICAgICAg
IGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFBoYW50b20gJiYgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2Fs
KSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAgICAgIGlm
IChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
c1tpXSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlc1tpXSA9IDA7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fd29ya2xpc3Q7CiAg
ICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg2LDcgKzg4Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFBo
YW50b206Ci0gICAgICAgIGNhc2UgSWRlbnRpdHk6IHsKKyAgICAgICAgY2FzZSBJZGVudGl0eToK
KyAgICAgICAgY2FzZSBDaGVjazogewogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1ldGlj
KCkpCkBAIC05MDcsOSArOTA4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0Ogog
ICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAg
ICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgogICAgICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1
cm46CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKQEAgLTk1MSw3ICs5NDks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlPFN0cmlu
Z1VzZT4obm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKLQorICAgICAg
ICAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9w
IGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJz
IGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKQEAgLTEwMDUsNiAr
MTAwMyw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVj
azoKICAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNl
IFR5cGVkQXJyYXlXYXRjaHBvaW50OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNh
c2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVs
dDoKQEAgLTEwMTIsNyArMTAxMiw4IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgb2Jz
ZXJ2ZVVudHlwZWRFZGdlKTsKKyAgICAgICAgaWYgKCFub2RlLT5jb250YWluc01vdkhpbnQoKSkK
KyAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIG9ic2Vy
dmVVbnR5cGVkRWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgb2JzZXJ2ZVVudHlwZWRFZGdl
KE5vZGUqLCBFZGdlJiBlZGdlKQpAQCAtMTQ3OCw3ICsxNDc5LDcgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGlmIChpc0RvdWJsZSh1c2VLaW5kKSkgewogICAgICAgICAgICAgaWYgKGVkZ2Ut
PnNob3VsZFNwZWN1bGF0ZUludDMyRm9yQXJpdGhtZXRpYygpKSB7Ci0gICAgICAgICAgICAgICAg
aW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoZWRnZSwgdXNlS2luZCwgbV9jdXJyZW50Tm9kZS0+c3Bl
Y3VsYXRpb25EaXJlY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJs
ZU5vZGUoZWRnZSwgdXNlS2luZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xNDkxLDcgKzE0OTIsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgSW50NTJU
b0RvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwg
RWRnZShlZGdlLm5vZGUoKSwgTnVtYmVyVXNlKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTcGVjdWxhdGlvbkRpcmVjdGlvbihtX2N1cnJlbnROb2RlLT5zcGVjdWxhdGlvbkRpcmVjdGlv
bigpKTsKICAgICAgICAgICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTE1NDUsNyArMTU0NSw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTIsIEludDUy
VG9WYWx1ZSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBFZGdl
KGVkZ2Uubm9kZSgpLCBVbnR5cGVkVXNlKSk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFNwZWN1
bGF0aW9uRGlyZWN0aW9uKG1fY3VycmVudE5vZGUtPnNwZWN1bGF0aW9uRGlyZWN0aW9uKCkpOwog
ICAgICAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMTU4NywxMyArMTU4NiwxMSBAQCBwcml2YXRlOgogICAgICAg
ICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBp
bmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1i
ZXJVc2UpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91YmxlLCBJ
bnQzMlRvRG91YmxlLAogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRn
ZShlZGdlLm5vZGUoKSwgTnVtYmVyVXNlKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9y
d2FyZFNwZWN1bGF0aW9uKQotICAgICAgICAgICAgcmVzdWx0LT5tZXJnZUZsYWdzKE5vZGVFeGl0
c0ZvcndhcmQpOwogICAgICAgICAKICAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5k
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJ
Q01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vICAgdGltZSBhbmQgcHJlc2VydmUgc29tZSBraW5kIG9mIHNhbml0eSwgaWYgd2Ug
aG9pc3Qgc29tZXRoaW5nIHRoYXQgbXVzdCBleGl0LgogICAgICAgICAvLwogICAgICAgICAvLyBB
bHNvLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRvOgotICAgICAgICAvLyAtIENsZWFyIE5vZGVFeGl0
c0ZvcndhcmQgZm9yIGFueSBub2RlcyB3ZSBob2lzdGVkLgogICAgICAgICAvLyAtIFVwZGF0ZSB0
aGUgc3RhdGUtYXQtdGFpbCB3aXRoIHRoZSBub2RlIHdlIGhvaXN0ZWQsIHNvIGZ1dHVyZSBob2lz
dCBjYW5kaWRhdGVzCiAgICAgICAgIC8vICAga25vdyBhYm91dCBhbnkgdHlwZSBjaGVja3Mgd2Ug
aG9pc3RlZC4KICAgICAgICAgLy8KQEAgLTIzMCw4ICsyMjksNiBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgZGF0YS5wcmVIZWFkZXItPmluc2VydEJlZm9yZUxhc3Qobm9kZSk7CiAgICAg
ICAgIG5vZGUtPm1pc2Mub3duZXIgPSBkYXRhLnByZUhlYWRlcjsKLSAgICAgICAgTm9kZUZsYWdz
IGRpZEV4aXRGb3J3YXJkID0gbm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQ7Ci0gICAg
ICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7CiAgICAgICAgIG5vZGUtPmNv
ZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gZGF0YS5wcmVIZWFkZXItPmxhc3QoKS0+Y29kZU9yaWdp
bkZvckV4aXRUYXJnZXQ7CiAgICAgICAgIAogICAgICAgICAvLyBNb2RpZnkgdGhlIHN0YXRlcyBh
dCB0aGUgZW5kIG9mIHRoZSBwcmVIZWFkZXIgb2YgdGhlIGxvb3Agd2UgaG9pc3RlZCB0bywKQEAg
LTI1Niw3ICsyNTMsNiBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbm9kZVJlZiA9
IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9k
ZS0+Y2hpbGRyZW4pOwotICAgICAgICBub2RlUmVmLT5tZXJnZUZsYWdzKGRpZEV4aXRGb3J3YXJk
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAJKHJldmlzaW9uIDE2MTA3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTUgKzM4LDEzIEBAIE1pbmlmaWVkTm9kZSBNaW5pZmllZE5vZGU6
OmZyb21Ob2RlKE5vZGUKICAgICBNaW5pZmllZE5vZGUgcmVzdWx0OwogICAgIHJlc3VsdC5tX2lk
ID0gTWluaWZpZWRJRChub2RlKTsKICAgICByZXN1bHQubV9vcCA9IG5vZGUtPm9wKCk7Ci0gICAg
aWYgKGhhc0NoaWxkKG5vZGUtPm9wKCkpKQotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9
IE1pbmlmaWVkSUQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKS5tX2lkOwotICAgIGVsc2UgaWYgKGhh
c0NvbnN0YW50TnVtYmVyKG5vZGUtPm9wKCkpKQotICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5m
byA9IG5vZGUtPmNvbnN0YW50TnVtYmVyKCk7CisgICAgaWYgKGhhc0NvbnN0YW50TnVtYmVyKG5v
ZGUtPm9wKCkpKQorICAgICAgICByZXN1bHQubV9pbmZvID0gbm9kZS0+Y29uc3RhbnROdW1iZXIo
KTsKICAgICBlbHNlIGlmIChoYXNXZWFrQ29uc3RhbnQobm9kZS0+b3AoKSkpCi0gICAgICAgIHJl
c3VsdC5tX2NoaWxkT3JJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZS0+d2Vha0Nv
bnN0YW50KCkpOworICAgICAgICByZXN1bHQubV9pbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+d2Vha0NvbnN0YW50KCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKTsKLSAgICAgICAgcmVzdWx0Lm1fY2hpbGRPcklu
Zm8gPSAwOworICAgICAgICByZXN1bHQubV9pbmZvID0gMDsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5v
ZGUuaAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
aW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDkgQEAgaW5saW5lIGJv
b2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIHN3aXRjaCAodHlwZSkgewogICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgIGNhc2UgVmFs
dWVUb0ludDMyOgotICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOgotICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6
Ci0gICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgY2FzZSBJbnQ1MlRvRG91YmxlOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoIXBlcm1pdHNPU1JC
YWNrd2FyZFJld2lyaW5nKHR5cGUpICYmICFwZXJtaXRzT1NSRm9yd2FyZFJld2lyaW5nKHR5cGUp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KQEAgLTY2LDE0ICs1OSw2IEBAIHB1
YmxpYzoKICAgICBNaW5pZmllZElEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogICAgIE5v
ZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQogICAgIAotICAgIGJvb2wgaGFzQ2hp
bGQxKCkgY29uc3QgeyByZXR1cm4gaGFzQ2hpbGQobV9vcCk7IH0KLSAgICAKLSAgICBNaW5pZmll
ZElEIGNoaWxkMSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFzQ2hpbGQobV9vcCkp
OwotICAgICAgICByZXR1cm4gTWluaWZpZWRJRDo6ZnJvbUJpdHMobV9jaGlsZE9ySW5mbyk7Ci0g
ICAgfQotICAgIAogICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNDb25z
dGFudE51bWJlcigpIHx8IGhhc1dlYWtDb25zdGFudCgpOyB9CiAgICAgCiAgICAgYm9vbCBoYXND
b25zdGFudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGhhc0NvbnN0YW50TnVtYmVyKG1fb3ApOyB9
CkBAIC04MSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjb25zdGFudE51bWJlcigp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnROdW1iZXIobV9vcCkpOwot
ICAgICAgICByZXR1cm4gbV9jaGlsZE9ySW5mbzsKKyAgICAgICAgcmV0dXJuIG1faW5mbzsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBoYXNXZWFrQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNX
ZWFrQ29uc3RhbnQobV9vcCk7IH0KQEAgLTg5LDcgKzc0LDcgQEAgcHVibGljOgogICAgIEpTQ2Vs
bCogd2Vha0NvbnN0YW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNXZWFrQ29u
c3RhbnQobV9vcCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fY2hp
bGRPckluZm8pOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1faW5mbyk7
CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBNaW5pZmllZElEIGdldElEKE1pbmlmaWVkTm9kZSog
bm9kZSkgeyByZXR1cm4gbm9kZS0+aWQoKTsgfQpAQCAtOTksMjAgKzg0LDYgQEAgcHVibGljOgog
ICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgaGFzQ2hpbGQoTm9kZVR5cGUg
dHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgotICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6Ci0gICAgICAgIGNhc2UgSW50
NTJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KICAgICBzdGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihOb2RlVHlw
ZSB0eXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gSlNDb25zdGFudDsKQEAgLTEy
Myw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIE1pbmlmaWVkSUQgbV9pZDsK
LSAgICB1aW50cHRyX3QgbV9jaGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlmaWVkIGdy
YXBoIGhhdmUgb25seSBvbmUgY2hpbGQgZWFjaC4KKyAgICB1aW50cHRyX3QgbV9pbmZvOwogICAg
IE5vZGVUeXBlIG1fb3A7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDYgQEAgYm9vbCBOb2RlOjpoYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmIAogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBH
ZXRBcmd1bWVudDoKICAgICBjYXNlIFNldExvY2FsOgotICAgIGNhc2UgTW92SGludDoKLSAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBTZXRB
cmd1bWVudDoKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNTkg
KzI3NCwyNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBmaWx0ZXJGbGFncyh+Zmxh
Z3MpOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBzcGVjdWxhdGlvbkRp
cmVjdGlvbigpCi0gICAgewotICAgICAgICBpZiAoZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQp
Ci0gICAgICAgICAgICByZXR1cm4gRm9yd2FyZFNwZWN1bGF0aW9uOwotICAgICAgICByZXR1cm4g
QmFja3dhcmRTcGVjdWxhdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRTcGVjdWxhdGlv
bkRpcmVjdGlvbihTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAgICBjYXNlIEZvcndhcmRTcGVjdWxhdGlvbjoK
LSAgICAgICAgICAgIG1lcmdlRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNhc2UgQmFja3dhcmRTcGVjdWxhdGlvbjoKLSAgICAgICAgICAgIGNs
ZWFyRmxhZ3MoTm9kZUV4aXRzRm9yd2FyZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCiAg
ICAgdm9pZCBzZXRPcEFuZERlZmF1bHRGbGFncyhOb2RlVHlwZSBvcCkKICAgICB7CiAgICAgICAg
IG1fb3AgPSBvcDsKICAgICAgICAgbV9mbGFncyA9IGRlZmF1bHRGbGFncyhvcCk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3MoTm9kZVR5cGUgb3ApCi0gICAg
ewotICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKLSAgICAgICAg
c2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVja2VkKG9wKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFnc1VuY2hlY2tlZChOb2RlVHlwZSBvcCkKLSAg
ICB7Ci0gICAgICAgIG1fb3AgPSBvcDsKLSAgICAgICAgbV9mbGFncyA9IChkZWZhdWx0RmxhZ3Mo
b3ApICYgfk5vZGVFeGl0c0ZvcndhcmQpIHwgKG1fZmxhZ3MgJiBOb2RlRXhpdHNGb3J3YXJkKTsK
LSAgICB9Ci0KICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b20oKQogICAgIHsKLSAgICAgICAgc2V0
T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzKFBoYW50b20pOworICAgICAgICBzZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21VbmNo
ZWNrZWQoKQogICAgIHsKLSAgICAgICAgc2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzVW5jaGVj
a2VkKFBoYW50b20pOworICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKICAg
ICB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0lkZW50aXR5KCkKICAgICB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNoaWxkMSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNoaWxkMigpKTsK
LSAgICAgICAgc2V0T3BBbmREZWZhdWx0Tm9uRXhpdEZsYWdzKElkZW50aXR5KTsKKyAgICAgICAg
c2V0T3BBbmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOwogICAgIH0KIAogICAgIGJvb2wgbXVzdEdl
bmVyYXRlKCkKQEAgLTUzMSw5ICs0OTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgYm9vbCBjb250
YWluc01vdkhpbnQoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7Ci0gICAgICAgIGNh
c2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50
QW5kQ2hlY2s6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTY3LDYgKzUzMyw4IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoK
ICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExOTAsMTEgKzEx
NTgsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNh
c2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgotICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICBjYXNlIFZh
bHVlVG9JbnQzMjoKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgY2FzZSBE
b3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBQaGFudG9tOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw5ICs5Niw2IEBAIHZvaWQgZHVtcE5vZGVGbGFncyhQcmludFN0cmVhbSYgYWN0dWFsT3UK
ICAgICBpZiAoIShmbGFncyAmIE5vZGVEb2VzTm90RXhpdCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgIkNhbkV4aXQiKTsKICAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlRXhpdHNGb3J3YXJk
KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJOb2RlRXhpdHNGb3J3YXJkIik7Ci0gICAgCiAg
ICAgQ1N0cmluZyBzdHJpbmcgPSBvdXQudG9DU3RyaW5nKCk7CiAgICAgaWYgKCFzdHJpbmcubGVu
Z3RoKCkpCiAgICAgICAgIGFjdHVhbE91dC5wcmludCgiPGVtcHR5PiIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw5ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2RlZmlu
ZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgICAgICAgICAweDQwMDAKIAotI2RlZmluZSBOb2Rl
RXhpdHNGb3J3YXJkICAgICAgICAgICAgICAgICAweDgwMDAKLQotI2RlZmluZSBOb2RlSXNTdGF0
aWNDb25zdGFudCAgICAgICAgICAgIDB4MTAwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBwYXJzZXIs
IHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhlbmNlIGNv
dWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgorI2RlZmluZSBOb2RlSXNTdGF0aWNDb25zdGFu
dCAgICAgICAgICAgICAweDgwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBwYXJzZXIsIHRvIGRldGVy
bWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhlbmNlIGNvdWxkIGJlIGZv
bGRlZCBhdCBwYXJzZS10aW1lLgogCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVGbGFnczsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTYxMDcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NywxMiArNTcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIC8qIEFueSB0d28gbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc2FtZSBQaGkgZ3JhcGgg
d2lsbCBzaGFyZSB0aGUgc2FtZSAqL1wKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0
aHVzIHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBOb2Rl
UmVzdWx0SlMpIFwKLSAgICBtYWNybyhTZXRMb2NhbCwgTm9kZUV4aXRzRm9yd2FyZCkgXAotICAg
IG1hY3JvKE1vdkhpbnRBbmRDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0Zvcndh
cmQpIFwKKyAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVE
b2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIG1hY3JvKEdldEFyZ3VtZW50LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNr
LCAwKSAvKiBVc2VkIGlmIHdlIHdhbnQganVzdCBhIHR5cGUgY2hlY2sgYnV0IG5vdCBsaXZlbmVz
cy4gRENFIGVpdGhlcnMga2lsbHMgdGhpcyBvciBjb252ZXJ0cyBpdCB0byBQaGFudG9tLiAqL1wK
ICAgICBtYWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikg
XAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwK
ICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApA
QCAtMzE4LDgwICszMTgsNiBAQCBpbmxpbmUgTm9kZUZsYWdzIGRlZmF1bHRGbGFncyhOb2RlVHlw
ZSBvCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhO
b2RlVHlwZSBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBJZGVudGl0eToKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICBj
YXNlIEludDUyVG9Eb3VibGU6Ci0gICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgb25seSBub2RlIHdo
ZXJlIHdlIGRvOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgYjogVUludDMyVG9OdW1iZXIo
QGEpCi0gICAgICAgIC8vICAgICBjOiBTZXRMb2NhbChAYikKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gYW5kIHRoZW4gYWxzbyBoYXZlIHNvbWUgdXNlcyBvZiBAYSB3aXRob3V0IFBoYW50b20naW5n
IEBiLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBwcmlvcml0eSB3aXRoIHdoaWNoIHdl
IHNob3VsZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGUgZm9yIGZvcndhcmQKLS8vIHJld2lyaW5nLiBI
aWdoZXIgaXMgYmV0dGVyLiBaZXJvIG1lYW5zIHRoYXQgdGhlIG5vZGUgaXMgbm90IHVzZWZ1bCBm
b3IgcmV3aXJpbmcuCi0vLyBCeSBjb252ZW50aW9uLCB3ZSB1c2UgMTAwIHRvIG1lYW4gdGhhdCB0
aGUgbm9kZSBpcyB0b3RhbGx5IGVxdWl2YWxlbnQgdG8gaXRzCi0vLyBpbnB1dCB3aXRoIG5vIGlu
Zm9ybWF0aW9uIGxvc3MuCi1pbmxpbmUgdW5zaWduZWQgZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9u
U2NvcmUoTm9kZVR5cGUgb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgSWRlbnRp
dHk6Ci0gICAgICAgIC8vIFdlIHNob3VsZG4ndCBzZWUgdGhlc2UgYnkgdGhlIHRpbWUgd2UgZ2V0
IHRvIE9TUiBldmVuIHRob3VnaCBpdCBjbGVhcmx5Ci0gICAgICAgIC8vIGlzIGEgcGVyZmVjdCBp
ZGVudGl0eSBmdW5jdGlvbi4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBEb3VibGVBc0ludDMyOgot
ICAgICAgICAvLyBUaGlzIHNwZWN1bGF0ZXMgdGhhdCB0aGUgaW5jb21pbmcgZG91YmxlIGlzIGNv
bnZlcnRpYmxlIHRvIGFuIGludDMyLiBTbwotICAgICAgICAvLyBpdHMgcmVzdWx0IGlzIHRvdGFs
bHkgZXF1aXZhbGVudC4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBJ
bnQzMlRvRG91YmxlOgotICAgICAgICAvLyBUaGlzIGNvbnZlcnRzIGFuIGludDMyIHRvIGEgZG91
YmxlLCBidXQgdGhhdCBsb3NlcyBhIGJpdCBvZiBpbmZvcm1hdGlvbi4KLSAgICAgICAgLy8gT1RP
SCBpdCdzIHN0aWxsIGFuIGVxdWl2YWxlbnQgbnVtYmVyLgotICAgICAgICByZXR1cm4gNzU7Ci0g
ICAgICAgIAotICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIC8vIEl0J3MgY29tcGxl
dGVseSBmaW5lIHRvIHVzZSB0aGlzIGZvciBPU1IgZXhpdCwgc2luY2UgdGhlIHVpbnQzMiBpc24n
dAotICAgICAgICAvLyBhY3R1YWxseSByZXByZXNlbnRhYmxlIGluIGJ5dGVjb2RlLgotICAgICAg
ICByZXR1cm4gMTAwOwotCi0gICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgIC8vIFRoaXMg
bG9zZXMgaW5mb3JtYXRpb24uIE9ubHkgdXNlIGl0IGlmIHRoZXJlIGFyZSBubyBiZXR0ZXIgYWx0
ZXJuYXRpdmVzLgotICAgICAgICByZXR1cm4gMjU7Ci0gICAgICAgIAotICAgIGNhc2UgSW50NTJU
b1ZhbHVlOgotICAgICAgICAvLyBMb3NlcyBubyBpbmZvcm1hdGlvbi4gSXQganVzdCBib3hlcyB0
aGUgdmFsdWUsIHdoaWNoIGlzIHdoYXQgT1NSIHdhbnRzCi0gICAgICAgIC8vIHRvIGRvIGFueXdh
eS4KLSAgICAgICAgcmV0dXJuIDEwMDsKLSAgICAgICAgCi0gICAgY2FzZSBJbnQ1MlRvRG91Ymxl
OgotICAgICAgICAvLyBUaGlzIGlzIGxpa2UgSW50MzJUb0RvdWJsZTsgd2UgY2FuIHVzZSBpdCBi
ZWNhdXNlIGl0IGdpdmVzIGEgc2VtYW50aWNhbGx5Ci0gICAgICAgIC8vIGVxdWl2YWxlbnQgdmFs
dWUgYnV0IHRoYXQgdmFsdWUgbWF5IGJlIGFuIGludDMyIGluIGEgZG91YmxlLCBzbyB3ZSdkCi0g
ICAgICAgIC8vIHJhdGhlciBub3QgaWYgd2UgY2FuIGF2b2lkIGl0LgotICAgICAgICByZXR1cm4g
NzU7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotaW5saW5lIGJvb2wgcGVybWl0c09TUkZvcndhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKLXsK
LSAgICByZXR1cm4gZm9yd2FyZFJld2lyaW5nU2VsZWN0aW9uU2NvcmUob3ApID4gMDsKLX0KLQog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMywxNyArMTAzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExv
Y2FsKCkpID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPSBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYx
MDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxNyArMTA0LDkgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RP
U1JFbnRyeUxvY2FsLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJs
ZS0+bG9jYWwoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDcmVh
dGUgYSBNb3ZIaW50LiBXZSBjYW4ndCB1c2UgTW92SGludCdzIGRpcmVjdGx5IGF0IHRoaXMgc3Rh
Z2Ugb2YKLSAgICAgICAgICAgIC8vIGNvbXBpbGF0aW9uLCBzbyB3ZSBjb29rIG9uZSB1cCBieSBj
cmVhdGluZyBhIG5ldyBWYXJpYWJsZUFjY2Vzc0RhdGEKLSAgICAgICAgICAgIC8vIHRoYXQgaXNu
J3QgdW5pZmllZCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlz
Ci0gICAgICAgICAgICAvLyBTZXRMb2NhbCB3aWxsIHR1cm4gaW50byBhIE1vdkhpbnQgYW5kIHdp
bGwgbm90IGhhdmUgYW55IHR5cGUgY2hlY2tzLgotICAgICAgICAgICAgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSk7Ci0gICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlID0gJm1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEubGFzdCgpOwotICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBuZXdSb290LT5h
cHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRMb2NhbCwg
Y29kZU9yaWdpbiwgT3BJbmZvKG5ld1ZhcmlhYmxlKSwKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFw
cGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIE1vdkhpbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksCiAgICAgICAgICAg
ICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7Ci0gICAgICAgICAgICBzZXRMb2NhbC0+c2V0U3Bl
Y3VsYXRpb25EaXJlY3Rpb24oQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIH0KICAgICAg
ICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lz
dGVyczsgKytsb2NhbCkgewogICAgICAgICAgICAgTm9kZSogcHJldmlvdXNIZWFkID0gdGFyZ2V0
LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwpAQCAtMTIyLDkgKzExNCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGxvY2Fsc1tsb2NhbF07Ci0gICAgICAgICAgICBOb2RlKiBz
ZXRMb2NhbCA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICBuZXdSb290LT5hcHBl
bmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29k
ZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7Ci0gICAgICAgICAgICBzZXRM
b2NhbC0+c2V0U3BlY3VsYXRpb25EaXJlY3Rpb24oQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDI2ICs2OCw2IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYg
bGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGxhYmVs
KTsKIH0KIAotdm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxvY2sqIGJsb2Nr
LCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJlY292
ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIE5vZGUqIG5vZGU7Ci0gICAgTm9kZSogbGFzdE1v
dkhpbnQ7Ci0gICAgaWYgKCFkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKGJsb2NrLCBjdXJy
ZW50Tm9kZSwgbm9kZUluZGV4LCAhIXZhbHVlUmVjb3ZlcnksIG5vZGUsIGxhc3RNb3ZIaW50KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIAotICAgIG1fY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVP
cmlnaW47Ci0gICAgCi0gICAgaWYgKCF2YWx1ZVJlY292ZXJ5KQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQVNTRVJUKGxhc3RNb3ZIaW50KTsKLSAgICBBU1NFUlQobGFzdE1vdkhpbnQtPmNo
aWxkMSgpID09IGN1cnJlbnROb2RlKTsKLSAgICBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZSA9IGFk
b3B0UmVmKAotICAgICAgICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKGxhc3RNb3ZIaW50LT5s
b2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDYgQEAgc3Ry
dWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKICAgICBDb2RlTG9jYXRp
b25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7CiAgICAgdm9p
ZCBjb3JyZWN0SnVtcChMaW5rQnVmZmVyJik7Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Gb3J3
YXJkKEJhc2ljQmxvY2sqLCBOb2RlKiwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJl
Y292ZXJ5Jik7CiAKICAgICB1bnNpZ25lZCBtX3N0cmVhbUluZGV4OwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHJldmlzaW9uIDE2
MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw0NSArNDYsNiBAQCBib29sIE9TUkV4aXRCYXNlOjpjb25zaWRl
ckFkZGluZ0FzRnJlcXVlCiAgICAgICAgICAgICBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdp
bkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCkpOwogfQogCi1ib29sIE9TUkV4
aXRCYXNlOjpkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKAotICAgIEJhc2ljQmxvY2sqIGJs
b2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVl
UmVjb3ZlcnksCi0gICAgTm9kZSomIG5vZGUsIE5vZGUqJiBsYXN0TW92SGludCkKLXsKLSAgICAv
LyBDaGVjayB0aGF0IGVpdGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRo
ZSBwcmVjZWRpbmcgbm9kZSB3YXMgYQotICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29k
ZSBvcmlnaW4sIG9yIHRoYXQgd2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5LgotICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICYmICFoYXNWYWx1ZVJlY292ZXJ5Ci0gICAgICAg
ICYmICFjdXJyZW50Tm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgTm9kZSogc2V0
TG9jYWwgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
c2V0TG9jYWwsIHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9PSBjdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQpOwotICAgIH0KLSAgICAKLSAgICAvLyBG
aW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbi4gQWxz
byB0cmFjayB0aGUgbGFzdCBtb3YgaGludAotICAgIC8vIG9uIHRoaXMgbm9kZS4KLSAgICB1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAxOwotICAgIG5vZGUgPSAwOwotICAgIGxh
c3RNb3ZIaW50ID0gMDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sg
PT0gYmxvY2stPnNpemUoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0
dXJuLiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZl
Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0
ZWNvZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhl
Y3V0ZSB0aGF0IGJ5dGVjb2RlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVt
cCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZI
aW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0
TW92SGludCA9IG5vZGU7Ci0gICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgaW5kZXhJbkJsb2NrKys7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChu
b2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbkZv
ckV4aXRUYXJnZXQpOwotICAgIHJldHVybiB0cnVlOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsMTEgKzY0LDYgQEAgc3RydWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xv
dyhwcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQotICAgIAotICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZm9yd2FyZCBjb252ZXJzaW9uIGlzIHJlYWxseSBuZWVkZWQuCi0gICAgYm9vbCBkb1Nl
YXJjaEZvckZvcndhcmRDb252ZXJzaW9uKAotICAgICAgICBCYXNpY0Jsb2NrKiwgTm9kZSogY3Vy
cmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAotICAg
ICAgICBOb2RlKiYgbmV4dEJDTm9kZSwgTm9kZSomIGxhc3RNb3ZIaW50KTsKIAogcHJpdmF0ZToK
ICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sq
IHByb2ZpbGVkQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDkgKzUwNCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2FzZSBBcnJheWlmeToKICAg
ICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0g
ICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAg
ICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBB
dFJldHVybjoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgpAQCAtNTc3LDYg
KzU3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoK
ICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgY2FzZSBDaGVjazoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6
CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICBjYXNlIFVucmVhY2hh
YmxlOgpAQCAtNTg1LDYgKzU4Myw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25S
ZWVudHJ5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKICAg
ICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgorICAgICAgICBjYXNlIE1vdkhpbnQ6
CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMg
YSBwcmVkaWN0aW9uLgpAQCAtNzQ0LDYgKzc0NCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE1vdkhpbnQ6Cisg
ICAgICAgICAgICAvLyBJZ25vcmUgdGhlc2Ugc2luY2UgdGhleSBoYXZlIG5vIGVmZmVjdCBvbiBp
bi1ERkcgZXhlY3V0aW9uLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MTA3MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDggKzE4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdmFsdWUgd2FzIGFscmVhZHkgb24gdGhlIHN0YWNrLgogICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgQ29kZU9yaWdpbigpLCBPcEluZm8odmFyaWFibGUp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsIENvZGVPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2Nh
bCgpLm9mZnNldCgpKSwgRWRnZShub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yNjksNyArMjY5LDcg
QEAgcHVibGljOgogICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJs
ZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzCiAgICAgICAgIC8vICAgdG8g
dGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4KICAgICAgICAgLy8gLSBTZXRM
b2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYgaXQncyBmbHVzaGVkLCBvciB0dXJucyBpbnRv
IGEKLSAgICAgICAgLy8gICBNb3ZIaW50IG90aGVyd2lzZS4KKyAgICAgICAgLy8gICBDaGVjayBv
dGhlcndpc2UuCiAgICAgICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1h
aW5zLCBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyB3aGVuIGEKICAgICAgICAgLy8gICBmbHVzaGVk
IFNldExvY2FsJ3MgdmFsdWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0
IHNpbXBsZXIKICAgICAgICAgLy8gICB0byByZWFzb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxv
Y2FsLCBzaW5jZSB3ZSBjYW4ganVzdCBkbyBhIGJhY2t3YXJkcwpAQCAtMzA4LDcgKzMwOCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkg
fHwgbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKENoZWNrKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5yZXBsYWNl
bWVudCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsgLy8gT25seSBmb3IgVXBzaWxvbnMuCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjEwNzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldExvY2FsOgogICAg
IGNhc2UgU2V0TG9jYWw6Ci0gICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgY2FzZSBNb3ZI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgpAQCAtMjUw
LDYgKzI0OSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKICAg
ICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CisgICAgY2FzZSBDaGVjazoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjEsMjQgKzE5MjEsMTQgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92
SGludEFuZENoZWNrKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAg
IGNhc2UgTW92SGludDoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICBjYXNlIFpvbWJpZUhp
bnQ6CisgICAgY2FzZSBDaGVjazogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAg
ICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxs
IGJlIHN0b3JlZCBhbmQKLSAgICAgICAgLy8gYXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVm
b3JlIHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJl
IHRoZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAg
ICAgLy8gc3RhY2suCi0gICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwotICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkg
ewogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM2LDI0ICsyMjM2LDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewotICAgICAgICBjb21waWxlTW92SGlu
dEFuZENoZWNrKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNh
c2UgTW92SGludDoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICBjYXNlIFpvbWJpZUhpbnQ6
CisgICAgY2FzZSBDaGVjazogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAg
IC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJl
IHN0b3JlZCBhbmQKLSAgICAgICAgLy8gYXMgYSBzcGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3Jl
IHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3ZQotICAgICAgICAvLyBrbm93IHdoZXJlIHRo
ZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMgdG8gZ28gaW4gdGhlIHZpcnR1YWwKLSAgICAgICAg
Ly8gc3RhY2suCi0gICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwotICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewog
ICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMjMwNCw3ICsyMjk0LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
bV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+
bWFjaGluZUxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0SlMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2LDcgKzEwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkK
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgbnVtRWxlbWVudHMpKSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNr
d2FyZFNwZWN1bGF0aW9uCiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4
aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBK
U1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9k
ZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKIHsK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNCwyMiArMTI0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlvbgogICAgIG1faml0
LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1f
aml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywg
bV9zdHJlYW0tPnNpemUoKSkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSog
bm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKLXsKLSAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7Ci0gICAgaWYgKG1fc3BlY3Vs
YXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFz
dE9TUkV4aXRUb0ZvcndhcmQoKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ug
bm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKLXsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwot
fQotCi1PU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBO
b2RlKiBub2RlKQorT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm4gT1NS
RXhpdEp1bXBQbGFjZWhvbGRlcigpOwpAQCAtMTUwLDE5ICsxMzUsMTYgQEAgT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6YgogICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyKGluZGV4KTsKIH0KIAotT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJ
VDo6YmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQorT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsKICAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHJldHVybiBiYWNrd2FyZFNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOworICAgIHJldHVy
biBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
RWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIGlm
ICghbV9jb21waWxlT2theSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2t3YXJkU3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFpbCk7Ci0gICAgaWYg
KG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQotICAgICAgICBj
b252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGp1bXBzVG9GYWlsKQpAQCAtMTcxLDcgKzE1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0aW9uQ2hlY2soRXgKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewogICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgxLDI0ICsxNjMsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlvbgogICAgIG1faml0LmppdENvZGUoKS0+YXBw
ZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUo
KSwgcmVjb3ZlcnlJbmRleCkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNrd2FyZFNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNw
ZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVk
Z2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3Vs
YXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsK
LX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQot
ewotICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2t3YXJk
U3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsLCBy
ZWNvdmVyeSk7Ci0gICAgaWYgKG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1
bGF0aW9uKQotICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKLX0KLQotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2UgZWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCi17Ci0gICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFp
bCwgcmVjb3ZlcnkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwg
bm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaW50KE5vZGUqIG5vZGUpCkBAIC0yMDYsNyArMTc0
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2NhbkV4aXQpOwot
ICAgIEFTU0VSVChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24p
OwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5m
byhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRP
U1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBKU1ZhbHVl
U291cmNlKCksCkBAIC0yMTcsMjYgKzE4NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJ
bnZhbGlkYXRpb25Qb2kKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZh
bHVlUmVjb3ZlcnkpCi17Ci0gICAgbV9qaXQuaml0Q29kZSgpLT5sYXN0T1NSRXhpdCgpLmNvbnZl
cnRUb0ZvcndhcmQoCi0gICAgICAgIG1fYmxvY2ssIG1fY3VycmVudE5vZGUsIG1faW5kZXhJbkJs
b2NrLCB2YWx1ZVJlY292ZXJ5KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1
ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7Ci0gICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwotICAgIGNvbnZlcnRMYXN0T1NS
RXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1
bXBzVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7Ci0gICAgYmFja3dh
cmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBzVG9GYWls
KTsKLSAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Ci19Ci0K
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlKQogewogICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CkBAIC0yNTIsMjQg
KzE5OSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVVc2Uu
bm9kZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRUeXBlQ2hlY2soSlNW
YWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCkKIHsKICAgICBBU1NFUlQobmVlZHNUeXBlQ2hlY2soZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdo
KSk7CiAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoKTsK
LSAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdlLm5vZGUo
KSwganVtcFRvRmFpbCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1Zh
bHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCi17Ci0gICAgYmFja3dhcmRU
eXBlQ2hlY2soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOwot
ICAgIGlmIChtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAg
ICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQotewotICAgIGJh
Y2t3YXJkVHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9G
YWlsKTsKLSAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Cisg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBzb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9G
YWlsKTsKIH0KIAogUmVnaXN0ZXJTZXQgU3BlY3VsYXRpdmVKSVQ6OnVzZWRSZWdpc3RlcnMoKQpA
QCAtMTM4MCwxNCArMTMxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50
KE5vZGUKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICBub3Rp
Y2VPU1JCaXJ0aChjaGlsZCk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJp
YWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT5sb2NhbCgpKSk7Ci19
Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soTm9kZSogbm9k
ZSkKLXsKLSAgICBjb21waWxlTW92SGludChub2RlKTsKLSAgICBzcGVjdWxhdGUobm9kZSwgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgIG5vUmVzdWx0KG5vZGUpOworICAgIG1fc3RyZWFtLT5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoKQpAQCAtMTQ4
Miw3ICsxNDA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OiB7Ci0gICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1h
dERlYWQpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVu
bGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTUwMSw4ICsxNDI4LDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAg
IGRhdGFMb2coIlxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPSAobV9jdXJyZW50Tm9kZS0+ZmxhZ3MoKSAmIE5vZGVF
eGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsK
LSAgICAgICAgICAgIAogICAgICAgICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKIAogI2lm
IEVOQUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQpAQCAtMTU0MCwxOCAr
MTQ2NSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiB7CiAg
ICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKICAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
ID0gdHJ1ZTsKLSAgICBtX3NwZWN1bGF0aW9uRGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlv
bjsKICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdpbigwKTsKICAgICBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oMCk7CiAKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewog
ICAgICAgICBOb2RlKiBub2RlID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKLSAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICBpZiAoIW5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICAv
LyBUaGUgYXJndW1lbnQgaXMgZGVhZC4gV2UgZG9uJ3QgZG8gYW55IGNoZWNrcyBmb3Igc3VjaCBh
cmd1bWVudHMuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICBBU1NFUlQo
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
Rmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1hdCgpOwog
ICAgICAgICAKQEAgLTIxNjcsMTYgKzIwOTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSW50MzJUb0RvdWJsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9w
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAKICAgICBpZiAobmVl
ZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyKSkgewotICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKLSAgICAgICAgICAgIGZvcndh
cmRUeXBlQ2hlY2soCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKG9wMUdQUiwg
RGF0YUZvcm1hdEpTKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYWNrd2FyZFR5
cGVDaGVjaygKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwotICAgICAgICB9CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlciwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9qaXQubW92
ZShvcDFHUFIsIHRlbXBHUFIpOwpAQCAtMjE5OCwxNiArMjExNyw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIAogICAg
IGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIpKSB7Ci0g
ICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgewotICAgICAgICAg
ICAgZm9yd2FyZFR5cGVDaGVjaygKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFUYWdH
UFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Z1bGxOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
b3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksCi0gICAgICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUikpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2soCi0gICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpKTsKLSAgICAgICAgfQorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEo
KSwgU3BlY0Z1bGxOdW1iZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CiAgICAgfQogICAgIAogICAgIHVuYm94RG91YmxlKG9wMVRhZ0dQUiwgb3AxUGF5
bG9hZEdQUiwgcmVzdWx0RlBSLCB0ZW1wRlBSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjk3LDggKzY5NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gaW50
ZXJ2ZW5pbmcgbm9kZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSBtX2luZGV4SW5CbG9jayArIDE7IGluZGV4IDwgbV9ibG9jay0+c2l6ZSgpIC0gMTsg
KytpbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4KTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBVSU5UX01BWDsKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0
J3MgYSBQaGFudG9tIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkLgorICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gUGhhbnRvbSAmJiAhbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2Rl
LgpAQCAtMjE0Myw0MyArMjE0NywyOCBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAg
Y29udmVydFRvRG91YmxlKEpTVmFsdWVPcGVyYW5kJiwgRlBSUmVnIHJlc3VsdCk7CiAjZW5kaWYK
ICAgICAKLSAgICAvLyBBZGQgYSBiYWNrd2FyZCBzcGVjdWxhdGlvbiBjaGVjay4KLSAgICB2b2lk
IGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSos
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwotICAgIHZvaWQgYmFja3dhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCk7Ci0KLSAgICAvLyBBZGQgYSBzcGVjdWxh
dGlvbiBjaGVjayB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCisgICAgLy8gQWRkIGEgc3Bl
Y3VsYXRpb24gY2hlY2suCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1Zh
bHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7Ci0gICAg
dm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKLSAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBj
aGVjayB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnksIGFuZCB3aXRoIGEgcHJvbWlzZSB0byBz
dXBwbHkgYSBqdW1wIGxhdGVyLgotICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgYmFja3dhcmRT
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKik7Ci0gICAgT1NS
RXhpdEp1bXBQbGFjZWhvbGRlciBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpT
VmFsdWVTb3VyY2UsIEVkZ2UpOwotICAgIC8vIEFkZCBhIHNldCBvZiBzcGVjdWxhdGlvbiBjaGVj
a3Mgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYganVtcHNUb0ZhaWwpOworCisgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sg
d2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LCBhbmQgd2l0aCBhIHByb21pc2UgdG8gc3VwcGx5
IGEganVtcCBsYXRlci4KKyAgICBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIHNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqKTsKKyAgICBPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsKTsKICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3
aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7Ci0gICAgdm9pZCBiYWNrd2Fy
ZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKKyAg
ICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5
Jik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBF
ZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJl
Y292ZXJ5Jik7CiAgICAgCiAgICAgdm9pZCBlbWl0SW52YWxpZGF0aW9uUG9pbnQoTm9kZSopOwog
ICAgIAotICAgIC8vIEl0IGlzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSB0byBub3QgdXNlIHRoaXMg
ZGlyZWN0bHkuCi0gICAgdm9pZCBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3QgVmFs
dWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwotICAgIAotICAgIC8vIE5vdGU6IG5vdCBz
cGVjaWZ5aW5nIHRoZSB2YWx1ZVJlY292ZXJ5IGFyZ3VtZW50IChsZWF2aW5nIGl0IGFzIFZhbHVl
UmVjb3ZlcnkoKSkgaW1wbGllcwotICAgIC8vIHRoYXQgeW91J3ZlIGVuc3VyZWQgdGhhdCB0aGVy
ZSBleGlzdHMgYSBNb3ZIaW50IHByaW9yIHRvIHlvdXIgdXNlIG9mIGZvcndhcmRTcGVjdWxhdGlv
bkNoZWNrKCkuCi0gICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNW
YWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKLSAgICB2b2lkIGZvcndhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBW
YWx1ZVJlY292ZXJ5KCkpOwotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNW
YWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0
IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmKTsKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0
aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgogICAgIHZvaWQg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2Rl
Kik7CiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNW
YWx1ZVJlZ3MsIEVkZ2UpOwogICAgIAogICAgIC8vIEhlbHBlcnMgZm9yIHBlcmZvcm1pbmcgdHlw
ZSBjaGVja3Mgb24gYW4gZWRnZSBzdG9yZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdGVycy4KICAgICBi
b29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoKSB7IHJldHVybiBtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVz
UGFzc2VkVGhyb3VnaCk7IH0KLSAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3Vy
Y2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwg
RWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsKTsKLSAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJj
ZSwgRWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CiAKICAgICB2b2lkIHNw
ZWN1bGF0ZUludDMyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUludChFZGdlKTsK
QEAgLTIyNTIsNyArMjI0MSw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJl
aW5nIGdlbmVyYXRlZC4KICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5vZGUqIG1fY3Vy
cmVudE5vZGU7Ci0gICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9zcGVjdWxhdGlvbkRpcmVjdGlv
bjsKICAgICBib29sIG1fY2FuRXhpdDsKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAg
ICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5
cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMzMgKzE2Mywy
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1
Y3R1cmUgJiYgIWl0ZXItPnZhbHVlLm1fYXJyYXlNb2RlSXNWYWxpZCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGluc2VydCBh
IGRlYWQgU2V0TG9jYWwgdG8gdGVsbCBPU1IgdGhhdCB0aGUgY2hpbGQncyB2YWx1ZSBzaG91bGQK
LSAgICAgICAgICAgICAgICAgICAgLy8gYmUgZHJvcHBlZCBpbnRvIHRoaXMgYnl0ZWNvZGUgdmFy
aWFibGUgaWYgdGhlIENoZWNrU3RydWN0dXJlIGRlY2lkZXMKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdG8gZXhpdC4KLSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAg
ICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2lu
LCBPcEluZm8odmFyaWFibGUpLCBjaGlsZDEpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFVz
ZSBOb2RlRXhpdHNGb3J3YXJkIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhl
IG5leHQKLSAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVy
IHRoYW4gcmVleGVjdXRpbmcgdGhlIGN1cnJlbnQgb25lLgotICAgICAgICAgICAgICAgICAgICBO
b2RlKiBuZXdOb2RlID0gMDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1f
c3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENl
bGxVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVyLT52YWx1ZS5tX2Fy
cmF5TW9kZUlzVmFsaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyLT52
YWx1ZS5tX2FycmF5TW9kZUhvaXN0aW5nT2theSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBu
ZXdOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2RlT3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhpdGVyLT52YWx1ZS5tX2FycmF5TW9kZS5hc1dvcmQo
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxs
VXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3
Tm9kZS0+bWVyZ2VGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTIyOCw5ICsyMTcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdl
J3JlIHRoZSBvbmx5IG9uZXMgd2hvIHdvdWxkCi0gICAgICAgICAgICAgICAgICAgIC8vIGluc2Vy
dCB0aGVzZSBub2RlcyB3aXRoIE5vZGVFeGl0c0ZvcndhcmQuCi0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjU3LDYgKzI0Myw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6CiAgICAgICAgICAgICAgICAgY2FzZSBQ
aGFudG9tOgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICAg
ICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzI5LDkgKzMxNiw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tBcnJheTogewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgcmVseSBvbiB0
aGUgZmFjdCB0aGF0IHdlJ3JlIHRoZSBvbmx5IG9uZXMgd2hvIHdvdWxkCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGluc2VydCB0aGVzZSBub2RlcyB3aXRoIE5vZGVFeGl0c0ZvcndhcmQuCi0gICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0
c0ZvcndhcmQpKTsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRM
b2NhbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU3LDYgKzM0MSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAg
Y2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTAgKzI0
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNl
dExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3Vt
ZW50CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCi0gICAg
ICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaQotICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBab21iaWVIaW50Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB8fCBlZGdlLT5vcCgpID09IE1vdkhpbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGVkZ2UtPm9wKCkgPT0gTW92SGludEFuZENoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsOSArMjU0LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChub2RlLCBlZGdlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdl
LT5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+
b3AoKSA9PSBab21iaWVIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+
b3AoKSA9PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3Ao
KSA9PSBNb3ZIaW50QW5kQ2hlY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdl
LT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRn
ZS0+b3AoKSA9PSBGbHVzaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI5Miw5ICsy
ODYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBw
cmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBNb3ZIaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkg
PT0gTW92SGludEFuZENoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5v
ZGUtPm9wKCkgPT0gWm9tYmllSGludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBy
ZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jaGVja0FycmF5SG9pc3RpbmdG
YWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZhbHNlKQorICAg
ICAgICAsIG1faXNMb2FkZWRGcm9tKGZhbHNlKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3Rh
dGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkKICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcw
ICsxOTIsOCBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAg
ICAKICAgICAgICAgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyBpbmZvID0gZ2VuZXJhdGlvbkluZm9z
LmdldChzb3VyY2UuaWQoKSk7CiAgICAgICAgIGlmIChpbmZvLmZvcm1hdCA9PSBEYXRhRm9ybWF0
Tm9uZSkgewotICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5h
dGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gQmFja3dhcmQgcmV3aXJpbmcgcmVmZXJzIHRvOgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgICBhOiBTb21ldGhpbmcoLi4uKQotICAgICAgICAg
ICAgLy8gICAgIGI6IElkKEBhKSAvLyBzb21lIGlkZW50aXR5IGZ1bmN0aW9uCi0gICAgICAgICAg
ICAvLyAgICAgYzogU2V0TG9jYWwoQGIpCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
V2hlcmUgd2UgZmluZCBAYiBiZWluZyBkZWFkLCBidXQgQGEgaXMgc3RpbGwgYWxpdmUuCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gRm9yd2FyZCByZXdpcmluZyByZWZlcnMgdG86Ci0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgIGE6IFNvbWV0aGluZyguLi4pCi0gICAg
ICAgICAgICAvLyAgICAgYjogU2V0TG9jYWwoQGEpCi0gICAgICAgICAgICAvLyAgICAgYzogSWQo
QGEpIC8vIHNvbWUgaWRlbnRpdHkgZnVuY3Rpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBXaGVyZSB3ZSBmaW5kIEBhIGJlaW5nIGRlYWQsIGJ1dCBAYiBpcyBzdGlsbCBhbGl2ZS4K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobm9kZSAmJiBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhu
b2RlLT5vcCgpKSkgewotICAgICAgICAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSBub2RlLT5jaGls
ZDEoKTsKLSAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVl
UmVjb3Zlcmllc1tpXSwgY29kZUJsb2NrLCBncmFwaC5hdChpZCkpKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdl
dChpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8uZm9ybWF0ICE9IERhdGFGb3JtYXROb25l
KQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBNaW5p
ZmllZElEIGJlc3RJRDsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBiZXN0U2NvcmUgPSAwOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgTWlu
aWZpZWRHZW5lcmF0aW9uSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBnZW5lcmF0aW9uSW5mb3MuYmVn
aW4oKTsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIE1pbmlmaWVkR2VuZXJh
dGlvbkluZm8+OjppdGVyYXRvciBlbmQgPSBnZW5lcmF0aW9uSW5mb3MuZW5kKCk7Ci0gICAgICAg
ICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgTWluaWZpZWRJRCBpZCA9IGl0ZXItPmtleTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IGdyYXBoLmF0KGlkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
aGFzQ2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZS5pZCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS5mb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXlTY29yZSA9IGZvcndhcmRS
ZXdpcmluZ1NlbGVjdGlvblNjb3JlKG5vZGUtPm9wKCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAobXlTY29yZSA8PSBiZXN0U2NvcmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgYmVzdElEID0gaWQ7Ci0gICAgICAgICAgICAgICAgICAg
IGJlc3RTY29yZSA9IG15U2NvcmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmICghIWJlc3RJRCkgewotICAgICAgICAgICAgICAgICAgICBp
bmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChiZXN0SUQpOwotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoaW5mby5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWVS
ZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1
ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBU1NF
UlQoaW5mby5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYxMDcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShO
b2RlKiAKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAg
Y2FzZSBTZXRMb2NhbDoKLSAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgUGhhbnRvbToKQEAgLTExMSw2ICsx
MTAsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBMb2dpY2FsTm90OgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKICAgICBjYXNlIENvbnN0YW50
U3RvcmFnZVBvaW50ZXI6CisgICAgY2FzZSBDaGVjazoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9L
LgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTYxMDcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyOCw4ICsyMjgsNiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRp
bmcobV9ub2RlKTsKICAgICAgICAgCi0gICAgICAgIG1fZGlyZWN0aW9uID0gKG1fbm9kZS0+Zmxh
Z3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRT
cGVjdWxhdGlvbjsKLSAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CiAg
ICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgIGNvbXBpbGVVcHNpbG9uKCk7CkBAIC0y
NjAsOSArMjU4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAg
ICAgICAgY29tcGlsZVpvbWJpZUhpbnQoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2so
KTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAg
ICBjb21waWxlUGhhbnRvbSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02NTcsMTUgKzY1Miwx
NSBAQCBwcml2YXRlOgogCiAgICAgICAgIHN3aXRjaCAodXNlS2luZEZvcih2YXJpYWJsZS0+Zmx1
c2hGb3JtYXQoKSkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbV9ub2RlLCBpc05v
dEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CiAgICAgICAgICAg
ICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG1fbm9k
ZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKICAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgotICAgICAgICAg
ICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBtX25v
ZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBtX25vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7
CiAgICAgICAgICAgICBzZXRCb29sZWFuKHVuYm94Qm9vbGVhbihqc1ZhbHVlKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgpAQCAtNzAxLDggKzY5Niw2IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlU2V0TG9jYWwoKQogICAgIHsKLSAgICAg
ICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2RlKTsKLSAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAg
ICBzd2l0Y2ggKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSB7CiAgICAgICAgIGNhc2UgRmx1c2hl
ZEpTVmFsdWU6IHsKQEAgLTc1MywxOSArNzQ2LDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlTW92SGludCgpCiAgICAgewotICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUp
OworICAgICAgICBBU1NFUlQobV9ub2RlLT5jb250YWluc01vdkhpbnQoKSk7CisgICAgICAgIEFT
U0VSVChtX25vZGUtPm9wKCkgIT0gWm9tYmllSGludCk7CisgICAgICAgIAorICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpOworICAgICAgICBt
X2F2YWlsYWJpbGl0eS5vcGVyYW5kKG9wZXJhbmQpID0gQXZhaWxhYmlsaXR5KG1fbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlWm9tYmllSGludCgp
CiAgICAgewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKGRhdGEtPmxv
Y2FsKCkpID0gQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKQotICAgIHsKLSAgICAgICAgb2JzZXJ2ZU1vdkhp
bnQobV9ub2RlKTsKLSAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IEF2YWls
YWJpbGl0eTo6dW5hdmFpbGFibGUoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUGhh
bnRvbSgpCkBAIC0xMTc3LDQwICsxMTY3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNv
bXBpbGVJbnQzMlRvRG91YmxlKCkKICAgICB7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMSgpLCBTcGVjRnVsbE51bWJlcikKLSAgICAgICAg
ICAgIHx8IG1fbm9kZS0+c3BlY3VsYXRpb25EaXJlY3Rpb24oKSA9PSBCYWNrd2FyZFNwZWN1bGF0
aW9uKSB7Ci0gICAgICAgICAgICBzZXREb3VibGUobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTFZh
bHVlIGJveGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgaW50IGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJs
ZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgY29udGludWF0aW9u
IikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYm94ZWRWYWx1
ZSksIGRvdWJsZUNhc2UsIGludENhc2UpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVDYXNlKTsKLSAgICAgICAg
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGludFRvRG91YmxlID0gbV9vdXQuYW5jaG9yKAotICAg
ICAgICAgICAgbV9vdXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMihib3hlZFZhbHVlKSkpOwotICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhkb3VibGVDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIGZvcndhcmRUeXBl
Q2hlY2soCi0gICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSksIG1fbm9kZS0+Y2hp
bGQxKCksIFNwZWNGdWxsTnVtYmVyLAotICAgICAgICAgICAgaXNDZWxsT3JNaXNjKGJveGVkVmFs
dWUpLCBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSkpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgdW5ib3hlZERvdWJsZSA9IG1fb3V0LmFuY2hvcih1bmJveERvdWJsZShib3hlZFZh
bHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0Rv
dWJsZSwgdW5ib3hlZERvdWJsZSk7Ci0gICAgICAgIAotICAgICAgICBzZXREb3VibGUocmVzdWx0
KTsKKyAgICAgICAgc2V0RG91YmxlKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKQEAgLTMxOTYsMjYgKzMx
NTMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRl
QmFja3dhcmQoCi0gICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVl
LCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQotICAgIHsKLSAgICAgICAg
YXBwZW5kT1NSRXhpdCgKLSAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZh
aWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24sIEZvcm1hdHRlZFZhbHVlKCkpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoCi0gICAgICAgIEV4aXRLaW5kIGtp
bmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWls
Q29uZGl0aW9uLAotICAgICAgICBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgcmVjb3ZlcnkpCi0gICAg
ewotICAgICAgICBhcHBlbmRPU1JFeGl0KAotICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIGhp
Z2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgRm9yd2FyZFNwZWN1bGF0aW9uLCByZWNvdmVyeSk7Ci0g
ICAgfQotICAgIAogICAgIHZvaWQgc3BlY3VsYXRlKAogICAgICAgICBFeGl0S2luZCBraW5kLCBG
b3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRp
dGlvbikKICAgICB7Ci0gICAgICAgIGFwcGVuZE9TUkV4aXQoCi0gICAgICAgICAgICBraW5kLCBs
b3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBtX2RpcmVjdGlvbiwgRm9ybWF0dGVk
VmFsdWUoKSk7CisgICAgICAgIGFwcGVuZE9TUkV4aXQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1
ZSwgZmFpbENvbmRpdGlvbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgdGVybWluYXRlKEV4aXRL
aW5kIGtpbmQpCkBAIC0zMjIzLDQxICszMTY0LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1
bGF0ZShraW5kLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjaygKLSAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93
VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gs
Ci0gICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQotICAgIHsKLSAgICAgICAgYXBwZW5kVHlw
ZUNoZWNrKAotICAgICAgICAgICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJv
dWdoLCBmYWlsQ29uZGl0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uLAotICAgICAgICAgICAgRm9y
bWF0dGVkVmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZm9yd2FyZFR5cGVDaGVjaygK
LSAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCi0gICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9u
LCBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgcmVjb3ZlcnkpCi0gICAgewotICAgICAgICBhcHBlbmRU
eXBlQ2hlY2soCi0gICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVjdWxhdGlvbiwKLSAgICAgICAgICAgIHJl
Y292ZXJ5KTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCB0eXBlQ2hlY2soCiAgICAgICAgIEZvcm1h
dHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQ
YXNzZWRUaHJvdWdoLAogICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAg
ICAgIGFwcGVuZFR5cGVDaGVjaygKLSAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5
cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgbV9kaXJlY3Rpb24sCi0gICAgICAgICAg
ICBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKGxvd1ZhbHVlLCBo
aWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbik7CiAgICAgfQogICAg
IAogICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAogICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dW
YWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwK
LSAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0
aW9uKQogICAgIHsKICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGhp
Z2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOwotICAgICAg
ICBhcHBlbmRPU1JFeGl0KEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9kZSgpLCBmYWls
Q29uZGl0aW9uLCBkaXJlY3Rpb24sIHJlY292ZXJ5KTsKKyAgICAgICAgYXBwZW5kT1NSRXhpdChC
YWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwgZmFpbENvbmRpdGlvbik7CiAgICAg
ICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKTsK
ICAgICB9CiAgICAgCkBAIC00MDkyLDggKzQwMTMsNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAK
ICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCi0gICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAot
ICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJl
Y292ZXJ5KQorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwg
Tm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7CiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
T1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBh
dmFpbGFiaWxpdHk6ICIsIG1fYXZhaWxhYmlsaXR5LCAiXG4iKTsKQEAgLTQxMTgsMzggKzQwMzgs
MjAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBlbWl0T1NSRXhp
dENhbGwoZXhpdCwgbG93VmFsdWUsIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOworICAgICAgICBlbWl0
T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUpOwogICAgICAgICAKICAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVtaXRPU1JFeGl0Q2FsbCgKLSAg
ICAgICAgT1NSRXhpdCYgZXhpdCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiwKLSAgICAgICAgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisg
ICAgdm9pZCBlbWl0T1NSRXhpdENhbGwoT1NSRXhpdCYgZXhpdCwgRm9ybWF0dGVkVmFsdWUgbG93
VmFsdWUpCiAgICAgewogICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFyZ3VtZW50czsKICAgICAg
ICAgCiAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOwog
ICAgICAgICAKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQot
ICAgICAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXQsIGFyZ3VtZW50cywgbG93VmFsdWUs
IGNvZGVPcmlnaW4pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChkaXJlY3Rp
b24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIGlmICghcmVjb3ZlcnkpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1fbm9kZUluZGV4OyBu
b2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewotICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9PSBjb2Rl
T3JpZ2luKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1l
bnRzLCBsb3dWYWx1ZSwgY29kZU9yaWdpbik7Ci0gICAgICAgICAgICBleGl0LmNvbnZlcnRUb0Zv
cndhcmQobV9oaWdoQmxvY2ssIG1fbm9kZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5LCBhcmd1bWVu
dHMpOwotICAgICAgICB9CisgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0LCBhcmd1bWVu
dHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKICAgICAgICAgCiAgICAgICAgIGNhbGxTdGFja21h
cChleGl0LCBhcmd1bWVudHMpOwogICAgIH0KQEAgLTQzMDksMTYgKzQyMTEsNiBAQCBwcml2YXRl
OgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUt
PmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gWm9tYmll
SGludCk7Ci0gICAgICAgIAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUt
PmxvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICBtX2F2YWlsYWJpbGl0eS5vcGVyYW5kKG9wZXJh
bmQpID0gQXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgfQotICAgIAog
ICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAg
ICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdo
QmxvY2spKTsKQEAgLTQ0ODksNyArNDM4MSw2IEBAIHByaXZhdGU6CiAgICAgQ29kZU9yaWdpbiBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAg
ICBOb2RlKiBtX25vZGU7Ci0gICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAg
ICAgCiAgICAgdWludDMyX3QgbV9zdGFja21hcElEczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE2MTA3MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDQx
ICs2MSw2IEBAIENvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm8KICAgICAg
ICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KTsKIH0KIAotdm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKAotICAgIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWdu
ZWQgbm9kZUluZGV4LAotICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlICZ2YWx1ZSwgRXhpdEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzKQotewotICAgIE5vZGUqIG5vZGU7Ci0gICAgTm9kZSogbGFzdE1v
dkhpbnQ7Ci0gICAgaWYgKCFkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKGJsb2NrLCBjdXJy
ZW50Tm9kZSwgbm9kZUluZGV4LCAhIXZhbHVlLCBub2RlLCBsYXN0TW92SGludCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKTsKLSAgICAKLSAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwot
ICAgIAotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0TW92SGludC0+bG9jYWwoKTsKLSAgICAK
LSAgICAvLyBJcyB0aGUgdmFsdWUgZm9yIHRoaXMgb3BlcmFuZCBiZWluZyBwYXNzZWQgYXMgYW4g
YXJndW1lbnQgdG8gdGhlIGV4aXQsIG9yIGlzCi0gICAgLy8gaXQgc29tZXRoaW5nIGVsc2U/IElm
IGl0J3MgYW4gYXJndW1lbnQgYWxyZWFkeSwgdGhlbiByZXBsYWNlIHRoYXQgYXJndW1lbnQ7Ci0g
ICAgLy8gb3RoZXJ3aXNlIGFkZCBhbm90aGVyIGFyZ3VtZW50LgotICAgIGlmIChtX3ZhbHVlcy5v
cGVyYW5kKG92ZXJyaWRkZW5PcGVyYW5kKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgRXhpdEFy
Z3VtZW50IGV4aXRBcmd1bWVudCA9IG1fdmFsdWVzLm9wZXJhbmQob3ZlcnJpZGRlbk9wZXJhbmQp
LmV4aXRBcmd1bWVudCgpOwotICAgICAgICBhcmd1bWVudHNbZXhpdEFyZ3VtZW50LmFyZ3VtZW50
KCldID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgbV92YWx1ZXMub3BlcmFuZChvdmVycmlkZGVu
T3BlcmFuZCkgPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgIGV4aXRBcmd1
bWVudC53aXRoRm9ybWF0KHZhbHVlLmZvcm1hdCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVudHMuc2l6ZSgpOwotICAgIGFy
Z3VtZW50cy5hcHBlbmQodmFsdWUudmFsdWUoKSk7Ci0gICAgbV92YWx1ZXMub3BlcmFuZChvdmVy
cmlkZGVuT3BlcmFuZCkgPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKLSAgICAgICAgRXhpdEFy
Z3VtZW50KHZhbHVlLmZvcm1hdCgpLCBhcmd1bWVudCkpOwotfQotCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNjEwNzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDEwICsx
NjYsNiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdWlu
dDMyX3QgbV9zdGFja21hcElEOwogICAgIAogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0
aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7Ci0gICAgCi0gICAg
dm9pZCBjb252ZXJ0VG9Gb3J3YXJkKAotICAgICAgICBERkc6OkJhc2ljQmxvY2sqLCBERkc6Ok5v
ZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsCi0gICAgICAgIGNvbnN0IEZvcm1h
dHRlZFZhbHVlJiwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKTsKIH07CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZGVhZC1pbnQzMi10by1kb3VibGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9kZWFkLWludDMyLXRvLWRvdWJsZS5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1pbnQzMi10by1kb3Vi
bGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKGludCwg
bykgeworICAgIHZhciB4ID0gaW50OworICAgIG8uZiA9IHg7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDA7ICsraSkKKyAgICAgICAgeCArPSAwLjU7Cit9CisKK25vSW5saW5lKGZvbyk7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgZm9vKDQyLCB7fSk7CisKK3ZhciBv
ID0ge2c6IDQzfTsKK2Zvbyg0Nywgbyk7CitpZiAoby5mICE9IDQ3KQorICAgIHRocm93ICJFcnJv
cjogby5mIGlzICIgKyBvLmY7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2RlYWQtdWludDMyLXRvLW51bWJlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2RlYWQtdWludDMyLXRvLW51bWJlci5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC11aW50MzItdG8t
bnVtYmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhh
LCBvKSB7CisgICAgdmFyIHggPSBhID4+PiAwOworICAgIG8uZiA9IHggfCAwOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHgrKzsKK30KKworbm9JbmxpbmUoZm9v
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICBmb28oNDIsIHt9KTsKKwor
dmFyIG8gPSB7ZzogNDN9OworZm9vKDQ3LCBvKTsKK2lmIChvLmYgIT0gNDcpCisgICAgdGhyb3cg
IkVycm9yOiBvLmYgaXMgIiArIG8uZjsK
</data>
<flag name="review"
          id="243747"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>