<?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>86553</bug_id>
          
          <creation_ts>2012-05-15 17:44:33 -0700</creation_ts>
          <short_desc>JSGlobalData ScratchBuffers Are Not Visited During Garbage Collection</short_desc>
          <delta_ts>2012-05-21 13:22:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>624784</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-15 17:44:33 -0700</bug_when>
    <thetext>This is a problem in the DFG and its use of JSGlobalData scratch buffers.  In some cases, the array of EncodedJSValues used as arguments for string concat and new Array with initializers may never be spilled to the register file and thus are never visited during garbage collection.  The fix is to visit the contents of scratch buffers when we know they are being used the operationStrCat() and operationNewArray().

Although this is easily manifested on debug builds when COLLECT_ON_EVERY_ALLOCATION is turned on, it is likely random in release builds.  It is probably more likely to happen during low memory situations.

&lt;rdar://problem/11451334&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624843</commentid>
    <comment_count>1</comment_count>
      <attachid>142123</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-15 18:49:18 -0700</bug_when>
    <thetext>Created attachment 142123
Strawman Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624862</commentid>
    <comment_count>2</comment_count>
      <attachid>142123</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-15 19:12:25 -0700</bug_when>
    <thetext>Comment on attachment 142123
Strawman Patch

Attachment 142123 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12715118</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624864</commentid>
    <comment_count>3</comment_count>
      <attachid>142123</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-15 19:16:54 -0700</bug_when>
    <thetext>Comment on attachment 142123
Strawman Patch

Attachment 142123 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12718016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624869</commentid>
    <comment_count>4</comment_count>
      <attachid>142123</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-15 19:22:53 -0700</bug_when>
    <thetext>Comment on attachment 142123
Strawman Patch

Attachment 142123 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12701679</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624938</commentid>
    <comment_count>5</comment_count>
      <attachid>142123</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-15 21:16:06 -0700</bug_when>
    <thetext>Comment on attachment 142123
Strawman Patch

R=me, though I am curious what the performance implications are.  In particular, it might be profitable to just scan all scratch buffers during every GC and have VM entry/exit (the dynamic global object thingy) clear them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625773</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-16 13:04:26 -0700</bug_when>
    <thetext>&gt; it might be profitable to just scan all scratch buffers during every GC and have VM entry/exit (the dynamic global object thingy) clear them.

I like this approach because it&apos;s low risk and future proof against new uses of scratch buffers.

Is there any evidence that this would be for performance? For example, what&apos;s the largest scratch buffer you&apos;ve ever observed?

&gt; The arguments to operationStrCat and operationNewArray can be Garbage Collected before they are used

I think this title understates the problem in two ways: (1) OSR exit compiler can also have GC problems; (2) future uses of scratch buffer can also have GC problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626275</commentid>
    <comment_count>7</comment_count>
      <attachid>142415</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-16 22:49:11 -0700</bug_when>
    <thetext>Created attachment 142415
Updated Patch 

Following the suggestions from Filip and Geoff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626555</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-17 07:28:23 -0700</bug_when>
    <thetext>Below are performance results for the latest patch.

Some notable slowdowns are in v8Real-boyer (10%) and three of the DSP tests (8-25%).

My guess is that we are using some large scratch buffers in DSP.  I&apos;ll investigate their size.  If they are large, instead of walking every scratch buffer that may have been active since the last VM entry/exit, we could add code to emit an active count when a scratch buffer is in use and clear the count after it is done being used.  This would also eliminate the scratch buffer clearing on VM entry/exit.

Benchmark report for SunSpider, V8, V8Real, Kraken, JSBench, JSRegress, and DSP on msaboff-pro (MacPro5,1).

VMs tested:
&quot;BaseLine&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r117391)
&quot;VisitScratchBuffers&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/DumpRenderTree (r117391)

Collected 24 samples per benchmark/VM, with 4 VM invocations per benchmark. No manual garbage collection invocations were
emitted. 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.

                                                   BaseLine            VisitScratchBuffers                                
SunSpider:
   3d-cube                                      7.6290+-0.0958     !      8.1633+-0.3565        ! definitely 1.0700x slower
   3d-morph                                     7.3367+-0.0330     !      7.4184+-0.0416        ! definitely 1.0111x slower
   3d-raytrace                                  9.9701+-0.2782            9.9671+-0.2734        
   access-binary-trees                          1.8151+-0.0148     !      1.8436+-0.0117        ! definitely 1.0157x slower
   access-fannkuch                              7.5555+-0.0231            7.5536+-0.0217        
   access-nbody                                 3.9557+-0.0414            3.9442+-0.0457        
   access-nsieve                                3.6780+-0.0330            3.6649+-0.0335        
   bitops-3bit-bits-in-byte                     1.4249+-0.0068            1.4239+-0.0088        
   bitops-bits-in-byte                          5.5219+-0.0539            5.5163+-0.0394        
   bitops-bitwise-and                           3.4434+-0.0142            3.4394+-0.0128        
   bitops-nsieve-bits                           3.3294+-0.0075     ?      3.3406+-0.0158        ?
   controlflow-recursive                        2.4646+-0.0142     ?      2.4650+-0.0144        ?
   crypto-aes                                   7.8838+-0.0911            7.8696+-0.1144        
   crypto-md5                                   3.4821+-0.0455     ?      3.5028+-0.0457        ?
   crypto-sha1                                  2.8209+-0.0282     ?      2.8324+-0.0331        ?
   date-format-tofte                           13.4208+-0.8414           13.4053+-0.8448        
   date-format-xparb                           10.9558+-0.5022     ?     11.1908+-0.5194        ? might be 1.0215x slower
   math-cordic                                  4.3268+-0.0536     ?      4.3439+-0.0463        ?
   math-partial-sums                            9.1656+-0.0404            9.1190+-0.0239        
   math-spectral-norm                           2.9607+-0.0315     ?      3.0156+-0.0482        ? might be 1.0186x slower
   regexp-dna                                   9.8170+-0.0669     ?      9.8840+-0.0616        ?
   string-base64                                4.8861+-0.0822     ?      5.0759+-0.2757        ? might be 1.0388x slower
   string-fasta                                 7.8795+-0.2593            7.8227+-0.2496        
   string-tagcloud                             13.3586+-0.2377           13.3419+-0.2498        
   string-unpack-code                          22.6781+-0.6134     ?     23.0348+-0.6210        ? might be 1.0157x slower
   string-validate-input                        8.6317+-0.5664            8.5349+-0.5673          might be 1.0113x faster

   &lt;arithmetic&gt; *                               6.9381+-0.0578     ?      6.9890+-0.0663        ? might be 1.0073x slower
   &lt;geometric&gt;                                  5.6227+-0.0282     ?      5.6581+-0.0299        ? might be 1.0063x slower
   &lt;harmonic&gt;                                   4.5266+-0.0171     ?      4.5514+-0.0171        ? might be 1.0055x slower

                                                   BaseLine            VisitScratchBuffers                                
V8:
   crypto                                      75.7108+-0.4343           75.3083+-0.4152        
   deltablue                                  157.0207+-1.2346     ?    159.0475+-1.2714        ? might be 1.0129x slower
   earley-boyer                                93.3553+-0.3135           93.2624+-0.3410        
   raytrace                                    55.7297+-1.0792           55.3264+-0.9292        
   regexp                                      94.1726+-0.5496           93.4649+-0.3465        
   richards                                   143.0130+-2.0701     ?    143.6083+-1.7372        ?
   splay                                      118.3060+-12.7935    ?    119.6515+-14.2327       ? might be 1.0114x slower

   &lt;arithmetic&gt;                               105.3297+-1.7095     ?    105.6670+-2.0644        ? might be 1.0032x slower
   &lt;geometric&gt; *                               99.3799+-1.3309     ?     99.4186+-1.6785        ? might be 1.0004x slower
   &lt;harmonic&gt;                                  93.5526+-0.9242           93.3542+-1.2568          might be 1.0021x faster

                                                   BaseLine            VisitScratchBuffers                                
V8Real:
   encrypt                                     0.42586+-0.00073    ?     0.42648+-0.00043       ?
   decrypt                                     7.42316+-0.01392          7.42258+-0.00771       
   deltablue                          x2       0.95010+-0.00854    ?     0.95353+-0.00834       ?
   earley                                      3.15345+-0.03146          3.14664+-0.03539       
   boyer                                      15.67492+-0.05763    !    17.33746+-0.06626       ! definitely 1.1061x slower
   raytrace                           x2       6.89074+-0.05814          6.87976+-0.05811       
   regexp                             x2      27.09554+-0.07497    !    27.39942+-0.07797       ! definitely 1.0112x slower
   richards                           x2       0.38468+-0.00376    ?     0.38877+-0.00263       ? might be 1.0106x slower
   splay                              x2       0.94327+-0.01582          0.93704+-0.02027       

   &lt;arithmetic&gt;                                7.08615+-0.01235    !     7.24644+-0.01206       ! definitely 1.0226x slower
   &lt;geometric&gt; *                               2.60012+-0.00677    !     2.62502+-0.00638       ! definitely 1.0096x slower
   &lt;harmonic&gt;                                  1.10599+-0.00420    ?     1.11098+-0.00486       ? might be 1.0045x slower

                                                   BaseLine            VisitScratchBuffers                                
Kraken:
   ai-astar                                    814.347+-8.251      !     830.726+-4.139         ! definitely 1.0201x slower
   audio-beat-detection                        203.984+-1.788            203.743+-1.706         
   audio-dft                                   291.639+-0.945      ?     291.780+-1.063         ?
   audio-fft                                   120.093+-0.219            119.820+-0.220         
   audio-oscillator                            324.720+-1.567            322.826+-0.415         
   imaging-darkroom                            306.721+-1.923            305.557+-1.111         
   imaging-desaturate                          219.677+-0.267            219.539+-0.195         
   imaging-gaussian-blur                       457.122+-0.206      ?     457.562+-0.420         ?
   json-parse-financial                         66.606+-0.268      ^      66.051+-0.176         ^ definitely 1.0084x faster
   json-stringify-tinderbox                     84.355+-0.179      !      85.183+-0.167         ! definitely 1.0098x slower
   stanford-crypto-aes                          88.255+-0.305      ?      89.239+-0.737         ? might be 1.0111x slower
   stanford-crypto-ccm                          94.696+-0.320      ?      95.190+-0.308         ?
   stanford-crypto-pbkdf2                      193.612+-0.549      ?     194.085+-0.735         ?
   stanford-crypto-sha256-iterative             94.710+-0.246      ?      95.055+-0.240         ?

   &lt;arithmetic&gt; *                              240.038+-0.653      !     241.168+-0.352         ! definitely 1.0047x slower
   &lt;geometric&gt;                                 183.760+-0.226      ?     184.175+-0.210         ? might be 1.0023x slower
   &lt;harmonic&gt;                                  146.665+-0.141      ?     146.955+-0.168         ? might be 1.0020x slower

                                                   BaseLine            VisitScratchBuffers                                
JSBench:
   amazon                                      17.8750+-0.2266     ?     17.9167+-0.2761        ?
   facebook                                    71.3750+-2.5207           71.0833+-2.5607        
   google                                      98.1667+-2.3351     ?    100.5417+-3.0627        ? might be 1.0242x slower
   twitter                                     52.1667+-0.2384           51.9167+-0.2127        
   yahoo                                       22.5000+-0.2157           22.2083+-0.1752          might be 1.0131x faster

   &lt;arithmetic&gt; *                              52.4167+-0.5829     ?     52.7333+-0.6998        ? might be 1.0060x slower
   &lt;geometric&gt;                                 42.9592+-0.3285     ?     42.9855+-0.3366        ? might be 1.0006x slower
   &lt;harmonic&gt;                                  34.7417+-0.2155           34.6456+-0.2233          might be 1.0028x faster

                                                   BaseLine            VisitScratchBuffers                                
JSRegress:
   adapt-to-double-divide                      72.6218+-0.0794     ?     72.7202+-0.0940        ?
   aliased-arguments-getbyval                   3.6727+-0.1847     ?      3.7001+-0.1750        ?
   arity-mismatch-inlining                      1.2790+-0.0196            1.2759+-0.0161        
   big-int-mul                                 29.0281+-0.3496           28.5815+-0.2496          might be 1.0156x faster
   boolean-test                                 3.9447+-0.0186     ?      3.9471+-0.0265        ?
   cast-int-to-double                          14.2695+-0.1376           14.1682+-0.0399        
   cfg-simplify                                 6.5976+-0.0133            6.5869+-0.0066        
   cmpeq-obj-to-obj-other                      13.9487+-0.4826     ?     14.0535+-0.3919        ?
   constant-test                               27.1813+-0.0656           27.1764+-0.0771        
   direct-arguments-getbyval                    0.7041+-0.0122            0.7021+-0.0083        
   double-pollution-getbyval                    8.7708+-0.0283            8.7586+-0.0112        
   double-pollution-putbyoffset                 4.7199+-0.0368     ?      4.8365+-0.2883        ? might be 1.0247x slower
   external-arguments-getbyval                  4.2635+-0.1943     ?      4.3203+-0.1929        ? might be 1.0133x slower
   external-arguments-putbyval                  6.9140+-0.3132     ?      6.9899+-0.3268        ? might be 1.0110x slower
   Float32Array-matrix-mult                    11.3018+-0.4727     ?     11.6333+-0.5641        ? might be 1.0293x slower
   fold-double-to-int                          33.6938+-0.3232     ?     34.1681+-0.5579        ? might be 1.0141x slower
   function-test                                4.6099+-0.0190            4.6069+-0.0332        
   inline-arguments-access                      3.6253+-0.0201            3.6081+-0.0173        
   inline-arguments-local-escape               40.7060+-1.8914           40.3615+-1.5219        
   int-overflow-local                         102.5900+-0.0887     ?    102.6643+-0.1530        ?
   Int16Array-bubble-sort                      70.2287+-1.2847     ^     68.1696+-0.6331        ^ definitely 1.0302x faster
   Int16Array-load-int-mul                     15.8263+-0.0944           15.7996+-0.0961        
   Int8Array-load                               4.7756+-0.0730            4.7599+-0.0352        
   integer-divide                              14.8499+-0.0278     ?     14.9282+-0.0693        ?
   method-on-number                           189.8829+-2.1216          187.3501+-0.8256          might be 1.0135x faster
   number-test                                  3.9219+-0.0108     ?      3.9247+-0.0151        ?
   object-test                                  4.2437+-0.0220            4.2265+-0.0168        
   poly-stricteq                               91.5346+-0.4327           91.2106+-0.5289        
   rare-osr-exit-on-local                     150.6409+-0.1017     ?    150.9463+-0.4745        ?
   simple-activation-demo                      55.2423+-0.3153           55.0908+-0.1199        
   slow-convergence                            89.9716+-0.3284     ?     90.2389+-0.3525        ?
   string-hash                                 14.3514+-0.1324     ?     14.5032+-0.2095        ? might be 1.0106x slower
   string-test                                  3.7486+-0.0161     ?      3.8054+-0.0575        ? might be 1.0151x slower
   tear-off-arguments                           3.7719+-0.1858            3.7565+-0.1917        
   to-int32-boolean                            29.2531+-0.3133           28.9949+-0.1031        
   undefined-test                               4.2126+-0.0236            4.1998+-0.0140        

   &lt;arithmetic&gt;                                31.6916+-0.0969           31.5768+-0.0868          might be 1.0036x faster
   &lt;geometric&gt; *                               13.0125+-0.0894     ?     13.0206+-0.0912        ? might be 1.0006x slower
   &lt;harmonic&gt;                                   5.7698+-0.0564     ?      5.7752+-0.0515        ? might be 1.0009x slower

                                                   BaseLine            VisitScratchBuffers                                
DSP:
   filtrr-posterize-tint                       48.9578+-0.3852     !     59.7338+-1.8883        ! definitely 1.2201x slower
   filtrr-tint-contrast-sat-bright             81.7491+-0.6064     !     88.5864+-1.7853        ! definitely 1.0836x slower
   filtrr-tint-sat-adj-contr-mult              93.9438+-0.7122     ?     94.4437+-0.8106        ?
   filtrr-blur-overlay-sat-contr              231.3795+-0.7343     ?    231.3800+-0.6014        ?
   filtrr-sat-blur-mult-sharpen-contr         289.7408+-1.9787     ?    291.2437+-1.6147        ?
   filtrr-sepia-bias                           33.5366+-0.4042     !     41.7406+-0.7265        ! definitely 1.2446x slower
   route9-vp8                         x5     1582.9230+-8.1424     ?   1585.9894+-8.1551        ?

   &lt;arithmetic&gt;                               790.3566+-3.6224     ?    794.2795+-3.7229        ? might be 1.0050x slower
   &lt;geometric&gt; *                              345.5647+-0.9056     !    362.1289+-2.0187        ! definitely 1.0479x slower
   &lt;harmonic&gt;                                 130.8196+-0.4819     !    149.5164+-2.0252        ! definitely 1.1429x slower

                                                   BaseLine            VisitScratchBuffers                                
All benchmarks:
   &lt;arithmetic&gt;                               128.0916+-0.3731     ?    128.6433+-0.3950        ? might be 1.0043x slower
   &lt;geometric&gt;                                 20.0715+-0.0572     !     20.2264+-0.0621        ! definitely 1.0077x slower
   &lt;harmonic&gt;                                   4.5122+-0.0145     ?      4.5312+-0.0178        ? might be 1.0042x slower

                                                   BaseLine            VisitScratchBuffers                                
Geomean of preferred means:
   &lt;scaled-result&gt;                             37.3460+-0.0895     !     37.7481+-0.1305        ! definitely 1.0108x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626628</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-17 09:14:46 -0700</bug_when>
    <thetext>&gt; My guess is that we are using some large scratch buffers in DSP.  I&apos;ll investigate their size.

I&apos;d be interested to know the average and max scratch buffer sizes we encounter.

That said, it looks like the patch you posted doesn&apos;t include any calls to clearScratchBuffers(). Your regression may be due to prolonging object lifetimes indefinitely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626657</commentid>
    <comment_count>10</comment_count>
      <attachid>142493</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-17 09:59:00 -0700</bug_when>
    <thetext>Created attachment 142493
Updated Patch with call to clearScratchBuffers()

(In reply to comment #9)
&gt; &gt; My guess is that we are using some large scratch buffers in DSP.  I&apos;ll investigate their size.
&gt; 
&gt; I&apos;d be interested to know the average and max scratch buffer sizes we encounter.
&gt; 
&gt; That said, it looks like the patch you posted doesn&apos;t include any calls to clearScratchBuffers(). Your regression may be due to prolonging object lifetimes indefinitely.

Added call to clearScratchBuffer().

Reran perf tests.  Things are improved, but there are still regressions in V8Real-boyer (11%), V8Real-regexp (2%) and DSP-filtrr-posterize-tint (15%).

I&apos;ll instrument to find the avg and max scratch buffer sizes.

Benchmark report for SunSpider, V8, V8Real, Kraken, JSBench, JSRegress, and DSP on msaboff-pro (MacPro5,1).

VMs tested:
&quot;BaseLine&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r117391)
&quot;VisitScratchBuffers&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/DumpRenderTree (r117391)

Collected 24 samples per benchmark/VM, with 4 VM invocations per benchmark. No manual garbage collection invocations were
emitted. 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.

                                                   BaseLine            VisitScratchBuffers                                
SunSpider:
   3d-cube                                      7.6382+-0.1017     !      8.1743+-0.3596        ! definitely 1.0702x slower
   3d-morph                                     7.3621+-0.0534     ?      7.3885+-0.0471        ?
   3d-raytrace                                  9.9905+-0.2774     ?     10.0949+-0.3039        ? might be 1.0104x slower
   access-binary-trees                          1.8445+-0.0207            1.8380+-0.0194        
   access-fannkuch                              7.5688+-0.0393            7.5483+-0.0196        
   access-nbody                                 3.9595+-0.0532            3.9594+-0.0553        
   access-nsieve                                3.6748+-0.0372     ?      3.6748+-0.0357        ?
   bitops-3bit-bits-in-byte                     1.4279+-0.0109            1.4236+-0.0070        
   bitops-bits-in-byte                          5.5123+-0.0472     ?      5.5168+-0.0481        ?
   bitops-bitwise-and                           3.4382+-0.0144            3.4333+-0.0085        
   bitops-nsieve-bits                           3.3341+-0.0136     ?      3.3558+-0.0215        ?
   controlflow-recursive                        2.4750+-0.0186            2.4709+-0.0192        
   crypto-aes                                   7.9060+-0.1131            7.8586+-0.0957        
   crypto-md5                                   3.4962+-0.0526     ?      3.5057+-0.0476        ?
   crypto-sha1                                  2.8158+-0.0306     ?      2.8340+-0.0284        ?
   date-format-tofte                           13.7028+-0.7998           13.6085+-0.8305        
   date-format-xparb                           11.7095+-0.6318           11.4952+-0.5794          might be 1.0186x faster
   math-cordic                                  4.3427+-0.0518     ?      4.3489+-0.0604        ?
   math-partial-sums                            9.2762+-0.0821     ^      9.1460+-0.0399        ^ definitely 1.0142x faster
   math-spectral-norm                           2.9644+-0.0323            2.9639+-0.0290        
   regexp-dna                                   9.8113+-0.0776     ?      9.9496+-0.0802        ? might be 1.0141x slower
   string-base64                                5.7630+-0.4708            5.2252+-0.3278          might be 1.1029x faster
   string-fasta                                 7.8887+-0.2574            7.8652+-0.2491        
   string-tagcloud                             13.4021+-0.2315     ?     13.5341+-0.2386        ?
   string-unpack-code                          24.6493+-1.2497     ^     22.3556+-0.5754        ^ definitely 1.1026x faster
   string-validate-input                        8.6108+-0.5751     ?      8.6282+-0.5595        ?

   &lt;arithmetic&gt; *                               7.0986+-0.1110            7.0076+-0.0584          might be 1.0130x faster
   &lt;geometric&gt;                                  5.7031+-0.0543            5.6756+-0.0283          might be 1.0048x faster
   &lt;harmonic&gt;                                   4.5681+-0.0276            4.5581+-0.0184          might be 1.0022x faster

                                                   BaseLine            VisitScratchBuffers                                
V8:
   crypto                                      75.4699+-0.3748     ?     76.1831+-0.4941        ?
   deltablue                                  156.7851+-1.0209     ?    159.0510+-1.5313        ? might be 1.0145x slower
   earley-boyer                                93.4869+-0.3133           93.0661+-0.3407        
   raytrace                                    55.4889+-0.9941           55.3468+-0.9577        
   regexp                                      94.7245+-0.4325           94.6743+-0.4086        
   richards                                   144.5699+-3.7234     ?    145.2562+-1.6123        ?
   splay                                      121.8940+-13.8473         111.7071+-10.5208         might be 1.0912x faster

   &lt;arithmetic&gt;                               106.0599+-1.8881          105.0407+-1.4594          might be 1.0097x faster
   &lt;geometric&gt; *                               99.8749+-1.4358           99.0898+-1.2208          might be 1.0079x faster
   &lt;harmonic&gt;                                  93.8181+-0.9615           93.2795+-0.9191          might be 1.0058x faster

                                                   BaseLine            VisitScratchBuffers                                
V8Real:
   encrypt                                     0.42686+-0.00061          0.42662+-0.00107       
   decrypt                                     7.44261+-0.02793    ?     7.44473+-0.01255       ?
   deltablue                          x2       0.95299+-0.00888          0.94254+-0.00671         might be 1.0111x faster
   earley                                      3.17639+-0.03090          3.15148+-0.03737       
   boyer                                      15.62556+-0.07386    !    17.39136+-0.06645       ! definitely 1.1130x slower
   raytrace                           x2       6.93767+-0.08055    ?     6.93848+-0.06828       ?
   regexp                             x2      26.97673+-0.10808    !    27.53988+-0.15392       ! definitely 1.0209x slower
   richards                           x2       0.38134+-0.00274    ?     0.38363+-0.00302       ?
   splay                              x2       0.93975+-0.01782    ?     0.94127+-0.01919       ?

   &lt;arithmetic&gt;                                7.07488+-0.01734    !     7.27899+-0.02245       ! definitely 1.0288x slower
   &lt;geometric&gt; *                               2.59907+-0.00637    !     2.62400+-0.00827       ! definitely 1.0096x slower
   &lt;harmonic&gt;                                  1.10272+-0.00378    ?     1.10416+-0.00637       ? might be 1.0013x slower

                                                   BaseLine            VisitScratchBuffers                                
Kraken:
   ai-astar                                    825.529+-6.831      ?     827.945+-5.930         ?
   audio-beat-detection                        202.458+-0.854      ?     203.063+-1.056         ?
   audio-dft                                   291.652+-0.912      ?     293.150+-0.658         ?
   audio-fft                                   119.908+-0.227      ?     120.103+-0.268         ?
   audio-oscillator                            322.027+-0.433      !     323.395+-0.793         ! definitely 1.0042x slower
   imaging-darkroom                            305.505+-1.329      ?     305.749+-1.708         ?
   imaging-desaturate                          219.772+-0.200      ?     220.013+-0.260         ?
   imaging-gaussian-blur                       457.636+-0.344            457.345+-0.286         
   json-parse-financial                         66.807+-0.260      ^      66.310+-0.150         ^ definitely 1.0075x faster
   json-stringify-tinderbox                     84.468+-0.233      !      85.364+-0.248         ! definitely 1.0106x slower
   stanford-crypto-aes                          88.754+-0.378      ^      88.076+-0.261         ^ definitely 1.0077x faster
   stanford-crypto-ccm                          94.881+-0.394      ?      95.091+-0.473         ?
   stanford-crypto-pbkdf2                      193.877+-0.575            193.384+-0.552         
   stanford-crypto-sha256-iterative             95.064+-0.291             94.879+-0.218         

   &lt;arithmetic&gt; *                              240.596+-0.473      ?     240.991+-0.466         ? might be 1.0016x slower
   &lt;geometric&gt;                                 183.907+-0.171      ?     184.056+-0.181         ? might be 1.0008x slower
   &lt;harmonic&gt;                                  146.859+-0.153            146.835+-0.118           might be 1.0002x faster

                                                   BaseLine            VisitScratchBuffers                                
JSBench:
   amazon                                      18.0833+-0.2761           18.0417+-0.2635        
   facebook                                    72.7917+-2.5760           70.7083+-2.4794          might be 1.0295x faster
   google                                      97.3333+-2.3778     ?     99.0833+-2.2167        ? might be 1.0180x slower
   twitter                                     51.9167+-0.2127           51.7917+-0.2149        
   yahoo                                       22.4583+-0.2149           22.3333+-0.2033        

   &lt;arithmetic&gt; *                              52.5167+-0.5288           52.3917+-0.6895          might be 1.0024x faster
   &lt;geometric&gt;                                 43.0929+-0.2808           42.9160+-0.3924          might be 1.0041x faster
   &lt;harmonic&gt;                                  34.8956+-0.2225           34.7447+-0.2568          might be 1.0043x faster

                                                   BaseLine            VisitScratchBuffers                                
JSRegress:
   adapt-to-double-divide                      72.7993+-0.1640           72.7789+-0.1399        
   aliased-arguments-getbyval                   3.6778+-0.1797     ?      3.6864+-0.1811        ?
   arity-mismatch-inlining                      1.2527+-0.0226            1.2481+-0.0207        
   big-int-mul                                 29.1196+-0.3597     ?     29.4550+-0.4643        ? might be 1.0115x slower
   boolean-test                                 3.9331+-0.0094            3.9291+-0.0117        
   cast-int-to-double                          14.1323+-0.0103     ?     14.1396+-0.0198        ?
   cfg-simplify                                 6.6048+-0.0230            6.5899+-0.0067        
   cmpeq-obj-to-obj-other                      13.9148+-0.4460           13.8551+-0.4528        
   constant-test                               27.1749+-0.0926           27.1329+-0.0575        
   direct-arguments-getbyval                    0.6942+-0.0080     ?      0.6994+-0.0094        ?
   double-pollution-getbyval                    8.7667+-0.0126     ?      8.8327+-0.0552        ?
   double-pollution-putbyoffset                 4.7326+-0.0408            4.6795+-0.0406          might be 1.0113x faster
   external-arguments-getbyval                  4.3451+-0.1865            4.3442+-0.1900        
   external-arguments-putbyval                  7.0146+-0.3043            6.9897+-0.3226        
   Float32Array-matrix-mult                    11.3433+-0.4849           11.3403+-0.5515        
   fold-double-to-int                          33.6169+-0.0770     ?     34.0122+-0.3748        ? might be 1.0118x slower
   function-test                                4.5889+-0.0218            4.5652+-0.0292        
   inline-arguments-access                      3.6047+-0.0151     ?      3.6108+-0.0218        ?
   inline-arguments-local-escape               39.7807+-1.5892           39.5610+-1.2593        
   int-overflow-local                         102.6140+-0.1205     ?    102.6674+-0.1153        ?
   Int16Array-bubble-sort                      70.4634+-1.3327           69.1422+-1.1507          might be 1.0191x faster
   Int16Array-load-int-mul                     15.9369+-0.1157           15.8395+-0.0913        
   Int8Array-load                               4.7754+-0.0492            4.7634+-0.0626        
   integer-divide                              14.8176+-0.0255     ?     14.8602+-0.0360        ?
   method-on-number                           190.9984+-2.0137     ?    192.6862+-2.4090        ?
   number-test                                  3.9347+-0.0152            3.9147+-0.0152        
   object-test                                  4.2352+-0.0257            4.2327+-0.0321        
   poly-stricteq                               91.2725+-0.3988           91.1868+-0.3670        
   rare-osr-exit-on-local                     151.3971+-0.2817     ^    150.8141+-0.1539        ^ definitely 1.0039x faster
   simple-activation-demo                      55.1085+-0.0983           55.0981+-0.1281        
   slow-convergence                            90.1628+-0.3554           90.0917+-0.2935        
   string-hash                                 14.6232+-0.2043           14.4087+-0.1655          might be 1.0149x faster
   string-test                                  3.7646+-0.0249            3.7472+-0.0274        
   tear-off-arguments                           3.8142+-0.1890            3.7598+-0.1781          might be 1.0145x faster
   to-int32-boolean                            29.2344+-0.2806           29.0884+-0.0999        
   undefined-test                               4.2088+-0.0204     ?      4.2117+-0.0232        ?

   &lt;arithmetic&gt;                                31.7350+-0.0858           31.7212+-0.1114          might be 1.0004x faster
   &lt;geometric&gt; *                               13.0177+-0.0826           12.9954+-0.0859          might be 1.0017x faster
   &lt;harmonic&gt;                                   5.7446+-0.0439            5.7415+-0.0455          might be 1.0005x faster

                                                   BaseLine            VisitScratchBuffers                                
DSP:
   filtrr-posterize-tint                       49.0858+-0.4281     !     56.3526+-1.3970        ! definitely 1.1480x slower
   filtrr-tint-contrast-sat-bright             81.1976+-0.5604     ?     81.4146+-0.5446        ?
   filtrr-tint-sat-adj-contr-mult              93.5226+-0.6975     ?     94.5968+-0.8942        ? might be 1.0115x slower
   filtrr-blur-overlay-sat-contr              231.9381+-0.7855     ^    230.1953+-0.5450        ^ definitely 1.0076x faster
   filtrr-sat-blur-mult-sharpen-contr         289.8628+-1.8513          289.6081+-1.8766        
   filtrr-sepia-bias                           33.5683+-0.3988           33.5252+-0.4178        
   route9-vp8                         x5     1599.6274+-7.4486     ?   1605.2971+-9.5441        ?

   &lt;arithmetic&gt;                               797.9375+-3.3477     ?    801.1071+-4.2938        ? might be 1.0040x slower
   &lt;geometric&gt; *                              347.0646+-0.8033     !    352.1084+-1.3685        ! definitely 1.0145x slower
   &lt;harmonic&gt;                                 130.8101+-0.4321     !    135.1173+-0.9201        ! definitely 1.0329x slower

                                                   BaseLine            VisitScratchBuffers                                
All benchmarks:
   &lt;arithmetic&gt;                               128.9976+-0.3469     ?    129.2863+-0.4662        ? might be 1.0022x slower
   &lt;geometric&gt;                                 20.1577+-0.0748     ?     20.1655+-0.0590        ? might be 1.0004x slower
   &lt;harmonic&gt;                                   4.5103+-0.0171     ?      4.5108+-0.0214        ? might be 1.0001x slower

                                                   BaseLine            VisitScratchBuffers                                
Geomean of preferred means:
   &lt;scaled-result&gt;                             37.5389+-0.1292     ?     37.5443+-0.1006        ? might be 1.0001x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626926</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-17 13:52:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; My guess is that we are using some large scratch buffers in DSP.  I&apos;ll investigate their size.
&gt; 
&gt; I&apos;d be interested to know the average and max scratch buffer sizes we encounter.
&gt; 
&gt; That said, it looks like the patch you posted doesn&apos;t include any calls to clearScratchBuffers(). Your regression may be due to prolonging object lifetimes indefinitely.

Running the perf tests we encounter a max size of 120 which may be the test framework.

For DSP, the only test that seems to use scratch buffers is VP8 which uses 75 sized 16 and 12 size 24 (average 17).  I&apos;ve spent some time trying to figure out why this change impacts DSP-filtrr-posterize-tint so much, but haven&apos;t reached any conclusions. 

Sizes running V8Real are 8, 16, 24, 40 and 88 and the average is 32.  Boyer uses 12 instances of 16 byte buffers.
Remember these sizes are bytes and that we often allocate twice the number of bytes requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628239</commentid>
    <comment_count>12</comment_count>
      <attachid>142493</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-18 16:29:46 -0700</bug_when>
    <thetext>Comment on attachment 142493
Updated Patch with call to clearScratchBuffers()

r- since this is a regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628353</commentid>
    <comment_count>13</comment_count>
      <attachid>142849</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-18 21:57:34 -0700</bug_when>
    <thetext>Created attachment 142849
Updated patch wit JIT code keeping track of active scratch buffers

Updated the patch to eliminate the large regression.

The JIT&apos;ed code now writes out the active scratch size before calling out to C++ code and then clears after the scratch buffer is done being used.

Below are the updated performance results.  The only tests that shows any kind of slowdown is V8Real-richards at 1.8% and JSRegress string-test at 1.2% and undefined-test at 1%.

Benchmark report for SunSpider, V8, V8Real, Kraken, JSBench, JSRegress, and DSP on msaboff-pro (MacPro5,1).

VMs tested:
&quot;BaseLine&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r117391)
&quot;VisitScratchBuffers&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/DumpRenderTree (r117391)

Collected 24 samples per benchmark/VM, with 4 VM invocations per benchmark. No manual garbage collection invocations were
emitted. 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.

                                                   BaseLine            VisitScratchBuffers                                
SunSpider:
   3d-cube                                      7.6129+-0.0933     ?      7.6663+-0.0854        ?
   3d-morph                                     7.4009+-0.0485            7.3647+-0.0634        
   3d-raytrace                                  9.9724+-0.2799     ?     10.0044+-0.2792        ?
   access-binary-trees                          1.8306+-0.0218            1.8300+-0.0139        
   access-fannkuch                              7.5732+-0.0296     ?      7.5741+-0.0188        ?
   access-nbody                                 3.9349+-0.0397     ?      3.9701+-0.0474        ?
   access-nsieve                                3.6768+-0.0277            3.6712+-0.0311        
   bitops-3bit-bits-in-byte                     1.4424+-0.0165            1.4295+-0.0111        
   bitops-bits-in-byte                          5.5075+-0.0504     ?      5.5182+-0.0306        ?
   bitops-bitwise-and                           3.4327+-0.0082     ?      3.4491+-0.0210        ?
   bitops-nsieve-bits                           3.3273+-0.0090     ?      3.3510+-0.0241        ?
   controlflow-recursive                        2.4683+-0.0155            2.4647+-0.0142        
   crypto-aes                                   7.9243+-0.1127            7.9035+-0.0971        
   crypto-md5                                   3.4875+-0.0452     ?      3.4883+-0.0473        ?
   crypto-sha1                                  2.8354+-0.0325            2.8082+-0.0302        
   date-format-tofte                           13.1882+-0.8200     ?     13.3276+-0.8214        ? might be 1.0106x slower
   date-format-xparb                           10.9723+-0.5200     ?     11.2165+-0.5118        ? might be 1.0223x slower
   math-cordic                                  4.3376+-0.0520            4.3276+-0.0502        
   math-partial-sums                            9.1740+-0.0313     ?      9.2795+-0.0910        ? might be 1.0115x slower
   math-spectral-norm                           2.9616+-0.0325     ?      2.9657+-0.0319        ?
   regexp-dna                                   9.8527+-0.0953     ?      9.8968+-0.0972        ?
   string-base64                                4.8435+-0.0392     ?      4.9458+-0.2122        ? might be 1.0211x slower
   string-fasta                                 7.8418+-0.2518            7.8418+-0.2455        
   string-tagcloud                             13.3686+-0.2192           13.2846+-0.2230        
   string-unpack-code                          22.7043+-0.5997     ?     22.7916+-0.6311        ?
   string-validate-input                        8.5788+-0.5542     ?      8.6677+-0.5762        ? might be 1.0104x slower

   &lt;arithmetic&gt; *                               6.9327+-0.0485     ?      6.9630+-0.0495        ? might be 1.0044x slower
   &lt;geometric&gt;                                  5.6237+-0.0257     ?      5.6402+-0.0250        ? might be 1.0029x slower
   &lt;harmonic&gt;                                   4.5358+-0.0197     ?      4.5390+-0.0182        ? might be 1.0007x slower

                                                   BaseLine            VisitScratchBuffers                                
V8:
   crypto                                      75.6202+-0.4168     ?     75.6938+-0.4005        ?
   deltablue                                  157.6811+-1.3157     ?    157.9404+-1.6757        ?
   earley-boyer                                93.4031+-0.2822     ?     93.4446+-0.2714        ?
   raytrace                                    55.7306+-0.9583     ?     55.9167+-1.1695        ?
   regexp                                      93.8529+-0.3721     ^     93.0471+-0.2650        ^ definitely 1.0087x faster
   richards                                   142.9939+-1.9374     ?    143.9461+-2.3855        ?
   splay                                      115.5968+-11.9257         110.2246+-12.3616         might be 1.0487x faster

   &lt;arithmetic&gt;                               104.9827+-1.6401          104.3162+-1.6959          might be 1.0064x faster
   &lt;geometric&gt; *                               99.0779+-1.3428           98.4330+-1.3742          might be 1.0066x faster
   &lt;harmonic&gt;                                  93.3028+-0.9826           92.7727+-1.0176          might be 1.0057x faster

                                                   BaseLine            VisitScratchBuffers                                
V8Real:
   encrypt                                     0.42564+-0.00038    !     0.42761+-0.00063       ! definitely 1.0046x slower
   decrypt                                     7.42067+-0.01653    ?     7.44325+-0.01692       ?
   deltablue                          x2       0.94420+-0.00600          0.94255+-0.00499       
   earley                                      3.16078+-0.03656          3.13649+-0.03207       
   boyer                                      15.72871+-0.05014    ?    15.77503+-0.04728       ?
   raytrace                           x2       6.94780+-0.05752          6.89380+-0.06171       
   regexp                             x2      26.95430+-0.04281    ?    27.00633+-0.08617       ?
   richards                           x2       0.37960+-0.00234    !     0.38654+-0.00326       ! definitely 1.0183x slower
   splay                              x2       0.95467+-0.01488          0.93567+-0.01685         might be 1.0203x faster

   &lt;arithmetic&gt;                                7.07835+-0.01316    ?     7.07944+-0.01412       ? might be 1.0002x slower
   &lt;geometric&gt; *                               2.59949+-0.00684          2.59637+-0.00808         might be 1.0012x faster
   &lt;harmonic&gt;                                  1.10135+-0.00424    ?     1.10605+-0.00511       ? might be 1.0043x slower

                                                   BaseLine            VisitScratchBuffers                                
Kraken:
   ai-astar                                    814.209+-7.905            812.194+-8.275         
   audio-beat-detection                        204.129+-1.316      ?     204.146+-1.351         ?
   audio-dft                                   291.572+-0.967            290.128+-2.574         
   audio-fft                                   120.070+-0.146      ?     120.132+-0.196         ?
   audio-oscillator                            322.365+-0.300      !     325.176+-1.396         ! definitely 1.0087x slower
   imaging-darkroom                            304.594+-1.003            304.585+-1.207         
   imaging-desaturate                          219.444+-0.127      ?     219.604+-0.156         ?
   imaging-gaussian-blur                       457.373+-0.472      ?     457.991+-0.488         ?
   json-parse-financial                         66.846+-0.273      ^      66.418+-0.143         ^ definitely 1.0064x faster
   json-stringify-tinderbox                     84.163+-0.164      !      84.717+-0.190         ! definitely 1.0066x slower
   stanford-crypto-aes                          89.333+-0.994      ^      88.113+-0.222         ^ definitely 1.0138x faster
   stanford-crypto-ccm                          94.998+-0.292             94.973+-0.240         
   stanford-crypto-pbkdf2                      193.628+-0.655      ?     194.207+-0.939         ?
   stanford-crypto-sha256-iterative             94.502+-0.175      ?      94.640+-0.163         ?

   &lt;arithmetic&gt; *                              239.802+-0.608            239.787+-0.577           might be 1.0001x faster
   &lt;geometric&gt;                                 183.758+-0.217            183.686+-0.169           might be 1.0004x faster
   &lt;harmonic&gt;                                  146.853+-0.210            146.664+-0.096           might be 1.0013x faster

                                                   BaseLine            VisitScratchBuffers                                
JSBench:
   amazon                                      17.8333+-0.2033     ?     18.0000+-0.2490        ?
   facebook                                    69.8750+-2.1253     ?     71.0833+-2.6028        ? might be 1.0173x slower
   google                                      98.5000+-2.2926           97.2917+-2.3411          might be 1.0124x faster
   twitter                                     52.1250+-0.2266           51.8333+-0.2690        
   yahoo                                       22.4583+-0.2149           22.2917+-0.1961        

   &lt;arithmetic&gt; *                              52.1583+-0.5224           52.1000+-0.5728          might be 1.0011x faster
   &lt;geometric&gt;                                 42.7707+-0.2901           42.7705+-0.3350          might be 1.0000x faster
   &lt;harmonic&gt;                                  34.6295+-0.1954     ?     34.6683+-0.2322        ? might be 1.0011x slower

                                                   BaseLine            VisitScratchBuffers                                
JSRegress:
   adapt-to-double-divide                      72.6620+-0.0852     ?     72.7051+-0.1321        ?
   aliased-arguments-getbyval                   3.6815+-0.1802            3.6746+-0.1908        
   arity-mismatch-inlining                      1.3168+-0.0312            1.2890+-0.0094          might be 1.0215x faster
   big-int-mul                                 28.5101+-0.3113           28.4635+-0.1875        
   boolean-test                                 3.9266+-0.0074     ?      3.9326+-0.0151        ?
   cast-int-to-double                          14.1526+-0.0168     ?     14.1607+-0.0213        ?
   cfg-simplify                                 6.5957+-0.0205     ?      6.6029+-0.0167        ?
   cmpeq-obj-to-obj-other                      13.9139+-0.4605     ?     14.0145+-0.4557        ?
   constant-test                               27.1168+-0.0414     ?     27.2107+-0.0838        ?
   direct-arguments-getbyval                    0.7011+-0.0105     ?      0.7019+-0.0123        ?
   double-pollution-getbyval                    8.7756+-0.0274     ?      8.7777+-0.0186        ?
   double-pollution-putbyoffset                 4.6870+-0.0354            4.6648+-0.0408        
   external-arguments-getbyval                  4.2952+-0.1919            4.2653+-0.1955        
   external-arguments-putbyval                  7.0715+-0.3312     ?      7.0967+-0.3327        ?
   Float32Array-matrix-mult                    11.3192+-0.5077     ?     11.5432+-0.5367        ? might be 1.0198x slower
   fold-double-to-int                          34.2063+-0.5895           33.8435+-0.2564          might be 1.0107x faster
   function-test                                4.6158+-0.0286            4.5848+-0.0172        
   inline-arguments-access                      3.6107+-0.0225     ?      3.6116+-0.0190        ?
   inline-arguments-local-escape               39.4209+-1.4598     ?     40.0287+-1.4872        ? might be 1.0154x slower
   int-overflow-local                         102.6761+-0.1919     ?    102.6830+-0.1260        ?
   Int16Array-bubble-sort                      69.0327+-0.6773           68.6075+-0.9430        
   Int16Array-load-int-mul                     15.8174+-0.0875     ?     15.8965+-0.1237        ?
   Int8Array-load                               4.7640+-0.0325            4.7464+-0.0637        
   integer-divide                              15.0545+-0.3723           14.8291+-0.0315          might be 1.0152x faster
   method-on-number                           187.5714+-1.4717     ?    191.3869+-2.8458        ? might be 1.0203x slower
   number-test                                  3.9351+-0.0177     ?      3.9598+-0.0108        ?
   object-test                                  4.2206+-0.0152            4.1962+-0.0182        
   poly-stricteq                               91.0462+-0.4125     ?     91.1090+-0.4208        ?
   rare-osr-exit-on-local                     150.9123+-0.1566          150.6968+-0.0943        
   simple-activation-demo                      55.2887+-0.3349           55.2096+-0.1918        
   slow-convergence                            90.2112+-0.3039           90.1522+-0.3118        
   string-hash                                 14.5765+-0.2147     ?     14.7791+-0.9469        ? might be 1.0139x slower
   string-test                                  3.7378+-0.0119     !      3.7830+-0.0133        ! definitely 1.0121x slower
   tear-off-arguments                           3.8165+-0.1831            3.8063+-0.1918        
   to-int32-boolean                            29.3838+-0.2678           29.0918+-0.0978          might be 1.0100x faster
   undefined-test                               4.2109+-0.0201     !      4.2541+-0.0155        ! definitely 1.0102x slower

   &lt;arithmetic&gt;                                31.5788+-0.0842     ?     31.6766+-0.1305        ? might be 1.0031x slower
   &lt;geometric&gt; *                               13.0148+-0.0891     ?     13.0203+-0.0916        ? might be 1.0004x slower
   &lt;harmonic&gt;                                   5.7876+-0.0518            5.7763+-0.0484          might be 1.0020x faster

                                                   BaseLine            VisitScratchBuffers                                
DSP:
   filtrr-posterize-tint                       49.0644+-0.3898     ?     49.1086+-0.4294        ?
   filtrr-tint-contrast-sat-bright             81.3190+-0.6132     ?     81.5211+-0.5791        ?
   filtrr-tint-sat-adj-contr-mult              93.7695+-0.7597           93.6671+-0.6576        
   filtrr-blur-overlay-sat-contr              231.7627+-0.7890     ?    232.0110+-0.8206        ?
   filtrr-sat-blur-mult-sharpen-contr         288.6334+-1.8254          288.5511+-1.6429        
   filtrr-sepia-bias                           33.4302+-0.3968     ?     33.5880+-0.4207        ?
   route9-vp8                         x5     1587.7897+-7.5654     ?   1589.0287+-6.5103        ?

   &lt;arithmetic&gt;                               792.4480+-3.3264     ?    793.0537+-2.9408        ? might be 1.0008x slower
   &lt;geometric&gt; *                              345.7214+-0.6517     ?    346.0915+-0.6747        ? might be 1.0011x slower
   &lt;harmonic&gt;                                 130.6126+-0.4003     ?    130.8947+-0.4082        ? might be 1.0022x slower

                                                   BaseLine            VisitScratchBuffers                                
All benchmarks:
   &lt;arithmetic&gt;                               128.1947+-0.3152     ?    128.2463+-0.3003        ? might be 1.0004x slower
   &lt;geometric&gt;                                 20.0661+-0.0589     ?     20.0724+-0.0659        ? might be 1.0003x slower
   &lt;harmonic&gt;                                   4.5082+-0.0165     ?      4.5165+-0.0190        ? might be 1.0018x slower

                                                   BaseLine            VisitScratchBuffers                                
Geomean of preferred means:
   &lt;scaled-result&gt;                             37.2970+-0.1094           37.2804+-0.1215          might be 1.0004x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628786</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-20 22:42:41 -0700</bug_when>
    <thetext>Committed r117729: &lt;http://trac.webkit.org/changeset/117729&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629264</commentid>
    <comment_count>15</comment_count>
      <attachid>142849</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-21 10:56:39 -0700</bug_when>
    <thetext>Comment on attachment 142849
Updated patch wit JIT code keeping track of active scratch buffers

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

&gt; Source/JavaScriptCore/runtime/JSGlobalData.h:134
&gt; +        ScratchBuffer()
&gt; +            : m_activeLength(0)
&gt; +        {
&gt; +        }

It&apos;s deceptive to have a constructor function that, by design, is never called. If someone later adds a field to this struct, they&apos;ll be very surprised to learn that it never gets initialized, and then they&apos;ll have the chore of searching globally for all calls to fastMalloc that are later used to produce a ScratchBuffer, and fixing them up.

Typically, we clarify code like this by giving the class a &quot;create&quot; function that encapsulates allocation size and invokes placement new to create the object. This preserves the C++ invariant that constructors get called to initialize objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629428</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-21 13:22:05 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 142849 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=142849&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalData.h:134
&gt; &gt; +        ScratchBuffer()
&gt; &gt; +            : m_activeLength(0)
&gt; &gt; +        {
&gt; &gt; +        }
&gt; 
&gt; It&apos;s deceptive to have a constructor function that, by design, is never called. If someone later adds a field to this struct, they&apos;ll be very surprised to learn that it never gets initialized, and then they&apos;ll have the chore of searching globally for all calls to fastMalloc that are later used to produce a ScratchBuffer, and fixing them up.
&gt; 
&gt; Typically, we clarify code like this by giving the class a &quot;create&quot; function that encapsulates allocation size and invokes placement new to create the object. This preserves the C++ invariant that constructors get called to initialize objects.

I have a change that fixes this along with another minor cleanup (https://bugs.webkit.org/show_bug.cgi?id=87027). I can merge them together or create a new defect.  You have a preference?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142123</attachid>
            <date>2012-05-15 18:49:18 -0700</date>
            <delta_ts>2012-05-16 22:49:11 -0700</delta_ts>
            <desc>Strawman Patch</desc>
            <filename>86553.patch</filename>
            <type>text/plain</type>
            <size>34295</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDEyLTA1LTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRoZSBhcmd1bWVudHMgdG8gb3BlcmF0aW9uU3RyQ2F0IGFuZCBvcGVyYXRpb25OZXdBcnJh
eSBjYW4gYmUgR2FyYmFnZSBDb2xsZWN0ZWQgYmVmb3JlIHRoZXkgYXJlIHVzZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2NTUzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50cyB0byBE
RkcgaGVscGVycyBvcGVyYXRpb25TdHJDYXQoKSBhbmQgb3BlcmF0aW9uTmV3QXJyYXkoKSBhcmUg
cHV0IGludG8KKyAgICAgICAgYSBzY3JhdGNoIGJ1ZmZlciBhbGxvY2F0ZWQgZnJvbSBvdXIgSlNH
bG9iYWxEYXRhIG9iamVjdC4gIEluIHNvbWUgY2FzZXMsIHRoZSAKKyAgICAgICAgdmFsdWVzIGlu
IHRoYXQgYnVmZmVyIGFyZSBuZXZlciB3cml0dGVuIG91dCB0byB0aGUgcmVnaXN0ZXIgZmlsZS4g
IEludGVybWVkaWF0ZQorICAgICAgICByZXN1bHRzIGNvbWUgdG8gbWluZC4gIFRoZSBmaXggaXMg
dG8gdmlzaXQgYW55ICJhY3RpdmUiIHNjcmF0Y2ggYnVmZmVyIGR1cmluZyBHQy4KKyAgICAgICAg
VGhlIGNoYW5nZSBpbnZvbHZlcyBtYWtpbmcgdGhlIHNjcmF0Y2ggYnVmZmVyIGEgc3RydWN0IHRo
YXQgaW5jbHVkZXMgYW4gYWN0aXZlCisgICAgICAgIGNvdW50IHRoYXQgaXMgc2V0IGF0IHRoZSBi
ZWdpbm5pbmcgb2Ygb3BlcmF0aW9uU3RyQ2F0KCkgYW5kIG9wZXJhdGlvbk5ld0FycmF5KCkgYW5k
CisgICAgICAgIGNsZWFyZWQgYXQgdGhlIGVuZC4KKworICAgICAgICAqIGRmZy9ERkdBc3NlbWJs
eUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2Fs
bCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9v
dHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0M6OlNj
cmF0Y2hCdWZmZXI6OlNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoU2NyYXRjaEJ1ZmZlcik6Cisg
ICAgICAgIChKU0M6OlNjcmF0Y2hCdWZmZXI6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpT
Qzo6U2NyYXRjaEJ1ZmZlcjo6c2V0QWN0aXZlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6U2NyYXRj
aEJ1ZmZlcjo6YWN0aXZlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaEJ1ZmZlcjo6ZGF0
YUJ1ZmZlcik6CisgICAgICAgIChKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bERhdGE6OnNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKwogMjAxMi0wNS0xNSAgT2xpdmVyIEh1bnQg
IDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgZXJyb3IgaW5mb3JtYXRpb24gYXZh
aWxhYmxlIGV2ZW4gaWYgYWxsIHdlIGhhdmUgaXMgbGluZSBudW1iZXIgaW5mb3JtYXRpb24uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDExNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1i
bHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw4ICsxNzAsOSBAQCBwdWJsaWM6CiAg
ICAgLy8gQWRkIGEgZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qgb24gSklUIGNv
ZGUgZXhlY3V0aW9uIHN0YXRlLgogICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVidWdPcGVyYXRp
b25fRVAgZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgRW5jb2RlZEpT
VmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9nbG9iYWxEYXRh
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpKSk7Ci0gICAg
ICAgIAorICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9nbG9iYWxEYXRh
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpKTsKKyAgICAg
ICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4o
c2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKICAgICAgICAgICAgIHN0
b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDExNzAxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwx
MyArOTAsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMDsKICAgICAgICAgICAgIGlm
IChzY3JhdGNoID09IGV4aXQubV9qc1ZhbHVlU291cmNlLmJhc2UoKSkKICAgICAgICAgICAgICAg
ICBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSog
c2NyYXRjaEJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9qaXQuZ2xvYmFs
RGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YodWludDMyX3QpKSk7Ci0gICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gsIHNjcmF0Y2hCdWZmZXIpOworICAgICAgICAgICAg
U2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRj
aEJ1ZmZlckZvclNpemUoc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBFbmNvZGVkSlNW
YWx1ZSogc2NyYXRjaERhdGFCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNj
cmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNj
cmF0Y2gsIHNjcmF0Y2hEYXRhQnVmZmVyKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihleGl0
Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3MoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGJ1Y2tl
dCktPmFzQml0cy50YWcpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKGV4aXQubV9qc1ZhbHVl
U291cmNlLmFzQWRkcmVzcyhPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNj
cmF0Y2gsICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGJ1Y2tldCktPmFz
Qml0cy5wYXlsb2FkKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihzY3JhdGNoQnVmZmVyLCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihzY3JhdGNoRGF0YUJ1ZmZlciwgc2Ny
YXRjaCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaGFzS25vd25U
YWcoKSkgewogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihleGl0Lm1fanNWYWx1ZVNvdXJjZS50YWcoKSksICZiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KGJ1Y2tldCktPmFzQml0cy50YWcpOwogICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCksICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KGJ1Y2tldCktPmFzQml0cy5wYXlsb2FkKTsKQEAg
LTE5OSw3ICsyMDAsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIHNjcmF0Y2hCdWZmZXJMZW5ndGhCZWZvcmVVSW50
MzJzID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAoKG51bWJlck9mRGlzcGxh
Y2VkVmlydHVhbFJlZ2lzdGVycyAqIDIpIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8g
MCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgRW5jb2RlZEpTVmFs
dWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KG1faml0Lmds
b2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IChzY3JhdGNoQnVmZmVyTGVuZ3RoQmVmb3JlVUludDMycyArIChoYXZlVUludDMycyA/IDIgOiAw
KSkpKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFsRGF0
YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKHNjcmF0
Y2hCdWZmZXJMZW5ndGhCZWZvcmVVSW50MzJzICsgKGhhdmVVSW50MzJzID8gMiA6IDApKSk7Cisg
ICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hEYXRhQnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6
IDA7CiAKICAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBw
cm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQogICAgIC8vIGJldHdlZW4gd2hlbiBz
b21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgpAQCAtMjQzLDcgKzI0
NSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BS
OgogICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0
dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oc2NyYXRjaEJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LmdwcigpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihz
Y3JhdGNoRGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKICAgICAgICAgICAgICAg
ICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldID0g
Y3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsr
OwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI2MCw4ICsyNjIsOCBAQCB2b2lkIE9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJblBhaXI6CiAgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBw
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LnRhZ0dQUigpLCByZWludGVy
cHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS5wYXlsb2FkR1BSKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRHUFIoKSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSk7CiAgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBj
dXJyZW50UG9pc29uSW5kZXgrKzsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNzAsNyArMjcy
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVUludDMySW5HUFI6IHsKLSAg
ICAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBteVNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyICsgc2Ny
YXRjaEJ1ZmZlckxlbmd0aEJlZm9yZVVJbnQzMnM7CisgICAgICAgICAgICBFbmNvZGVkSlNWYWx1
ZSogbXlTY3JhdGNoID0gc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoQnVmZmVyTGVuZ3RoQmVm
b3JlVUludDMyczsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSUmVnIGFkZHJlc3NHUFIg
PSBHUFJJbmZvOjpyZWdUMDsKICAgICAgICAgICAgIGlmIChhZGRyZXNzR1BSID09IHJlY292ZXJ5
LmdwcigpKQpAQCAtMjg1LDcgKzI4Nyw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdChjb25zdCAKICAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlY292
ZXJ5LmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LmFkZERvdWJs
ZShBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmQXNzZW1ibHlIZWxwZXJzOjp0d29U
b1RoZTMyKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBpZiAoZXhpdC5pc1Zhcmlh
YmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSwgYWRk
cmVzc0dQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpLCBhZGRy
ZXNzR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJl
Z1QwLCBhZGRyZXNzR1BSKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKQEAgLTI5NSw4ICsyOTcsOCBAQCB2b2lk
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICBwb3NpdGl2
ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChleGl0LmlzVmFy
aWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9y
SW5kZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3Zlcnku
Z3ByKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9p
c29uSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKHJlY292ZXJ5LmdwcigpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3Jh
dGNoRGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50
UG9pc29uSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhl
bHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKQEAgLTMyNyw3ICszMjks
NyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgc2NyYXRjaEJ1ZmZl
ciArIGN1cnJlbnRQb2lzb25JbmRleCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3Vi
bGUocmVjb3ZlcnkuZnByKCksIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4
KTsKICAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFibGVG
b3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCkBAIC00MTMsMTUgKzQxNSwx
NSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAg
ICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQ
UkluZm86OnJlZ1QwLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2Ny
YXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86
OnJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaElu
ZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
OworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgog
ICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAg
ICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCByZWludGVycHJldF9jYXN0PGNoYXIq
PihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNj
cmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDMzLDI0ICs0MzUsMjQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5
ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0
Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hE
YXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlI
ZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRl
eCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lz
dGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNo
YXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1Qw
KTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENlbGxE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCks
IEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkp
KTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsg
c2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xl
YW5UYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC00NzUsNyArNDc3LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgY2FzZSBJbkdQUjoKICAgICAgICAgICAgIGNhc2UgVW5i
b3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6IHsK
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2Ny
YXRjaEJ1ZmZlciArIHBvaXNvbkluZGV4KHZpcnR1YWxSZWdpc3RlcikpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIq
PihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4KHZpcnR1YWxSZWdpc3RlcikpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BS
SW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxS
ZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWc7CiAgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IElu
R1BSKQpAQCAtNDkxLDggKzQ5Myw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAgICAgICAgIGNhc2UgSW5GUFI6CiAgICAgICAgICAgICBjYXNlIEluUGFp
cjoKICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBwb2lzb25JbmRl
eCh2aXJ0dWFsUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHBvaXNv
bkluZGV4KHZpcnR1YWxSZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsg
cG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRh
QnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDExNzAxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTAsNyArMjEwLDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIGRhdGFMb2coIiAiKTsKICNlbmRpZgogICAgIAotICAgIEVuY29kZWRKU1ZhbHVlKiBzY3Jh
dGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihtX2ppdC5nbG9iYWxEYXRh
KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBzdGQ6Om1h
eChoYXZlVUludDMycyA/IDJ1IDogMHUsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
ICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSkpOwor
ICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnNj
cmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBzdGQ6Om1heChoYXZl
VUludDMycyA/IDJ1IDogMHUsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51
bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSk7CisgICAgRW5j
b2RlZEpTVmFsdWUqIHNjcmF0Y2hEYXRhQnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19j
YXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAK
ICAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRh
YmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQogICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhp
bmcgaXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgpAQCAtMjQ1LDggKzI0Niw4IEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAg
ICBpZiAoYWRkcmVzc0dQUiA9PSByZWNvdmVyeS5ncHIoKSkKICAgICAgICAgICAgICAgICAgICAg
YWRkcmVzc0dQUiA9IEdQUkluZm86OnJlZ1QxOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKGFkZHJlc3NHUFIsIHNjcmF0Y2hCdWZmZXIpOwotICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hCdWZmZXIgKyAxKSwgYWRkcmVzc0dQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoYWRkcmVzc0dQUiwgc2NyYXRjaERhdGFCdWZmZXIpOworICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hEYXRhQnVmZmVyICsg
MSksIGFkZHJlc3NHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKEZQUklu
Zm86OmZwUmVnVDAsIGFkZHJlc3NHUFIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEFzc2Vt
Ymx5SGVscGVyczo6R3JlYXRlclRoYW5PckVxdWFsLCByZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpOwpAQCAtMjY0LDcgKzI2NSw3IEBAIHZvaWQgT1NSRXhp
dENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKGFkZHJlc3NHUFIsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciwgYWRkcmVzc0dQUik7CisgICAgICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihzY3JhdGNoRGF0YUJ1ZmZlciwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yODksNyArMjkw
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgogICAgICAg
ICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29u
SW5kZXgpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBz
Y3JhdGNoRGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7CiAgICAgICAgICAgICAgICAg
bV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1
cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsK
ICAgICAgICAgICAgIH0gZWxzZQpAQCAtMzIzLDcgKzMyNCw3IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgo
cmVjb3ZlcnkuZnByKCkpKTsKICAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgp
ICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgp
XSkgewotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciAr
IGN1cnJlbnRQb2lzb25JbmRleCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3By
LCBzY3JhdGNoRGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7CiAgICAgICAgICAgICAg
ICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9
IGN1cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgr
KzsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtNDIyLDIwICs0MjMsMjAgQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVj
b3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAs
IHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTogewog
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOiB7CiAgICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWJQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCkBAIC00NTEsNyArNDUyLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgog
ICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
c2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOwogICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTQ3Nyw3ICs0NzgsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQo
Y29uc3QgCiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAg
Y2FzZSBVSW50MzJJbkdQUjoKICAgICAgICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihzY3JhdGNoQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lz
dGVyKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoc2Ny
YXRjaERhdGFCdWZmZXIgKyBwb2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpy
ZWdUMCk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3Rl
cikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMTcw
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NjUsMjAgKzk2NSwzNiBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblRvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNv
ZGUodmFsdWUpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJDYXQoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemUpCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdChF
eGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHNjcmF0Y2gsIHNpemVfdCBzaXplKQogeworICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxTY3JhdGNoQnVmZmVyKj4oc2Ny
YXRjaCk7CisgICAgLy8gU2V0IHRoZSBhY3RpdmUgbGVuZ3RoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZl
ciBpbiBjYXNlIHdlIG5lZWQgdG8gbWFyayBpdCdzIGNvbnRlbnRzLgorICAgIC8vIHdoaWxlIHBy
b2Nlc3NpbmcKKyAgICBpZiAoc2NyYXRjaEJ1ZmZlcikKKyAgICAgICAgc2NyYXRjaEJ1ZmZlci0+
c2V0QWN0aXZlTGVuZ3RoKHNpemUpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9i
YWxEYXRhLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5n
KGV4ZWMsIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4oc3RhcnQpLCBzaXplKSk7CisgICAgRW5jb2Rl
ZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHN0YXRpY19j
YXN0PFJlZ2lzdGVyKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSwgc2l6ZSkpOworICAg
IGlmIChzY3JhdGNoQnVmZmVyKQorICAgICAgICBzY3JhdGNoQnVmZmVyLT5zZXRBY3RpdmVMZW5n
dGgoMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZSkKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXko
RXhlY1N0YXRlKiBleGVjLCB2b2lkKiBzY3JhdGNoLCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2NyYXRjaEJ1ZmZlcio+KHNj
cmF0Y2gpOworICAgIC8vIFNldCB0aGUgYWN0aXZlIGxlbmd0aCBvZiB0aGUgc2NyYXRjaCBidWZm
ZXIgaW4gY2FzZSB3ZSBuZWVkIHRvIG1hcmsgaXQncyBjb250ZW50cy4KKyAgICAvLyB3aGlsZSBw
cm9jZXNzaW5nCisgICAgaWYgKHNjcmF0Y2hCdWZmZXIpCisgICAgICAgIHNjcmF0Y2hCdWZmZXIt
PnNldEFjdGl2ZUxlbmd0aChzaXplKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1
Y3RBcnJheShleGVjLCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oc3RhcnQpLCBzaXplKSk7CisgICAg
RW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEFycmF5KGV4
ZWMsIHN0YXRpY19jYXN0PEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpLCBz
aXplKSk7CisgICAgaWYgKHNjcmF0Y2hCdWZmZXIpCisgICAgICAgIHNjcmF0Y2hCdWZmZXItPnNl
dEFjdGl2ZUxlbmd0aCgwKTsKKyAgICByZXR1cm4gcmVzdWx0OyAgICAKIH0KIAogRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMsIHNpemVfdCBzdGFydCwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTE3MDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsx
MTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNT
dGF0ZSosIElkZW50aWZpZXIqKTsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVzb2x2ZUdsb2JhbChFeGVjU3RhdGUqLCBHbG9iYWxSZXNvbHZlSW5mbyosIElkZW50aWZp
ZXIqKTsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25TdHJDYXQoRXhlY1N0YXRlKiwgdm9pZCogc3RhcnQsIHNpemVfdCk7Ci1FbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIHZv
aWQqIHN0YXJ0LCBzaXplX3QpOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25TdHJDYXQoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7CitFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVj
U3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKik7CiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE3MDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjkxNyw4ICsyOTE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAvLyBwcm9iYWJseSBoYXMgdGhlIGJlc3QgYmFsYW5jZSBvZiBwZXJm
b3JtYW5jZSBhbmQgc2Vuc2liaWxpdHkgaW4gdGhlIHNlbnNlCiAgICAgICAgIC8vIHRoYXQgaXQg
ZG9lcyBub3QgaW5jcmVhc2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIERGRyBKSVQganVzdCB0byBt
YWtlIFN0ckNhdAogICAgICAgICAvLyBmYXN0IGFuZCBwcmV0dHkuCi0gICAgICAgIAotICAgICAg
ICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPiht
X2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBub2RlLm51bUNoaWxkcmVuKCkpKTsKKworICAgICAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgRW5j
b2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KFNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogICAgICAgICAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUubnVt
Q2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cGVyYW5kKHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKSArIG9wZXJhbmRJZHhdKTsKQEAgLTI5MzUsNyArMjkzNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxv
YWQodGhpcyk7CiAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwogICAgICAgICAK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcCA9PSBTdHJDYXQgPyBvcGVyYXRpb25TdHJDYXQgOiBv
cGVyYXRpb25OZXdBcnJheSwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBi
dWZmZXIsIG5vZGUubnVtQ2hpbGRyZW4oKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3AgPT0g
U3RyQ2F0ID8gb3BlcmF0aW9uU3RyQ2F0IDogb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdFRhZy5n
cHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgc3RhdGljX2Nhc3Q8dm9pZCAqPihzY3JhdGNoQnVm
ZmVyKSwgbm9kZS5udW1DaGlsZHJlbigpKTsKIAogICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGUg
Y2FsbE9wZXJhdGlvbiBhYm92ZSBleHBsaWNpdGx5IHJldHVybiBhIGNlbGwgcmVzdWx0LCBvciBq
aXRBc3NlcnQgdGhlIHRhZyBpcyBhIGNlbGwgdGFnLgogICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTcwMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUyLDggKzI5
NTIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IC8vIHByb2JhYmx5IGhhcyB0aGUgYmVzdCBiYWxhbmNlIG9mIHBlcmZvcm1hbmNlIGFuZCBzZW5z
aWJpbGl0eSBpbiB0aGUgc2Vuc2UKICAgICAgICAgLy8gdGhhdCBpdCBkb2VzIG5vdCBpbmNyZWFz
ZSB0aGUgY29tcGxleGl0eSBvZiB0aGUgREZHIEpJVCBqdXN0IHRvIG1ha2UgU3RyQ2F0CiAgICAg
ICAgIC8vIGZhc3QgYW5kIHByZXR0eS4KLSAgICAgICAgCi0gICAgICAgIEVuY29kZWRKU1ZhbHVl
KiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KG1faml0Lmdsb2JhbERhdGEo
KS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUubnVt
Q2hpbGRyZW4oKSkpOworCisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBt
X2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBub2RlLm51bUNoaWxkcmVuKCkpOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVm
ZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRj
aEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS5udW1DaGlsZHJlbigpOyArK29w
ZXJhbmRJZHgpIHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9q
aXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgb3BlcmFuZElk
eF0pOwpAQCAtMjk2Nyw3ICsyOTY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3AgPT0gU3RyQ2F0ID8gb3BlcmF0aW9uU3Ry
Q2F0IDogb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgYnVmZmVyLCBub2RlLm51bUNo
aWxkcmVuKCkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wID09IFN0ckNhdCA/IG9wZXJhdGlv
blN0ckNhdCA6IG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHQuZ3ByKCksIHN0YXRpY19jYXN0PHZv
aWQgKj4oc2NyYXRjaEJ1ZmZlciksIG5vZGUubnVtQ2hpbGRyZW4oKSk7CiAgICAgICAgIAogICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkocmV2aXNpb24gMTE3MDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKIHsKICAgICBNYWNy
b0Fzc2VtYmxlciBqaXQ7CiAgICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRp
Y19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oZ2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSkpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSBnbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICogKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQog
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTE3MDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYxOCw2ICs2MTgsMTUgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAg
ICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tzKHZpc2l0b3IpOwog
ICAgICAgICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fZ2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICBHQ1BIQVNFKFNjcmF0Y2hCdWZmZXJzKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9nbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVycy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSAgbV9nbG9iYWxEYXRhLT5z
Y3JhdGNoQnVmZmVyc1tpXTsKKyAgICAgICAgICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQo
c3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSksICBzY3Jh
dGNoQnVmZmVyLT5hY3RpdmVMZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7ICAgICAgICAgICAgCisgICAgICAgIH0KICAgICAKICNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMTcwMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIzLDcgKzEyMywyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IG1fc3Rv
cmFnZU9mZnNldDsKICAgICAgICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0OwogICAgIH07Ci0gICAg
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlciB7CisgICAg
ICAgIFNjcmF0Y2hCdWZmZXIoKQorICAgICAgICAgICAgOiBtX2FjdGl2ZUxlbmd0aCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXpl
KHNpemVfdCBidWZmZXJTaXplKSB7IHJldHVybiBzaXplb2Yoc2l6ZV90KSArIGJ1ZmZlclNpemU7
IH0KKyAgICAgICAgdm9pZCBzZXRBY3RpdmVMZW5ndGgoc2l6ZV90IGFjdGl2ZUxlbmd0aCkgeyBt
X2FjdGl2ZUxlbmd0aCA9IGFjdGl2ZUxlbmd0aDsgfQorICAgICAgICBzaXplX3QgYWN0aXZlTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVMZW5ndGg7IH07CisgICAgICAgIHZvaWQqIGRh
dGFCdWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQorICAgICAgICB2b2lkIHZpc2l0RW5jb2Rl
ZEpTVmFsdWVzKFNsb3RWaXNpdG9yJik7CisgICAgICAgIAorICAgICAgICBzaXplX3QgbV9hY3Rp
dmVMZW5ndGg7CisgICAgICAgIHZvaWQqIG1fYnVmZmVyWzBdOworICAgIH07CisjZW5kaWYKKwog
ICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4g
ewogICAgIHB1YmxpYzoKICAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBp
bmcgb2YgdGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOwpAQCAtMjc4LDEwICsyOTYsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIHVpbnQzMl90IG9zckV4
aXRJbmRleDsKICAgICAgICAgdm9pZCogb3NyRXhpdEp1bXBEZXN0aW5hdGlvbjsKLSAgICAgICAg
VmVjdG9yPHZvaWQqPiBzY3JhdGNoQnVmZmVyczsKKyAgICAgICAgVmVjdG9yPFNjcmF0Y2hCdWZm
ZXIqPiBzY3JhdGNoQnVmZmVyczsKICAgICAgICAgc2l6ZV90IHNpemVPZkxhc3RTY3JhdGNoQnVm
ZmVyOwogICAgICAgICAKLSAgICAgICAgdm9pZCogc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZV90
IHNpemUpCisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVf
dCBzaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0yOTMsMTAgKzMxMSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgICAgICAvLyBtYXgoc2NyYXRjaCBidWZmZXIgc2l6ZSkgKiA0LgogICAgICAgICAgICAg
ICAgIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyID0gc2l6ZSAqIDI7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKGZhc3RNYWxsb2Moc2l6ZU9m
TGFzdFNjcmF0Y2hCdWZmZXIpKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoQnVmZmVycy5hcHBl
bmQoc3RhdGljX2Nhc3Q8U2NyYXRjaEJ1ZmZlcio+KGZhc3RNYWxsb2MoU2NyYXRjaEJ1ZmZlcjo6
YWxsb2NhdGlvblNpemUoc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIpKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gc2NyYXRjaEJ1ZmZlcnMubGFzdCgp
OworICAgICAgICAgICAgU2NyYXRjaEJ1ZmZlciogcmVzdWx0ID0gc2NyYXRjaEJ1ZmZlcnMubGFz
dCgpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRBY3RpdmVMZW5ndGgoMCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="148394"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="148383"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142415</attachid>
            <date>2012-05-16 22:49:11 -0700</date>
            <delta_ts>2012-05-17 09:59:00 -0700</delta_ts>
            <desc>Updated Patch </desc>
            <filename>86553-3.patch</filename>
            <type>text/plain</type>
            <size>6069</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDEyLTA1LTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEpTR2xvYmFsRGF0YSBTY3JhdGNoQnVmZmVycyBBcmUgTm90IFZpc2l0ZWQgRHVyaW5nIEdh
cmJhZ2UgQ29sbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODY1NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTY3JhdGNoIGJ1ZmZlcnMgY2FuIGNvbnRhaW4gdGhlIG9ubHkgcmVmZXJlbmNlIHRv
IGxpdmUgb2JqZWN0cy4KKyAgICAgICAgVGhlcmVmb3JlIHZpc2l0IHNjcmF0Y2ggYnVmZmVyIGNv
bnRlbnRzIGFzIGNvbnNlcnZhdGl2ZSByb290cy4KKyAgICAgICAgQXQgVk0gZXhpdCwgY2xlYXIg
dGhlIHNjcmF0Y2ggYnVmZmVycyBzaW5jZSB0aGVpciBjb250ZW50cyBhcmUKKyAgICAgICAgbm90
IHZhbGlkIGF0IHRoYXQgcG9pbnQuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRh
OjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6
Y2xlYXJTY3JhdGNoQnVmZmVycyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoK
KyAgICAgICAgKEpTQzo6U2NyYXRjaEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAo
SlNDOjpTY3JhdGNoQnVmZmVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpTY3JhdGNoQnVm
ZmVyOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpTY3JhdGNoQnVmZmVyOjpkYXRhQnVmZmVyKToK
KyAgICAgICAgKFNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpzY3JhdGNoQnVmZmVyRm9yU2l6ZSk6CisKIDIwMTItMDUt
MTYgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBH
QyBpbiB0aGUgbWlkZGxlIG9mIEpTT2JqZWN0OjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBjYW4g
Y2F1c2UgYmFkbmVzcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDExNzM5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MzEsNiArNTMxLDE1IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wg
ZnVsbEdDKQogICAgICAgICBHQ1BIQVNFKEdhdGhlclJlZ2lzdGVyRmlsZVJvb3RzKTsKICAgICAg
ICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9v
dHMsIG1fZGZnQ29kZUJsb2Nrcyk7CiAgICAgfQorCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
Q29uc2VydmF0aXZlUm9vdHMgc2NyYXRjaEJ1ZmZlclJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2Nr
cygpLCAmbV9zdG9yYWdlU3BhY2UpOworICAgIHsKKyAgICAgICAgR0NQSEFTRShHYXRoZXJTY3Jh
dGNoQnVmZmVyUm9vdHMpOworICAgICAgICBtX2dsb2JhbERhdGEtPmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKHNjcmF0Y2hCdWZmZXJSb290cyk7CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUo
R0dDKQogICAgIE1hcmtlZEJsb2NrOjpEaXJ0eUNlbGxWZWN0b3IgZGlydHlDZWxsczsKICAgICBp
ZiAoIWZ1bGxHQykgewpAQCAtNTc3LDYgKzU4NiwxMyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhi
b29sIGZ1bGxHQykKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJlZ2lzdGVyRmlsZVJvb3Rz
KTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQorI2lm
IEVOQUJMRShERkdfSklUKQorICAgICAgICB7CisgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0U2Ny
YXRjaEJ1ZmZlclJvb3RzKTsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHNjcmF0Y2hCdWZm
ZXJSb290cyk7CisgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAg
IH0KKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0UHJvdGVjdGVk
T2JqZWN0cyk7CiAgICAgICAgICAgICBtYXJrUHJvdGVjdGVkT2JqZWN0cyhoZWFwUm9vdFZpc2l0
b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCShyZXZpc2lvbiAxMTczOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQAogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgog
CisjaWYgRU5BQkxFKERGR19KSVQpCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogI2luY2x1ZGUgIlJlZ0V4cC5oIgog
I2VuZGlmCkBAIC00NTAsNiArNDU0LDI1IEBAIHZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnko
SlNHbG9iYWxEYXQKICAgICBnbG9iYWxEYXRhLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7CiB9
CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQgSlNHbG9iYWxEYXRhOjpnYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JhdGNoQnVmZmVycy5zaXplKCk7IGkrKykgeworICAg
ICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gc2NyYXRjaEJ1ZmZlcnNbaV07Cisg
ICAgICAgIHZvaWQqIGJ1ZmZlclN0YXJ0ID0gc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpOwor
ICAgICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYnVmZmVyU3RhcnQsIHN0YXRpY19jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyU3RhcnQpICsgc2NyYXRjaEJ1ZmZlci0+bGVu
Z3RoKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgSlNHbG9iYWxEYXRhOjpjbGVhclNjcmF0Y2hCdWZm
ZXJzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmF0Y2hCdWZmZXJzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBzY3JhdGNo
QnVmZmVyc1tpXTsKKyAgICAgICAgbWVtc2V0KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSwg
MCwgc2NyYXRjaEJ1ZmZlci0+bGVuZ3RoKCkpOworICAgIH0KK30KKyNlbmRpZgorCiAjaWYgRU5B
QkxFKFJFR0VYUF9UUkFDSU5HKQogdm9pZCBKU0dsb2JhbERhdGE6OmFkZFJlZ0V4cFRvVHJhY2Uo
UmVnRXhwKiByZWdFeHApCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTE3MzkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMs
MjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7CiAg
ICAgICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKICAgICB9OwotICAgIAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CisKKyAgICBzdHJ1Y3QgU2Ny
YXRjaEJ1ZmZlciB7CisgICAgICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90
IGJ1ZmZlclNpemUpIHsgcmV0dXJuIHNpemVvZihzaXplX3QpICsgYnVmZmVyU2l6ZTsgfQorICAg
ICAgICB2b2lkIHNldExlbmd0aChzaXplX3QgbGVuZ3RoKSB7IG1fYnVmZmVyTGVuZ3RoID0gbGVu
Z3RoOyB9CisgICAgICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlckxl
bmd0aDsgfTsKKyAgICAgICAgdm9pZCogZGF0YUJ1ZmZlcigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9
CisKKyAgICAgICAgc2l6ZV90IG1fYnVmZmVyTGVuZ3RoOworICAgICAgICB2b2lkKiBtX2J1ZmZl
clswXTsKKyAgICB9OworI2VuZGlmCisKICAgICBjbGFzcyBKU0dsb2JhbERhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxKU0dsb2JhbERhdGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNv
cmUgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsK
QEAgLTI3OCw3ICsyOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAgICAgdWludDMyX3Qgb3NyRXhpdEluZGV4OwogICAgICAgICB2b2lkKiBvc3JFeGl0SnVt
cERlc3RpbmF0aW9uOwotICAgICAgICBWZWN0b3I8dm9pZCo+IHNjcmF0Y2hCdWZmZXJzOworICAg
ICAgICBWZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IHNjcmF0Y2hCdWZmZXJzOwogICAgICAgICBzaXpl
X3Qgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXI7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBzY3Jh
dGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSkKQEAgLTI5MiwxMiArMzA2LDE3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1lbW9yeSB1c2FnZSBpcyBzb21l
d2hlcmUgYXJvdW5kCiAgICAgICAgICAgICAgICAgLy8gbWF4KHNjcmF0Y2ggYnVmZmVyIHNpemUp
ICogNC4KICAgICAgICAgICAgICAgICBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciA9IHNpemUgKiAy
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJzLmFwcGVu
ZChmYXN0TWFsbG9jKHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSk7CisKKyAgICAgICAgICAgICAg
ICBTY3JhdGNoQnVmZmVyKiBuZXdTY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2NyYXRjaEJ1
ZmZlcio+KGZhc3RNYWxsb2MoU2NyYXRjaEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoc2l6ZU9mTGFz
dFNjcmF0Y2hCdWZmZXIpKSk7CisgICAgICAgICAgICAgICAgbmV3U2NyYXRjaEJ1ZmZlci0+c2V0
TGVuZ3RoKHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNo
QnVmZmVycy5hcHBlbmQobmV3U2NyYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHJldHVybiBzY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAg
ICAgICByZXR1cm4gc2NyYXRjaEJ1ZmZlcnMubGFzdCgpLT5kYXRhQnVmZmVyKCk7CiAgICAgICAg
IH0KKworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJik7CisgICAgICAgIHZvaWQgY2xlYXJTY3JhdGNoQnVmZmVycygpOwogI2VuZGlmCiAKICAg
ICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3duUHRyPE9wYXF1ZUpTQ2xhc3NDb250ZXh0
RGF0YT4gPiBvcGFxdWVKU0NsYXNzRGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142493</attachid>
            <date>2012-05-17 09:59:00 -0700</date>
            <delta_ts>2012-05-18 21:57:34 -0700</delta_ts>
            <desc>Updated Patch with call to clearScratchBuffers()</desc>
            <filename>86553-4.patch</filename>
            <type>text/plain</type>
            <size>6712</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDEyLTA1LTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEpTR2xvYmFsRGF0YSBTY3JhdGNoQnVmZmVycyBBcmUgTm90IFZpc2l0ZWQgRHVyaW5nIEdh
cmJhZ2UgQ29sbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODY1NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTY3JhdGNoIGJ1ZmZlcnMgY2FuIGNvbnRhaW4gdGhlIG9ubHkgcmVmZXJlbmNlIHRv
IGxpdmUgb2JqZWN0cy4KKyAgICAgICAgVGhlcmVmb3JlIHZpc2l0IHNjcmF0Y2ggYnVmZmVyIGNv
bnRlbnRzIGFzIGNvbnNlcnZhdGl2ZSByb290cy4KKyAgICAgICAgQXQgVk0gZXhpdCwgY2xlYXIg
dGhlIHNjcmF0Y2ggYnVmZmVycyBzaW5jZSB0aGVpciBjb250ZW50cyBhcmUKKyAgICAgICAgbm90
IHZhbGlkIGF0IHRoYXQgcG9pbnQuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290
cyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Y2xlYXJTY3JhdGNoQnVmZmVycyk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaEJ1
ZmZlcjo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAoSlNDOjpTY3JhdGNoQnVmZmVyOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpTY3JhdGNoQnVmZmVyOjpsZW5ndGgpOgorICAgICAgICAo
SlNDOjpTY3JhdGNoQnVmZmVyOjpkYXRhQnVmZmVyKToKKyAgICAgICAgKFNjcmF0Y2hCdWZmZXIp
OgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpz
Y3JhdGNoQnVmZmVyRm9yU2l6ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OkR5bmFtaWNHbG9iYWxPYmplY3RTY29wZTo6RHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlKToKKwogMjAxMi0wNS0xNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJl
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIEdDIGluIHRoZSBtaWRkbGUgb2YgSlNPYmplY3Q6OmFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlIGNhbiBjYXVzZSBiYWRuZXNzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTE3MzkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw2ICs1MzEsMTUgQEAg
dm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgICAgIEdDUEhBU0UoR2F0aGVy
UmVnaXN0ZXJGaWxlUm9vdHMpOwogICAgICAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290cywgbV9kZmdDb2RlQmxvY2tzKTsKICAgICB9CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBDb25zZXJ2YXRpdmVSb290cyBzY3JhdGNoQnVmZmVy
Um9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0b3JhZ2VTcGFjZSk7CisgICAgewor
ICAgICAgICBHQ1BIQVNFKEdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyk7CisgICAgICAgIG1fZ2xv
YmFsRGF0YS0+Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoc2NyYXRjaEJ1ZmZlclJvb3RzKTsKKyAg
ICB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShHR0MpCiAgICAgTWFya2VkQmxvY2s6OkRpcnR5Q2Vs
bFZlY3RvciBkaXJ0eUNlbGxzOwogICAgIGlmICghZnVsbEdDKSB7CkBAIC01NzcsNiArNTg2LDEz
IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQocmVnaXN0ZXJGaWxlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRvci5kb25hdGVB
bmREcmFpbigpOwogICAgICAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdDUEhBU0UoVmlzaXRTY3JhdGNoQnVmZmVyUm9vdHMpOworICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoc2NyYXRjaEJ1ZmZlclJvb3RzKTsKKyAgICAgICAgICAgIHZpc2l0b3Iu
ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEdDUEhBU0UoVmlzaXRQcm90ZWN0ZWRPYmplY3RzKTsKICAgICAgICAgICAgIG1hcmtQcm90
ZWN0ZWRPYmplY3RzKGhlYXBSb290VmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDExNzM5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDYgKzU3LDEwIEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1
ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyNpbmNsdWRl
ICJDb25zZXJ2YXRpdmVSb290cy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJ
TkcpCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjZW5kaWYKQEAgLTQ1MCw2ICs0NTQsMjUgQEAgdm9p
ZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERhdAogICAgIGdsb2JhbERhdGEucmVs
ZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKIH0KIAorI2lmIEVOQUJMRShERkdfSklUKQordm9pZCBK
U0dsb2JhbERhdGE6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBj
b25zZXJ2YXRpdmVSb290cykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmF0Y2hC
dWZmZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSBzY3JhdGNoQnVmZmVyc1tpXTsKKyAgICAgICAgdm9pZCogYnVmZmVyU3RhcnQgPSBzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCk7CisgICAgICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChi
dWZmZXJTdGFydCwgc3RhdGljX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXJT
dGFydCkgKyBzY3JhdGNoQnVmZmVyLT5sZW5ndGgoKSkpOworICAgIH0KK30KKwordm9pZCBKU0ds
b2JhbERhdGE6OmNsZWFyU2NyYXRjaEJ1ZmZlcnMoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXJzW2ldOworICAgICAgICBtZW1zZXQoc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpLCAwLCBzY3JhdGNoQnVmZmVyLT5sZW5ndGgoKSk7Cisg
ICAgfQorfQorI2VuZGlmCisKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiB2b2lkIEpTR2xv
YmFsRGF0YTo6YWRkUmVnRXhwVG9UcmFjZShSZWdFeHAqIHJlZ0V4cCkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMTcz
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c2l6ZV90IG1fc3RvcmFnZU9mZnNldDsKICAgICAgICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0Owog
ICAgIH07Ci0gICAgCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBjbGFzcyBDb25zZXJ2YXRp
dmVSb290czsKKworICAgIHN0cnVjdCBTY3JhdGNoQnVmZmVyIHsKKyAgICAgICAgc3RhdGljIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgYnVmZmVyU2l6ZSkgeyByZXR1cm4gc2l6ZW9mKHNp
emVfdCkgKyBidWZmZXJTaXplOyB9CisgICAgICAgIHZvaWQgc2V0TGVuZ3RoKHNpemVfdCBsZW5n
dGgpIHsgbV9idWZmZXJMZW5ndGggPSBsZW5ndGg7IH0KKyAgICAgICAgc2l6ZV90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyTGVuZ3RoOyB9OworICAgICAgICB2b2lkKiBkYXRhQnVm
ZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KKworICAgICAgICBzaXplX3QgbV9idWZmZXJMZW5n
dGg7CisgICAgICAgIHZvaWQqIG1fYnVmZmVyWzBdOworICAgIH07CisjZW5kaWYKKwogICAgIGNs
YXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4gewogICAg
IHB1YmxpYzoKICAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2Yg
dGhyZWFkcyB0byBKU0dsb2JhbERhdGFzOwpAQCAtMjc4LDcgKzI5Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICB1aW50MzJfdCBvc3JFeGl0SW5kZXg7
CiAgICAgICAgIHZvaWQqIG9zckV4aXRKdW1wRGVzdGluYXRpb247Ci0gICAgICAgIFZlY3Rvcjx2
b2lkKj4gc2NyYXRjaEJ1ZmZlcnM7CisgICAgICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gc2Ny
YXRjaEJ1ZmZlcnM7CiAgICAgICAgIHNpemVfdCBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcjsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQqIHNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKQpA
QCAtMjkyLDEyICszMDYsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgLy8g
dG90YWwgbWVtb3J5IHVzYWdlIGlzIHNvbWV3aGVyZSBhcm91bmQKICAgICAgICAgICAgICAgICAv
LyBtYXgoc2NyYXRjaCBidWZmZXIgc2l6ZSkgKiA0LgogICAgICAgICAgICAgICAgIHNpemVPZkxh
c3RTY3JhdGNoQnVmZmVyID0gc2l6ZSAqIDI7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgc2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKGZhc3RNYWxsb2Moc2l6ZU9mTGFzdFNjcmF0Y2hC
dWZmZXIpKTsKKworICAgICAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIG5ld1NjcmF0Y2hCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxTY3JhdGNoQnVmZmVyKj4oZmFzdE1hbGxvYyhTY3JhdGNoQnVmZmVy
OjphbGxvY2F0aW9uU2l6ZShzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlcikpKTsKKyAgICAgICAgICAg
ICAgICBuZXdTY3JhdGNoQnVmZmVyLT5zZXRMZW5ndGgoc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIp
OworICAgICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJzLmFwcGVuZChuZXdTY3JhdGNoQnVmZmVy
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHNjcmF0
Y2hCdWZmZXJzLmxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBzY3JhdGNoQnVmZmVycy5sYXN0
KCktPmRhdGFCdWZmZXIoKTsKICAgICAgICAgfQorCisgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKKyAgICAgICAgdm9pZCBjbGVhclNjcmF0
Y2hCdWZmZXJzKCk7CiAjZW5kaWYKIAogICAgICAgICBIYXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBP
d25QdHI8T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhPiA+IG9wYXF1ZUpTQ2xhc3NEYXRhOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkocmV2aXNpb24gMTE3MzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDkgQEAgRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlOjpEeW5hbWljR2xvYmFsTwogICAgICAgICAvLyBSZXNldCB0aGUg
ZGF0ZSBjYWNoZSBiZXR3ZWVuIEpTIGludm9jYXRpb25zIHRvIGZvcmNlIHRoZSBWTQogICAgICAg
ICAvLyB0byBvYnNlcnZlIHRpbWUgem9uZSBjaGFuZ2VzLgogICAgICAgICBnbG9iYWxEYXRhLnJl
c2V0RGF0ZUNhY2hlKCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIGdsb2JhbERhdGEu
Y2xlYXJTY3JhdGNoQnVmZmVycygpOworI2VuZGlmCiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="148841"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142849</attachid>
            <date>2012-05-18 21:57:34 -0700</date>
            <delta_ts>2012-05-21 10:56:39 -0700</delta_ts>
            <desc>Updated patch wit JIT code keeping track of active scratch buffers</desc>
            <filename>86553-5.patch</filename>
            <type>text/plain</type>
            <size>37199</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NjcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDEyLTA1LTE4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEpTR2xvYmFsRGF0YSBTY3JhdGNoQnVmZmVycyBBcmUgTm90IFZpc2l0ZWQgRHVyaW5nIEdh
cmJhZ2UgQ29sbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODY1NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTY3JhdGNoIGJ1ZmZlcnMgY2FuIGNvbnRhaW4gdGhlIG9ubHkgcmVmZXJlbmNlIHRv
IGxpdmUgb2JqZWN0cy4KKyAgICAgICAgVGhlcmVmb3JlIHZpc2l0IHNjcmF0Y2ggYnVmZmVyIGNv
bnRlbnRzIGFzIGNvbnNlcnZhdGl2ZSByb290cy4KKyAgICAgICAgQ2hhbmdlZCB0aGUgc2NyYXRj
aCBidWZmZXJzIHRvIGJlIGEgc3RydWN0IHdpdGggYW4gImFjdGl2ZSIKKyAgICAgICAgbGVuZ3Ro
IGFuZCB0aGUgYWN0dWFsIGJ1ZmZlci4gIFRoZSB1c2VycyBvZiB0aGUgc2NyYXRjaAorICAgICAg
ICBidWZmZXIgZW1pdCBjb2RlIHdoZXJlIG5lZWRlZCB0byBzZXQgYW5kIGNsZWFyIHRoZSBhY3Rp
dmUKKyAgICAgICAgbGVuZ3RoIGFzIGFwcHJvcHJpYXRlLiAgRHVyaW5nIG1hcmtpbmcsIHRoZSBh
Y3RpdmUgY291bnQgaXMKKyAgICAgICAgdXNlZCBmb3IgY29uc2VydmF0aXZlIG1hcmtpbmcuCisK
KyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29t
cGlsZXIzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6Z2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0M6
OlNjcmF0Y2hCdWZmZXI6OlNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoU2NyYXRjaEJ1ZmZlcik6
CisgICAgICAgIChKU0M6OlNjcmF0Y2hCdWZmZXI6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAg
KEpTQzo6U2NyYXRjaEJ1ZmZlcjo6c2V0QWN0aXZlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6U2Ny
YXRjaEJ1ZmZlcjo6YWN0aXZlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaEJ1ZmZlcjo6
YWN0aXZlTGVuZ3RoUHRyKToKKyAgICAgICAgKEpTQzo6U2NyYXRjaEJ1ZmZlcjo6ZGF0YUJ1ZmZl
cik6CisgICAgICAgIChKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6
OnNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKwogMjAxMi0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04oMTE3NjQ2KTogZmFzdC9jYW52YXMv
d2ViZ2wvZ2xzbC1jb25mb3JtYW5jZS5odG1sIGlzIGNyYXNoaW5nIGluIHRoZSBERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2
aXNpb24gMTE3MzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhl
bHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDE0ICsxNzAsMjEgQEAgcHVibGljOgogICAg
IC8vIEFkZCBhIGRlYnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IG9uIEpJVCBjb2Rl
IGV4ZWN1dGlvbiBzdGF0ZS4KICAgICB2b2lkIGRlYnVnQ2FsbChWX0RGR0RlYnVnT3BlcmF0aW9u
X0VQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKICAgICB7Ci0gICAgICAgIEVuY29kZWRKU1Zh
bHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KG1fZ2xvYmFsRGF0YS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSkpOwotICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
KTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1fZ2xvYmFsRGF0YS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgICAgICBFbmNvZGVkSlNWYWx1
ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5k
YXRhQnVmZmVyKCkpOworCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQogICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwg
R1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdp
c3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGVsbCBH
QyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVy
aW5nIGNhbGwuCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3Rp
dmVMZW5ndGhQdHIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihzY3JhdGNoU2l6ZSksIEdQUkluZm86OnJlZ1QwKTsKKwogI2lmIENQVShYODZfNjQp
IHx8IENQVShBUk1fVEhVTUIyKQogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYXJndW1lbnQp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTkxLDYgKzE5OCwxMCBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGZ1bmN0aW9uKSksIHNjcmF0Y2gpOwogICAgICAgICBjYWxsKHNjcmF0Y2gpOwor
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQ
dHIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigw
KSwgR1BSSW5mbzo6cmVnVDApOworCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBG
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5m
bzo6cmVnVDApOwogICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5m
bzo6dG9SZWdpc3RlcihpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTE3MzkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDEzICs5MCwxNCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29t
cGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QwOwogICAgICAgICAgICAgaWYgKHNjcmF0Y2ggPT0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFz
ZSgpKQogICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMTsKLSAgICAgICAg
ICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZih1
aW50MzJfdCkpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaCwgc2NyYXRjaEJ1
ZmZlcik7CisgICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQu
Z2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YodWludDMyX3QpKTsKKyAg
ICAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoRGF0YUJ1ZmZlciA9IHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaCwgc2NyYXRjaERhdGFCdWZmZXIpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcyhPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCBzY3JhdGNoKTsKICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaCwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4oYnVja2V0KS0+YXNCaXRzLnRhZyk7CiAgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoKTsKICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaCwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKj4oYnVja2V0KS0+YXNCaXRzLnBheWxvYWQpOwotICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKHNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2gpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKHNj
cmF0Y2hEYXRhQnVmZmVyLCBzY3JhdGNoKTsKICAgICAgICAgfSBlbHNlIGlmIChleGl0Lm1fanNW
YWx1ZVNvdXJjZS5oYXNLbm93blRhZygpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZygpKSwg
JmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oYnVja2V0KS0+YXNCaXRzLnRh
Zyk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnBheWxv
YWRHUFIoKSwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oYnVja2V0KS0+
YXNCaXRzLnBheWxvYWQpOwpAQCAtMTk5LDcgKzIwMCw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc2NyYXRjaEJ1
ZmZlckxlbmd0aEJlZm9yZVVJbnQzMnMgPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
cyArICgobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzICogMikgPD0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKLSAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaEJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29k
ZWRKU1ZhbHVlKj4obV9qaXQuZ2xvYmFsRGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICogKHNjcmF0Y2hCdWZmZXJMZW5ndGhCZWZvcmVVSW50MzJzICsg
KGhhdmVVSW50MzJzID8gMiA6IDApKSkpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiAoc2NyYXRjaEJ1ZmZlckxlbmd0aEJlZm9yZVVJbnQzMnMgKyAoaGF2ZVVJ
bnQzMnMgPyAyIDogMCkpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaERhdGFCdWZmZXIg
PSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVm
ZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKIAogICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUg
YXNzdW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCiAg
ICAgLy8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBz
dG9yZWQuCkBAIC0yNDMsNyArMjQ1LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICBjYXNl
IFVuYm94ZWRCb29sZWFuSW5HUFI6CiAgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGlu
ZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGlu
ZGV4KV0pIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LmdwcigpLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkuZ3ByKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOwogICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJs
ZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAg
Y3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjYwLDggKzI2
Miw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3Zl
cnkudGFnR1BSKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBjdXJy
ZW50UG9pc29uSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LnBh
eWxvYWRHUFIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIGN1cnJl
bnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5
LnRhZ0dQUigpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIGN1
cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3Zlcnku
cGF5bG9hZEdQUigpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciAr
IGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKTsKICAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJ
bmRpY2VzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4
OwogICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTI3MCw3ICsyNzIsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBVSW50MzJJbkdQUjogewotICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIG15U2NyYXRjaCA9
IHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoQnVmZmVyTGVuZ3RoQmVmb3JlVUludDMyczsKKyAgICAg
ICAgICAgIEVuY29kZWRKU1ZhbHVlKiBteVNjcmF0Y2ggPSBzY3JhdGNoRGF0YUJ1ZmZlciArIHNj
cmF0Y2hCdWZmZXJMZW5ndGhCZWZvcmVVSW50MzJzOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBHUFJSZWcgYWRkcmVzc0dQUiA9IEdQUkluZm86OnJlZ1QwOwogICAgICAgICAgICAgaWYgKGFk
ZHJlc3NHUFIgPT0gcmVjb3ZlcnkuZ3ByKCkpCkBAIC0yODUsNyArMjg3LDcgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgbV9qaXQuY29udmVy
dEludDMyVG9Eb3VibGUocmVjb3ZlcnkuZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAg
ICAgICAgbV9qaXQuYWRkRG91YmxlKEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZB
c3NlbWJseUhlbHBlcnM6OnR3b1RvVGhlMzIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAg
ICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
c1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXIgKyBjdXJy
ZW50UG9pc29uSW5kZXgpLCBhZGRyZXNzR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIGN1cnJl
bnRQb2lzb25JbmRleCksIGFkZHJlc3NHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIGFkZHJlc3NHUFIpOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwpAQCAt
Mjk1LDggKzI5Nyw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAK
ICAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRj
aEJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRl
eCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
OworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkuZ3ByKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
OworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNo
RGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LmdwcigpLCBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CiAgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFu
ZCkpOwpAQCAtMzI3LDcgKzMyOSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFi
bGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5k
ZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHJlY292ZXJ5
LmZwcigpLCBzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgc2NyYXRjaERhdGFCdWZmZXIg
KyBjdXJyZW50UG9pc29uSW5kZXgpOwogICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaElu
ZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7
CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVs
c2UKQEAgLTQxMywxNSArNDE1LDE1IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgog
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0
Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihHUFJJbmZvOjpyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZm
ZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
R1BSSW5mbzo6cmVnVDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVy
ICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSk7CiAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5S
ZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MzMsMjQgKzQzNSwyNCBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwogICAgICAg
ICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSwgR1BS
SW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpLCBHUFJJbmZvOjpyZWdU
MSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUklu
Zm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBzY3JhdGNoSW5k
ZXgrKzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBJ
bnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4
KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdU
MCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVy
ICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNo
YXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
c2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7CiAg
ICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ3NSw3ICs0NzcsNyBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICBjYXNlIEluR1BSOgog
ICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKICAgICAgICAgICAgIGNhc2UgVW5i
b3hlZEJvb2xlYW5JbkdQUjogewotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVy
cHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lz
dGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmly
dHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgdWludDMyX3Qg
dGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKICAgICAgICAgICAgICAgICBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCkBAIC00OTEsOCArNDkzLDggQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgY2FzZSBJbkZQUjoKICAg
ICAgICAgICAgIGNhc2UgSW5QYWlyOgogICAgICAgICAgICAgY2FzZSBVSW50MzJJbkdQUjoKLSAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRj
aEJ1ZmZlciArIHBvaXNvbkluZGV4KHZpcnR1YWxSZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihz
Y3JhdGNoQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
c2NyYXRjaERhdGFCdWZmZXIgKyBwb2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBwb2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIp
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSwg
R1BSSW5mbzo6cmVnVDEpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6
cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1
YWxSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVn
VDEsIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lz
dGVyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTE3Mzkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgZGF0YUxvZygiICIpOwogI2VuZGlmCiAgICAgCi0gICAg
RW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSAqIHN0ZDo6bWF4KGhhdmVVSW50MzJzID8gMnUgOiAwdSwgbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
IDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycykpKSk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1f
aml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAqIHN0ZDo6bWF4KGhhdmVVSW50MzJzID8gMnUgOiAwdSwgbnVtYmVyT2ZQb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJl
Z2lzdGVycykpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaERhdGFCdWZmZXIgPSBzY3Jh
dGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5k
YXRhQnVmZmVyKCkpIDogMDsKIAogICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1l
cyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCiAgICAgLy8g
YmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQu
CkBAIC0yNDUsOCArMjQ2LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNv
bnN0IAogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzR1BSID09IHJlY292ZXJ5LmdwcigpKQog
ICAgICAgICAgICAgICAgICAgICBhZGRyZXNzR1BSID0gR1BSSW5mbzo6cmVnVDE7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoYWRkcmVzc0dQUiwgc2Ny
YXRjaEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlciArIDEpLCBhZGRyZXNzR1BSKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihhZGRyZXNzR1BSLCBzY3JhdGNoRGF0YUJ1ZmZlcik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
c2NyYXRjaERhdGFCdWZmZXIgKyAxKSwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgYWRkcmVzc0dQUik7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHBvc2l0aXZlID0g
bV9qaXQuYnJhbmNoMzIoQXNzZW1ibHlIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlY292
ZXJ5LmdwcigpLCBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CkBAIC0yNjQsNyAr
MjY1LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAg
ICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc0dQUiwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNoQnVmZmVyLCBhZGRyZXNzR1BSKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hEYXRhQnVmZmVyLCBhZGRyZXNz
R1BSKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKQEAgLTI4OSw3ICsyOTAsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2Ug
VUludDMySW5HUFI6CiAgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBw
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaEJ1
ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4
KTsKICAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFibGVG
b3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCkBAIC0zMjMsNyArMzI0LDcg
QEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0
ZXIoRlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpOwogICAgICAgICAgICAgaWYgKGV4
aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFy
aWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Z3ByLCBzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbklu
ZGV4KTsKICAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFi
bGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAgICAgICAg
IGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCkBAIC00MjIsMjAgKzQy
MywyMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAg
ICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAg
IGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hE
YXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOiB7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJ
bmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6IHsKICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAg
ICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ1MSw3ICs0NTIsNyBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgY2FzZSBE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNo
QnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBH
UFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcill
eGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDc3LDcgKzQ3OCw3IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMy
SW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgogICAgICAgICAgICAgY2FzZSBJ
bkZQUjoKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBwb2lz
b25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4KHZpcnR1YWxS
ZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTE3MzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqKTsK
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChFeGVj
U3RhdGUqLCBHbG9iYWxSZXNvbHZlSW5mbyosIElkZW50aWZpZXIqKTsKIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQoRXhl
Y1N0YXRlKiwgdm9pZCogc3RhcnQsIHNpemVfdCk7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIHZvaWQqIHN0YXJ0LCBzaXplX3QpOwor
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQoRXhlY1N0YXRlKiwg
dm9pZCosIHNpemVfdCk7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5KEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVf
dCk7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVj
U3RhdGUqLCB2b2lkKik7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTE3MzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkxNyw4ICsyOTE3LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8g
cHJvYmFibHkgaGFzIHRoZSBiZXN0IGJhbGFuY2Ugb2YgcGVyZm9ybWFuY2UgYW5kIHNlbnNpYmls
aXR5IGluIHRoZSBzZW5zZQogICAgICAgICAvLyB0aGF0IGl0IGRvZXMgbm90IGluY3JlYXNlIHRo
ZSBjb21wbGV4aXR5IG9mIHRoZSBERkcgSklUIGp1c3QgdG8gbWFrZSBTdHJDYXQKICAgICAgICAg
Ly8gZmFzdCBhbmQgcHJldHR5LgotICAgICAgICAKLSAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1
ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4obV9qaXQuZ2xvYmFsRGF0YSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS5udW1DaGls
ZHJlbigpKSk7CisKKyAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2Ny
YXRjaEJ1ZmZlciA9IG1faml0Lmdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2Ny
YXRjaFNpemUpOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc2NyYXRjaEJ1ZmZl
ciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpKSA6IDA7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAw
OyBvcGVyYW5kSWR4IDwgbm9kZS5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKICAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFy
Z0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF0pOwpAQCAtMjkzMSwxMSAr
MjkzMywyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIAorCisg
ICAgICAgIGlmIChzY3JhdGNoU2l6ZSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CisKKyAgICAgICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgorICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigp
KSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1t
UHRyKHNjcmF0Y2hTaXplKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgIH0KKwogICAgICAgICBH
UFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRU
YWcodGhpcyk7CiAgICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wID09IFN0ckNhdCA/
IG9wZXJhdGlvblN0ckNhdCA6IG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHRUYWcuZ3ByKCksIHJl
c3VsdFBheWxvYWQuZ3ByKCksIGJ1ZmZlciwgbm9kZS5udW1DaGlsZHJlbigpKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcCA9PSBTdHJDYXQgPyBvcGVyYXRpb25TdHJDYXQgOiBvcGVyYXRpb25O
ZXdBcnJheSwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBzdGF0aWNfY2Fz
dDx2b2lkICo+KHNjcmF0Y2hCdWZmZXIpLCBub2RlLm51bUNoaWxkcmVuKCkpOworCisgICAgICAg
IGlmIChzY3JhdGNoU2l6ZSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVy
LT5hY3RpdmVMZW5ndGhQdHIoKSksIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgIH0KIAog
ICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGUgY2FsbE9wZXJhdGlvbiBhYm92ZSBleHBsaWNpdGx5
IHJldHVybiBhIGNlbGwgcmVzdWx0LCBvciBqaXRBc3NlcnQgdGhlIHRhZyBpcyBhIGNlbGwgdGFn
LgogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTczOTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTUyLDggKzI5NTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBwcm9iYWJseSBoYXMgdGhlIGJlc3QgYmFs
YW5jZSBvZiBwZXJmb3JtYW5jZSBhbmQgc2Vuc2liaWxpdHkgaW4gdGhlIHNlbnNlCiAgICAgICAg
IC8vIHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIERGRyBK
SVQganVzdCB0byBtYWtlIFN0ckNhdAogICAgICAgICAvLyBmYXN0IGFuZCBwcmV0dHkuCi0gICAg
ICAgIAotICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihtX2ppdC5nbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLm51bUNoaWxkcmVuKCkpKTsKKworICAgICAgICBzaXpl
X3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS5udW1DaGlsZHJl
bigpOworICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQuZ2xvYmFs
RGF0YSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIEVuY29k
ZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKICAgICAgICAgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLm51bUNo
aWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Bl
cmFuZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCkgKyBvcGVyYW5kSWR4XSk7CkBAIC0yOTY0LDExICsyOTY2LDI2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgCisKKyAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7
CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICAgICAg
Ly8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBh
Y3RpdmUgZHVyaW5nIGNhbGwuCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
c2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoLmdwcigpKTsKKyAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBzY3JhdGNo
LmdwcigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAg
ICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wID09IFN0ckNhdCA/IG9wZXJhdGlvblN0
ckNhdCA6IG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHQuZ3ByKCksIGJ1ZmZlciwgbm9kZS5udW1D
aGlsZHJlbigpKTsKLSAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3AgPT0gU3RyQ2F0
ID8gb3BlcmF0aW9uU3RyQ2F0IDogb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgc3Rh
dGljX2Nhc3Q8dm9pZCAqPihzY3JhdGNoQnVmZmVyKSwgbm9kZS5udW1DaGlsZHJlbigpKTsKKwor
ICAgICAgICBpZiAoc2NyYXRjaFNpemUpIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOworCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRj
aEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2guZ3ByKCkpOworICAgICAg
ICB9CisKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAxMTczOTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0
aW9uVAogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKICAgICAKLSAgICBFbmNvZGVkSlNWYWx1
ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihnbG9iYWxEYXRhLT5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpKSk7CisgICAgc2l6ZV90
IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVm
ZmVyKiBzY3JhdGNoQnVmZmVyID0gZ2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2Ny
YXRjaFNpemUpOworICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCiAg
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsK
QEAgLTU0LDkgKzU2LDE2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlv
blQKICNlbHNlCiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKLSAgICAKKworICAgIC8vIFRlbGwgR0MgbWFyayBw
aGFzZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxs
LgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZm
ZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5zdG9yZVB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIEdQUkluZm86OnJl
Z1QwKTsKKwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGppdC5jYWxs
KCk7Ci0gICAgCisKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
Y3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBq
aXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OnJl
Z1QwKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKSB7CiAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86
OnJlZ1QwKTsKICAgICAgICAgaml0LmxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86
OnRvUmVnaXN0ZXIoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDExNzM5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MzEsNiArNTMxLDE1IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJv
b2wgZnVsbEdDKQogICAgICAgICBHQ1BIQVNFKEdhdGhlclJlZ2lzdGVyRmlsZVJvb3RzKTsKICAg
ICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxl
Um9vdHMsIG1fZGZnQ29kZUJsb2Nrcyk7CiAgICAgfQorCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgQ29uc2VydmF0aXZlUm9vdHMgc2NyYXRjaEJ1ZmZlclJvb3RzKCZtX29iamVjdFNwYWNlLmJs
b2NrcygpLCAmbV9zdG9yYWdlU3BhY2UpOworICAgIHsKKyAgICAgICAgR0NQSEFTRShHYXRoZXJT
Y3JhdGNoQnVmZmVyUm9vdHMpOworICAgICAgICBtX2dsb2JhbERhdGEtPmdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKHNjcmF0Y2hCdWZmZXJSb290cyk7CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFC
TEUoR0dDKQogICAgIE1hcmtlZEJsb2NrOjpEaXJ0eUNlbGxWZWN0b3IgZGlydHlDZWxsczsKICAg
ICBpZiAoIWZ1bGxHQykgewpAQCAtNTc3LDYgKzU4NiwxMyBAQCB2b2lkIEhlYXA6Om1hcmtSb290
cyhib29sIGZ1bGxHQykKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJlZ2lzdGVyRmlsZVJv
b3RzKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICB7CisgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0
U2NyYXRjaEJ1ZmZlclJvb3RzKTsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHNjcmF0Y2hC
dWZmZXJSb290cyk7CisgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAg
ICAgIH0KKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFZpc2l0UHJvdGVj
dGVkT2JqZWN0cyk7CiAgICAgICAgICAgICBtYXJrUHJvdGVjdGVkT2JqZWN0cyhoZWFwUm9vdFZp
c2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCShyZXZpc2lvbiAxMTczOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQAog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5o
PgogCisjaWYgRU5BQkxFKERGR19KSVQpCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIK
KyNlbmRpZgorCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogI2luY2x1ZGUgIlJlZ0V4cC5o
IgogI2VuZGlmCkBAIC00NTAsNiArNDU0LDE5IEBAIHZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1v
cnkoSlNHbG9iYWxEYXQKICAgICBnbG9iYWxEYXRhLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7
CiB9CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQgSlNHbG9iYWxEYXRhOjpnYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JhdGNoQnVmZmVycy5zaXplKCk7IGkrKykgewor
ICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gc2NyYXRjaEJ1ZmZlcnNbaV07
CisgICAgICAgIGlmIChzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGgoKSkgeworICAgICAgICAg
ICAgdm9pZCogYnVmZmVyU3RhcnQgPSBzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCk7CisgICAg
ICAgICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYnVmZmVyU3RhcnQsIHN0YXRpY19jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyU3RhcnQpICsgc2NyYXRjaEJ1ZmZlci0+YWN0
aXZlTGVuZ3RoKCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFJFR0VYUF9UUkFDSU5HKQogdm9pZCBKU0dsb2JhbERhdGE6OmFkZFJlZ0V4cFRvVHJhY2UoUmVn
RXhwKiByZWdFeHApCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTE3MzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsMjgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7CiAgICAg
ICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKICAgICB9OwotICAgIAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CisKKyAgICBzdHJ1Y3QgU2NyYXRj
aEJ1ZmZlciB7CisgICAgICAgIFNjcmF0Y2hCdWZmZXIoKQorICAgICAgICAgICAgOiBtX2FjdGl2
ZUxlbmd0aCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKHNpemVfdCBidWZmZXJTaXplKSB7IHJldHVybiBzaXplb2Yoc2l6ZV90
KSArIGJ1ZmZlclNpemU7IH0KKyAgICAgICAgdm9pZCBzZXRBY3RpdmVMZW5ndGgoc2l6ZV90IGFj
dGl2ZUxlbmd0aCkgeyBtX2FjdGl2ZUxlbmd0aCA9IGFjdGl2ZUxlbmd0aDsgfQorICAgICAgICBz
aXplX3QgYWN0aXZlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVMZW5ndGg7IH07Cisg
ICAgICAgIHNpemVfdCogYWN0aXZlTGVuZ3RoUHRyKCkgeyByZXR1cm4gJm1fYWN0aXZlTGVuZ3Ro
OyB9OworICAgICAgICB2b2lkKiBkYXRhQnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAg
ICAgICAgdm9pZCB2aXNpdEVuY29kZWRKU1ZhbHVlcyhTbG90VmlzaXRvciYpOworCisgICAgICAg
IHNpemVfdCBtX2FjdGl2ZUxlbmd0aDsKKyAgICAgICAgdm9pZCogbV9idWZmZXJbMF07CisgICAg
fTsKKyNlbmRpZgorCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8
SlNHbG9iYWxEYXRhPiB7CiAgICAgcHVibGljOgogICAgICAgICAvLyBXZWJDb3JlIGhhcyBhIG9u
ZS10by1vbmUgbWFwcGluZyBvZiB0aHJlYWRzIHRvIEpTR2xvYmFsRGF0YXM7CkBAIC0yNzgsMTAg
KzI5OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAg
dWludDMyX3Qgb3NyRXhpdEluZGV4OwogICAgICAgICB2b2lkKiBvc3JFeGl0SnVtcERlc3RpbmF0
aW9uOwotICAgICAgICBWZWN0b3I8dm9pZCo+IHNjcmF0Y2hCdWZmZXJzOworICAgICAgICBWZWN0
b3I8U2NyYXRjaEJ1ZmZlcio+IHNjcmF0Y2hCdWZmZXJzOwogICAgICAgICBzaXplX3Qgc2l6ZU9m
TGFzdFNjcmF0Y2hCdWZmZXI7CiAgICAgICAgIAotICAgICAgICB2b2lkKiBzY3JhdGNoQnVmZmVy
Rm9yU2l6ZShzaXplX3Qgc2l6ZSkKKyAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ckZvclNpemUoc2l6ZV90IHNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghc2l6ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTI5MiwxMiArMzEzLDE2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1lbW9yeSB1c2FnZSBpcyBzb21ld2hl
cmUgYXJvdW5kCiAgICAgICAgICAgICAgICAgLy8gbWF4KHNjcmF0Y2ggYnVmZmVyIHNpemUpICog
NC4KICAgICAgICAgICAgICAgICBzaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciA9IHNpemUgKiAyOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXJzLmFwcGVuZChm
YXN0TWFsbG9jKHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKSk7CisKKyAgICAgICAgICAgICAgICBz
Y3JhdGNoQnVmZmVycy5hcHBlbmQoc3RhdGljX2Nhc3Q8U2NyYXRjaEJ1ZmZlcio+KGZhc3RNYWxs
b2MoU2NyYXRjaEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXIp
KSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gc2Ny
YXRjaEJ1ZmZlcnMubGFzdCgpOworCisgICAgICAgICAgICBTY3JhdGNoQnVmZmVyKiByZXN1bHQg
PSBzY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAgICAgICByZXN1bHQtPnNldEFjdGl2ZUxl
bmd0aCgwKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAjZW5k
aWYKIAogICAgICAgICBIYXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBPd25QdHI8T3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhPiA+IG9wYXF1ZUpTQ2xhc3NEYXRhOwo=
</data>
<flag name="review"
          id="149268"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>