<?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>69868</bug_id>
          
          <creation_ts>2011-10-11 14:08:25 -0700</creation_ts>
          <short_desc>DFG virtual register allocator should be more aggressive in reusing temporary slots</short_desc>
          <delta_ts>2011-10-11 18:36:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481902</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 14:08:25 -0700</bug_when>
    <thetext>The DFG virtual register allocator currently only allocates slots that are beyond the high watermark of used bytecode temporaries.  But there may be unused bytecode temporaries below that high watermark, and the virtual register allocation should be able to reuse them.

This will reduce the DFG call frame sizes, and will pave the way for more a fluid interaction between bytecode variables and virtual registers.  This is likely to be necessary as we enable inlining of JavaScript code blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481926</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 14:44:09 -0700</bug_when>
    <thetext>This does weird, but good, things for performance.


Benchmark report for SunSpider, V8, and Kraken.

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

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark iteration per VM
invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting
benchmark execution times with 95% confidence intervals in milliseconds.

                                            TipOfTree             BetterVRAlloc                                  
SunSpider:
   3d-cube                                7.3773+-0.1682    ?     7.4579+-0.1385       ? might be 1.0109x slower
   3d-morph                               7.6129+-0.1029    ?     7.6418+-0.1258       ?
   3d-raytrace                            7.4375+-0.1547    ?     7.5778+-0.1489       ? might be 1.0189x slower
   access-binary-trees                    1.7496+-0.0528          1.7096+-0.0679         might be 1.0234x faster
   access-fannkuch                        6.4089+-0.0902    ?     6.5075+-0.1120       ? might be 1.0154x slower
   access-nbody                           3.3459+-0.0701          3.3088+-0.0721         might be 1.0112x faster
   access-nsieve                          2.5818+-0.0483    ?     2.6016+-0.0653       ?
   bitops-3bit-bits-in-byte               1.7004+-0.0294    ?     1.7129+-0.0297       ?
   bitops-bits-in-byte                    2.7519+-0.0609    ?     2.7989+-0.0604       ? might be 1.0171x slower
   bitops-bitwise-and                     3.3616+-0.0921          3.2038+-0.1061         might be 1.0493x faster
   bitops-nsieve-bits                     5.4789+-0.0996          5.4371+-0.1053       
   controlflow-recursive                  2.1314+-0.0493    ^     2.0389+-0.0401       ^ definitely 1.0454x faster
   crypto-aes                             6.6118+-0.1531    ?     6.8585+-0.2216       ? might be 1.0373x slower
   crypto-md5                             2.8384+-0.0509          2.7581+-0.0578         might be 1.0291x faster
   crypto-sha1                            2.4793+-0.0552    ?     2.5161+-0.0564       ? might be 1.0148x slower
   date-format-tofte                     10.1105+-0.1987          9.8553+-0.1352         might be 1.0259x faster
   date-format-xparb                      8.8825+-0.1773    ?     8.9709+-0.1812       ?
   math-cordic                            6.3703+-0.0684    ?     6.4577+-0.1055       ? might be 1.0137x slower
   math-partial-sums                      7.6012+-0.1293    ?     7.6175+-0.1011       ?
   math-spectral-norm                     2.8564+-0.0711    ?     2.8866+-0.0705       ? might be 1.0106x slower
   regexp-dna                            10.7062+-0.1282    ?    10.7601+-0.1004       ?
   string-base64                          5.3347+-0.1450          5.2579+-0.1227         might be 1.0146x faster
   string-fasta                           6.4862+-0.1604          6.4511+-0.0916       
   string-tagcloud                       11.1826+-0.2440    ?    11.3868+-0.2751       ? might be 1.0183x slower
   string-unpack-code                    20.3730+-0.3643    ?    20.7027+-0.5347       ? might be 1.0162x slower
   string-validate-input                  6.3280+-0.1449    ?     6.3823+-0.1091       ?

   &lt;arithmetic&gt; *                         6.1577+-0.0307    ?     6.1869+-0.0297       ?
   &lt;geometric&gt;                            5.0812+-0.0208    ?     5.0825+-0.0289       ?
   &lt;harmonic&gt;                             4.1863+-0.0221          4.1675+-0.0390       

                                            TipOfTree             BetterVRAlloc                                  
V8:
   crypto                                72.6790+-0.4355         72.3419+-0.4505       
   deltablue                            228.8242+-2.0552    ?   231.0917+-2.1679       ?
   earley-boyer                          92.2505+-0.3473    !    97.0999+-0.3843       ! definitely 1.0526x slower
   raytrace                              58.6995+-0.4796    ?    58.9699+-0.4908       ?
   regexp                               104.1287+-0.4657    ?   104.9266+-0.5007       ?
   richards                             207.9427+-1.3704    ^   189.9799+-1.3203       ^ definitely 1.0946x faster
   splay                                 96.5209+-0.5152         95.3950+-0.8332         might be 1.0118x faster

   &lt;arithmetic&gt;                         123.0065+-0.4590    ^   121.4007+-0.3942       ^ definitely 1.0132x faster
   &lt;geometric&gt; *                        109.4509+-0.3131        108.9284+-0.2682       
   &lt;harmonic&gt;                            98.8930+-0.2627    ?    99.0225+-0.2325       ?

                                            TipOfTree             BetterVRAlloc                                  
Kraken:
   ai-astar                             497.5357+-1.0770    ?   499.8479+-1.8509       ?
   audio-beat-detection                 192.0635+-1.4448        191.8720+-0.8279       
   audio-dft                            272.6202+-3.5519        271.3265+-2.0227       
   audio-fft                            124.5866+-0.5697        124.2436+-0.4142       
   audio-oscillator                     255.3471+-1.9788    ?   255.5191+-1.5136       ?
   imaging-darkroom                     418.8741+-0.6484    ?   419.2329+-2.7905       ?
   imaging-desaturate                   232.8519+-1.0063    ^   220.8624+-2.0278       ^ definitely 1.0543x faster
   imaging-gaussian-blur                586.1653+-0.9813        582.0832+-3.6930       
   json-parse-financial                  55.3562+-0.2220    ?    55.7427+-0.2774       ?
   json-stringify-tinderbox              68.6493+-0.2618    ?    69.0735+-0.3286       ?
   stanford-crypto-aes                  133.5733+-1.5222        133.1723+-1.8243       
   stanford-crypto-ccm                  102.3700+-0.3699        102.1013+-0.5759       
   stanford-crypto-pbkdf2               194.2358+-1.1225    ?   196.5417+-2.0086       ? might be 1.0119x slower
   stanford-crypto-sha256-iterative      72.3107+-0.3245    ^    71.6367+-0.2204       ^ definitely 1.0094x faster

   &lt;arithmetic&gt; *                       229.0386+-0.4915        228.0897+-0.6386       
   &lt;geometric&gt;                          178.9605+-0.4238        178.2923+-0.5165       
   &lt;harmonic&gt;                           139.8795+-0.3317        139.6275+-0.3821       

                                            TipOfTree             BetterVRAlloc                                  
All benchmarks:
   &lt;arithmetic&gt;                          89.9507+-0.1980    ^    89.4451+-0.2265       ^ definitely 1.0057x faster
   &lt;geometric&gt;                           23.1890+-0.0668         23.1496+-0.0756       
   &lt;harmonic&gt;                             7.3649+-0.0381          7.3327+-0.0667       

                                            TipOfTree             BetterVRAlloc                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.6428+-0.1329         53.5676+-0.1168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481932</commentid>
    <comment_count>2</comment_count>
      <attachid>110582</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 14:47:28 -0700</bug_when>
    <thetext>Created attachment 110582
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481937</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 14:51:44 -0700</bug_when>
    <thetext>Ran this for a bunch of iterations on V8 to get better significance.  And yes, it&apos;s a non-trivial improvement.



Benchmark report for V8.

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

Collected 60 samples per benchmark/VM, with 20 VM invocations per benchmark. Used 1
benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95%
confidence intervals in milliseconds.

                       TipOfTree             BetterVRAlloc                                  

crypto              72.8480+-0.1132    ^    72.1891+-0.1859       ^ definitely 1.0091x faster
deltablue          229.7648+-0.9618    ?   230.9335+-0.7912       ?
earley-boyer        92.0746+-0.2574    !    97.1430+-0.1545       ! definitely 1.0550x slower
raytrace            58.6933+-0.1451    !    59.3937+-0.1625       ! definitely 1.0119x slower
regexp             104.4100+-0.1694    ?   104.7309+-0.1666       ?
richards           208.5533+-0.5139    ^   189.0045+-0.3390       ^ definitely 1.1034x faster
splay               96.9219+-0.3767         96.0736+-0.7089       

&lt;arithmetic&gt;       123.3237+-0.1473    ^   121.3526+-0.1864       ^ definitely 1.0162x faster
&lt;geometric&gt; *      109.6712+-0.1097    ^   109.0018+-0.1606       ^ definitely 1.0061x faster
&lt;harmonic&gt;          99.0458+-0.1036    ?    99.1898+-0.1474       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481940</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 14:52:52 -0700</bug_when>
    <thetext>Attachment 110582 did not pass style-queue:

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

Source/JavaScriptCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481962</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 15:28:31 -0700</bug_when>
    <thetext>It turns out that my previous attempt at a virtual register allocator was a total bust.  I fixed it, and now we have real numbers:



Benchmark report for V8.

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

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark
iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get
microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals
in milliseconds.

                       TipOfTree             BetterVRAlloc                                  

crypto              72.9077+-0.4529    ?    73.1820+-0.3834       ?
deltablue          233.4981+-2.2990    ^   229.2700+-1.5657       ^ definitely 1.0184x faster
earley-boyer        91.4999+-0.3203    ?    91.6503+-0.4134       ?
raytrace            58.7518+-0.4181         58.5479+-0.4437       
regexp             104.2604+-0.2749        104.1496+-0.4870       
richards           207.6681+-1.7385    ^   188.0565+-0.9151       ^ definitely 1.1043x faster
splay               95.9854+-0.3932         95.5227+-0.5338       

&lt;arithmetic&gt;       123.5102+-0.5281    ^   120.0541+-0.3077       ^ definitely 1.0288x faster
&lt;geometric&gt; *      109.6144+-0.2834    ^   107.7297+-0.1889       ^ definitely 1.0175x faster
&lt;harmonic&gt;          98.9001+-0.1905    ^    98.0251+-0.1539       ^ definitely 1.0089x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481964</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 15:38:18 -0700</bug_when>
    <thetext>Updated numbers for all benchmarks:



Benchmark report for SunSpider, V8, and Kraken.

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

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark iteration per VM
invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting
benchmark execution times with 95% confidence intervals in milliseconds.

                                            TipOfTree             BetterVRAlloc                                  
SunSpider:
   3d-cube                                7.3791+-0.1438          7.3422+-0.2024       
   3d-morph                               7.6559+-0.1532    ?     7.6660+-0.1369       ?
   3d-raytrace                            7.5526+-0.1831    ?     7.6005+-0.1643       ?
   access-binary-trees                    1.6997+-0.0453    ?     1.7195+-0.0596       ? might be 1.0117x slower
   access-fannkuch                        6.4543+-0.1042          6.4251+-0.0914       
   access-nbody                           3.3612+-0.0839          3.3161+-0.0804         might be 1.0136x faster
   access-nsieve                          2.5566+-0.0616    ?     2.6244+-0.0842       ? might be 1.0265x slower
   bitops-3bit-bits-in-byte               1.7225+-0.0330    ?     1.7510+-0.0330       ? might be 1.0165x slower
   bitops-bits-in-byte                    2.7106+-0.0671    ?     2.7899+-0.0492       ? might be 1.0293x slower
   bitops-bitwise-and                     3.3565+-0.0647          3.3551+-0.1026       
   bitops-nsieve-bits                     5.4728+-0.1269    ?     5.5231+-0.1031       ?
   controlflow-recursive                  2.0593+-0.0302    ?     2.0820+-0.0449       ? might be 1.0110x slower
   crypto-aes                             6.7189+-0.1746    ?     6.7529+-0.1620       ?
   crypto-md5                             2.8141+-0.0487    ?     2.8817+-0.0505       ? might be 1.0240x slower
   crypto-sha1                            2.4218+-0.0621    ?     2.5025+-0.0589       ? might be 1.0333x slower
   date-format-tofte                     10.0579+-0.1816         10.0549+-0.1680       
   date-format-xparb                      9.4010+-0.4992    ?     9.6260+-0.4280       ? might be 1.0239x slower
   math-cordic                            6.5915+-0.1215          6.5062+-0.1217         might be 1.0131x faster
   math-partial-sums                      7.6552+-0.1328    ?     7.7737+-0.1838       ? might be 1.0155x slower
   math-spectral-norm                     2.8287+-0.0347    ?     2.8479+-0.0720       ?
   regexp-dna                            10.7310+-0.1783         10.7082+-0.1497       
   string-base64                          5.3418+-0.1218          5.3307+-0.1068       
   string-fasta                           6.4322+-0.1368    ?     6.4788+-0.2142       ?
   string-tagcloud                       11.3594+-0.1888    ?    11.3987+-0.2564       ?
   string-unpack-code                    20.4972+-0.2142    ?    20.6382+-0.3662       ?
   string-validate-input                  6.2973+-0.1110    ?     6.3350+-0.1157       ?

   &lt;arithmetic&gt; *                         6.1973+-0.0333    ?     6.2319+-0.0329       ?
   &lt;geometric&gt;                            5.0876+-0.0263    ?     5.1265+-0.0274       ?
   &lt;harmonic&gt;                             4.1650+-0.0314    ?     4.2101+-0.0321       ? might be 1.0108x slower

                                            TipOfTree             BetterVRAlloc                                  
V8:
   crypto                                73.4915+-0.5072    ^    72.5717+-0.3088       ^ definitely 1.0127x faster
   deltablue                            229.3694+-2.9698    ?   230.5546+-1.8132       ?
   earley-boyer                          91.6589+-0.2657    ?    92.8696+-1.2849       ? might be 1.0132x slower
   raytrace                              58.4779+-0.3150    ?    59.0484+-0.5281       ?
   regexp                               104.5795+-0.3130        104.2271+-0.4320       
   richards                             207.9325+-1.2140    ^   189.4965+-1.3250       ^ definitely 1.0973x faster
   splay                                 96.3336+-0.5974         95.9125+-0.5882       

   &lt;arithmetic&gt;                         123.1205+-0.4639    ^   120.6686+-0.3824       ^ definitely 1.0203x faster
   &lt;geometric&gt; *                        109.5373+-0.2146    ^   108.2105+-0.3030       ^ definitely 1.0123x faster
   &lt;harmonic&gt;                            98.9614+-0.1761    ^    98.4156+-0.2803       ^ definitely 1.0055x faster

                                            TipOfTree             BetterVRAlloc                                  
Kraken:
   ai-astar                             503.0404+-2.6460        501.6886+-4.6412       
   audio-beat-detection                 194.5291+-1.4049    ^   191.3495+-0.9404       ^ definitely 1.0166x faster
   audio-dft                            272.6498+-2.3990    ?   279.1601+-5.1765       ? might be 1.0239x slower
   audio-fft                            125.3488+-0.6055    ?   125.3593+-0.5099       ?
   audio-oscillator                     253.9799+-2.2824        253.1516+-1.7852       
   imaging-darkroom                     423.5625+-5.1567    ?   425.0566+-8.0295       ?
   imaging-desaturate                   233.2266+-1.3487        232.7642+-1.3199       
   imaging-gaussian-blur                586.1470+-0.9626    ?   587.3914+-1.0103       ?
   json-parse-financial                  55.5272+-0.1996    !    56.1811+-0.3381       ! definitely 1.0118x slower
   json-stringify-tinderbox              69.5921+-1.4267         68.9636+-0.4248       
   stanford-crypto-aes                  133.6110+-1.4540        133.2715+-1.5036       
   stanford-crypto-ccm                  102.0949+-0.4570        101.1988+-0.6843       
   stanford-crypto-pbkdf2               194.6565+-1.3833    ^   192.1962+-0.7880       ^ definitely 1.0128x faster
   stanford-crypto-sha256-iterative      72.4658+-0.2888    ^    71.5203+-0.3084       ^ definitely 1.0132x faster

   &lt;arithmetic&gt; *                       230.0308+-0.5548        229.9466+-0.9315       
   &lt;geometric&gt;                          179.6701+-0.5064        179.2885+-0.6065       
   &lt;harmonic&gt;                           140.4526+-0.5347        140.0540+-0.3782       

                                            TipOfTree             BetterVRAlloc                                  
All benchmarks:
   &lt;arithmetic&gt;                          90.2852+-0.1993         89.9141+-0.2787       
   &lt;geometric&gt;                           23.2351+-0.0815    ?    23.2761+-0.0696       ?
   &lt;harmonic&gt;                             7.3290+-0.0539    ?     7.4054+-0.0549       ? might be 1.0104x slower

                                            TipOfTree             BetterVRAlloc                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.8492+-0.1318         53.7238+-0.1173</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481967</commentid>
    <comment_count>7</comment_count>
      <attachid>110589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 15:41:43 -0700</bug_when>
    <thetext>Created attachment 110589
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481976</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 15:44:01 -0700</bug_when>
    <thetext>Attachment 110589 did not pass style-queue:

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

Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:165:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481978</commentid>
    <comment_count>9</comment_count>
      <attachid>110594</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 15:48:24 -0700</bug_when>
    <thetext>Created attachment 110594
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481980</commentid>
    <comment_count>10</comment_count>
      <attachid>110594</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-10-11 15:50:30 -0700</bug_when>
    <thetext>Comment on attachment 110594
the patch - fix style

Make sure you run it through at least the fast/js part of webkit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482039</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 16:49:55 -0700</bug_when>
    <thetext>Landed in r97197.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482142</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-11 18:36:10 -0700</bug_when>
    <thetext>This patch appears to have broken GTK builds (missing stdio.h). Build fix attempted in http://trac.webkit.org/changeset/97197.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110582</attachid>
            <date>2011-10-11 14:47:28 -0700</date>
            <delta_ts>2011-10-11 15:41:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>vralloc_patch_1.diff</filename>
            <type>text/plain</type>
            <size>14322</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcxODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMTAtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJz
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycyk6
CisgICAgICAgICogZGZnL0RGR1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTY29y
ZUJvYXJkOjpTY29yZUJvYXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjp+U2Nv
cmVCb2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2FyZDo6YWxsb2NhdGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNjb3JlQm9hcmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U2Nv
cmVCb2FyZDo6aGlnaFdhdGVybWFyayk6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2FyZDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2FyZDo6bWF4KToKKyAgICAgICAgKiB3
dGYvQml0VmVjdG9yLmNwcDoKKyAgICAgICAgKEJpdFZlY3Rvcjo6cmVzaXplT3V0T2ZMaW5lKToK
KyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Qml0
VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpxdWlja0dldCk6CisgICAgICAgIChX
VEY6OkJpdFZlY3Rvcjo6cXVpY2tTZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnF1aWNr
Q2xlYXIpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkJp
dFZlY3Rvcjo6c2V0KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6CisgICAgICAg
ICogd3RmL1BhY2tlZEludFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpQYWNrZWRJbnRWZWN0b3I6
OmdldCk6CisgICAgICAgIChXVEY6OlBhY2tlZEludFZlY3Rvcjo6c2V0KToKKwogMjAxMS0xMC0x
MSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBT
d2l0Y2ggUmVnaXN0ZXJTaXplZEJvb2xlYW4vZGZnQ29udmVydEpTVmFsdWVUb0ludDMyIHJldHVy
biB0eXBlIHRvIHNpemVfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk3MTc5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYg
KzYwLDkgQEAgcHVibGljOgogICAgICAgICAsIG1fZ2xvYmFsUmVzb2x2ZU51bWJlcigwKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CisgICAgICAgIAorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCisgICAgICAgICAg
ICBtX3ByZXNlcnZlZFZhcnMuc2V0KGkpOwogICAgIH0KIAogICAgIC8vIFBhcnNlIGEgZnVsbCBD
b2RlQmxvY2sgb2YgYnl0ZWNvZGUuCkBAIC0xMzcsNyArMTQwLDcgQEAgcHJpdmF0ZToKIAogICAg
ICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3Ms
CiAgICAgICAgIC8vIGV4cGFuZCBtX3ByZXNlcnZlZFZhcnMgdG8gY292ZXIgdGhlc2UuCi0gICAg
ICAgIG1fcHJlc2VydmVkVmFycyA9IHN0ZDo6bWF4KG1fcHJlc2VydmVkVmFycywgb3BlcmFuZCAr
IDEpOworICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwogICAgICAgICAKICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgIApAQCAtNjE3LDEwICs2MjAsMTAgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKICAgICAvLyBUaGUgbnVtYmVyIG9m
IGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KICAgICB1
bnNpZ25lZCBtX251bUxvY2FsczsKLSAgICAvLyBUaGUgbnVtYmVyIG9mIHJlZ2lzdGVycyB3ZSBu
ZWVkIHRvIHByZXNlcnZlIGFjcm9zcyBCYXNpY0Jsb2NrIGJvdW5kYXJpZXM7Ci0gICAgLy8gdHlw
aWNhbGx5IGVxdWFsIHRvIHRoZSBudW1iZXIgdmFycywgYnV0IHdlIGV4cGFuZCB0aGlzIHRvIGNv
dmVyIGFsbAorICAgIC8vIFRoZSBzZXQgb2YgcmVnaXN0ZXJzIHdlIG5lZWQgdG8gcHJlc2VydmUg
YWNyb3NzIEJhc2ljQmxvY2sgYm91bmRhcmllczsKKyAgICAvLyB0eXBpY2FsbHkgZXF1YWwgdG8g
dGhlIHNldCBvZiB2YXJzLCBidXQgd2UgZXhwYW5kIHRoaXMgdG8gY292ZXIgYWxsCiAgICAgLy8g
dGVtcG9yYXJpZXMgdGhhdCBwZXJzaXN0IGFjcm9zcyBibG9ja3MgKGR1ZXMgdG8gPzosICYmLCB8
fCwgZXRjKS4KLSAgICB1bnNpZ25lZCBtX3ByZXNlcnZlZFZhcnM7CisgICAgQml0VmVjdG9yIG1f
cHJlc2VydmVkVmFyczsKICAgICAvLyBUaGUgbnVtYmVyIG9mIHNsb3RzIChpbiB1bml0cyBvZiBz
aXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8KICAgICAvLyBwcmVhbGxvY2F0ZSBmb3Ig
Y2FsbHMgZW1hbmF0aW5nIGZyb20gdGhpcyBmcmFtZS4gVGhpcyBpbmNsdWRlcyB0aGUKICAgICAv
LyBzaXplIG9mIHRoZSBDYWxsRnJhbWUsIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBsZWFmIGZ1bmN0
aW9uLiAgKEkuZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDk3MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1
ZGUgIlByZWRpY3Rpb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCisjaW5j
bHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTI5MSw3
ICsyOTIsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0
YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1
cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7Ci0gICAgdW5zaWdu
ZWQgbV9wcmVzZXJ2ZWRWYXJzOworICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7CiAgICAg
dW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHBy
aXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAJKHJldmlzaW9uIDk3MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
YWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2Fs
cyBhbmQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgICAgIC8vIGZvciB0aGUgZnVuY3Rpb24g
KGFuZCBjaGVja2VkIGZvciBvbiBlbnRyeSkuIFNpbmNlIHdlIHBlcmZvcm0gYSBuZXcgYW5kCiAg
ICAgICAgIC8vIGRpZmZlcmVudCBhbGxvY2F0aW9uIG9mIHRlbXBvcmFyaWVzLCBtb3JlIHJlZ2lz
dGVycyBtYXkgbm93IGJlIHJlcXVpcmVkLgotICAgICAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3Rl
cnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENvdW50KCkgKyBtX2dyYXBoLm1fcHJlc2VydmVkVmFy
cyArIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90czsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlUmVn
aXN0ZXJzID0gc2NvcmVCb2FyZC5oaWdoV2F0ZXJtYXJrKCkgKyBtX2dyYXBoLm1fcGFyYW1ldGVy
U2xvdHM7CiAgICAgICAgIGlmICgodW5zaWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJzKQogICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiA5NzE3OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlIDxkZmcvREZH
R3JhcGguaD4KKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MiwyMyArNDMsMjcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gYW5vdGhlciBub2RlLgogY2xh
c3MgU2NvcmVCb2FyZCB7CiBwdWJsaWM6Ci0gICAgU2NvcmVCb2FyZChHcmFwaCYgZ3JhcGgsIHVp
bnQzMl90IGZpcnN0VGVtcG9yYXJ5KQorICAgIFNjb3JlQm9hcmQoR3JhcGgmIGdyYXBoLCBjb25z
dCBCaXRWZWN0b3ImIHVzZWRWYXJzKQogICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCi0gICAgICAg
ICwgbV9maXJzdFRlbXBvcmFyeShmaXJzdFRlbXBvcmFyeSkKKyAgICAgICAgLCBtX2ZpcnN0VGVt
cG9yYXJ5KDApCiAgICAgeworICAgICAgICBtX3VzZWQuZmlsbCgwLCB1c2VkVmFycy5zaXplKCkp
OworICAgICAgICBtX2ZyZWUucmVzZXJ2ZUNhcGFjaXR5KHVzZWRWYXJzLnNpemUoKSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXNlZFZhcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICh1c2VkVmFycy5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICBtX2ZpcnN0VGVt
cG9yYXJ5ID0gaSArIDE7CisgICAgICAgICAgICAgICAgbV91c2VkW2ldID0gbWF4KCk7IC8vIFRo
aXMgaXMgbW9zdGx5IGZvciBkZWJ1Z2dpbmcgYW5kIHNhbml0eS4KKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIG1fZnJlZS5hcHBlbmQoaSk7CisgICAgICAgIH0KICAgICB9CiAK
ICNpZiBFTkFCTEUoREZHX0NPTlNJU1RFTkNZX0NIRUNLKQogICAgIH5TY29yZUJvYXJkKCkKICAg
ICB7Ci0gICAgICAgIC8vIEV2ZXJ5IFZpcnR1YWxSZWdpc3RlciB0aGF0IHdhcyBhbGxvY2F0ZWQg
c2hvdWxkIG5vdyBiZSBmcmVlLgotICAgICAgICBBU1NFUlQobV91c2VkLnNpemUoKSA9PSBtX2Zy
ZWUuc2l6ZSgpKTsKLSAgICAgICAgLy8gRXZlcnkgZW50cnkgaW4gdGhlIHVzZWQgbGlzdCBzaG91
bGQgYmUgYXZhaWxhYmxlIGluIHRoZSBmcmVlIGxpc3QuCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV91c2VkLnNpemUoKTsgKytpKQotICAgICAgICAgICAgQVNTRVJUKG1fZnJlZS5j
b250YWlucyhpKSk7CiAgICAgICAgIC8vIEZvciBldmVyeSBlbnRyeSBpbiB0aGUgdXNlZCBsaXN0
IHRoZSB1c2UgY291bnQgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgc2hvdWxkIGJlIHplcm8uCiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmVlLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgQVNTRVJUKCFtX3VzZWRbaV0pOworICAgICAgICAgICAgQVNTRVJUKCFtX3VzZWRbaV0g
fHwgbV91c2VkW2ldID09IG1heCgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNzEsMTMgKzc2LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZnJlZS5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICAvLyBVc2UgY291bnQgbXVzdCBoYXZlIGhpdCB6ZXJvIGZvciBpdCB0byBoYXZlIGJlZW4gYWRk
ZWQgdG8gdGhlIGZyZWUgbGlzdCEKICAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2luZGV4XSk7
Ci0gICAgICAgICAgICByZXR1cm4gKFZpcnR1YWxSZWdpc3RlcikobV9maXJzdFRlbXBvcmFyeSAr
IGluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiAoVmlydHVhbFJlZ2lzdGVyKWluZGV4OwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gQWxsb2NhdGUgYSBuZXcgVmlydHVhbFJlZ2lzdGVyLCBhbmQg
YWRkIGEgY29ycmVzcG9uZGluZyBlbnRyeSB0byBtX3VzZWQuCi0gICAgICAgIHNpemVfdCBuZXh0
ID0gYWxsb2NhdGVkQ291bnQoKTsKKyAgICAgICAgc2l6ZV90IG5leHQgPSBtX3VzZWQuc2l6ZSgp
OwogICAgICAgICBtX3VzZWQuYXBwZW5kKDApOwotICAgICAgICByZXR1cm4gKFZpcnR1YWxSZWdp
c3RlcikobV9maXJzdFRlbXBvcmFyeSArIG5leHQpOworICAgICAgICByZXR1cm4gKFZpcnR1YWxS
ZWdpc3RlciluZXh0OwogICAgIH0KIAogICAgIC8vIEluY3JlbWVudCB0aGUgdXNlY291bnQgZm9y
IHRoZSBWaXJ0dWFsUmVnc2l0ZXIgYXNzb2NpYXRlZCB3aXRoICdjaGlsZCcsCkBAIC04OSw3ICs5
NCw4IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBGaW5kIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIG51
bWJlciBmb3IgdGhpcyBjaGlsZCwgaW5jcmVtZW50IGl0cyB1c2UgY291bnQuCiAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2NoaWxkXTsKLSAgICAgICAgdWludDMyX3QgaW5kZXggPSBub2Rl
LnZpcnR1YWxSZWdpc3RlcigpIC0gbV9maXJzdFRlbXBvcmFyeTsKKyAgICAgICAgdWludDMyX3Qg
aW5kZXggPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQobV91c2VkW2lu
ZGV4XSAhPSBtYXgoKSk7CiAgICAgICAgIGlmIChub2RlLnJlZkNvdW50KCkgPT0gKyttX3VzZWRb
aW5kZXhdKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlIGNvdW50IGluIHRoZSBzY29yZWJv
YXJkIHJlYWNoZXMgdGhlIHVzZSBjb3VudCBmb3IgdGhlIG5vZGUsCiAgICAgICAgICAgICAvLyB0
aGVuIHRoaXMgd2FzIGl0cyBsYXN0IHVzZTsgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgaXMgbm93IGZy
ZWUuCkBAIC05OSwyNyArMTA1LDMxIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAg
IHVuc2lnbmVkIGFsbG9jYXRlZENvdW50KCkKKyAgICB1bnNpZ25lZCBoaWdoV2F0ZXJtYXJrKCkK
ICAgICB7Ci0gICAgICAgIC8vIG1fdXNlZCBjb250YWlucyBhbiBlbnRyeSBmb3IgZXZlcnkgYWxs
b2NhdGVkIFZpcnR1YWxSZWdpc3Rlci4KICAgICAgICAgcmV0dXJuIG1fdXNlZC5zaXplKCk7CiAg
ICAgfQotCisgICAgCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcCgpCiAgICAgewogICAg
ICAgICBwcmludGYoIiAgICBVU0VEOiBbICIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV91c2VkLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZnJlZS5jb250
YWlucyhpKSkKLSAgICAgICAgICAgICAgICBwcmludGYoIiVkOiVkICIsIG1fZmlyc3RUZW1wb3Jh
cnkgKyBpLCBtX3VzZWRbaV0pOworICAgICAgICAgICAgaWYgKCFtX2ZyZWUuY29udGFpbnMoaSkp
IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVkOiIsIGkpOworICAgICAgICAgICAgICAgIGlm
IChtX3VzZWRbaV0gPT0gbWF4KCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigibG9jYWwg
Iik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVk
ICIsIG1fdXNlZFtpXSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRm
KCJdXG4iKTsKIAogICAgICAgICBwcmludGYoIiAgICBGUkVFOiBbICIpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91c2VkLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAobV9mcmVlLmNvbnRhaW5zKGkpKSB7CisgICAgICAgICAgICBpZiAobV9mcmVlLmNvbnRhaW5z
KGkpICYmIG1fdXNlZFtpXSAhPSBtYXgoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV91
c2VkW2ldKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVkICIsIG1fZmlyc3RUZW1wb3Jhcnkg
KyBpKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVkICIsIGkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIHByaW50ZigiXVxuIik7CkBAIC0xMjgsNiArMTM4LDggQEAgcHVi
bGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgc3RhdGljIHVpbnQzMl90IG1heCgpIHsgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAogICAgIC8v
IFRoZSBncmFwaCwgc28gd2UgY2FuIGdldCByZWZDb3VudHMgZm9yIG5vZGVzLCB0byBkZXRlcm1p
bmUgd2hlbiB2YWx1ZXMgYXJlIGRlYWQuCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgLy8gVGhl
IGZpcnN0IFZpcnR1YWxSZWdzaXRlciB0byBiZSB1c2VkIGFzIGEgdGVtcG9yYXJ5LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmNwcAkocmV2aXNpb24gOTcxNzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDkgKzk0LDE5IEBAIHZvaWQgQml0VmVjdG9yOjpyZXNpemVPdXRPZkxpbmUoc2l6ZV90
IG4KIHsKICAgICBBU1NFUlQobnVtQml0cyA+IG1heElubGluZUJpdHMoKSk7CiAgICAgT3V0T2ZM
aW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShudW1CaXRz
KTsKLSAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBiaXRzKCksIGJ5dGVDb3Vu
dChzdGQ6Om1pbihzaXplKCksIG51bUJpdHMpKSk7Ci0gICAgaWYgKCFpc0lubGluZSgpKQorICAg
IGlmIChpc0lubGluZSgpKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGUg
Yml0cyBhcmUgemVybyBpbiBjYXNlIHdlIGRvIGEgbm8tb3AgcmVzaXplLgorICAgICAgICAqbmV3
T3V0T2ZMaW5lQml0cy0+Yml0cygpID0gbV9iaXRzT3JQb2ludGVyICYgfihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG51bUJpdHMgPiBzaXplKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGROdW1Xb3JkcyA9
IG91dE9mTGluZUJpdHMoKS0+bnVtV29yZHMoKTsKKyAgICAgICAgICAgIHNpemVfdCBuZXdOdW1X
b3JkcyA9IG5ld091dE9mTGluZUJpdHMtPm51bVdvcmRzKCk7CisgICAgICAgICAgICBtZW1jcHko
bmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgb2xkTnVt
V29yZHMgKiBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgIG1lbXNldChuZXdPdXRPZkxpbmVC
aXRzLT5iaXRzKCkgKyBvbGROdW1Xb3JkcywgMCwgKG5ld051bVdvcmRzIC0gb2xkTnVtV29yZHMp
ICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWVtY3B5KG5l
d091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIG5ld091dE9m
TGluZUJpdHMtPm51bVdvcmRzKCkgKiBzaXplb2Yodm9pZCopKTsKICAgICAgICAgT3V0T2ZMaW5l
Qml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgIH0KICAgICBtX2JpdHNPclBvaW50
ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiA5NzE3OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDE1ICszNiwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIHRvIGEgc2luZ2xlIGNodW5rIG9m
IG91dC1vZi1saW5lIGFsbG9jYXRlZCBzdG9yYWdlIHRvIHN0b3JlIGFuIGFyYml0cmFyeSBudW1i
ZXIKIC8vIG9mIGJpdHMuCiAvLwotLy8gLSBUaGUgYml0dmVjdG9yIG5lZWRzIHRvIGJlIHJlc2l6
ZWQgbWFudWFsbHkgKGp1c3QgY2FsbCBlbnN1cmVTaXplKCkpLgotLy8KIC8vIC0gVGhlIGJpdHZl
Y3RvciByZW1lbWJlcnMgdGhlIGJvdW5kIG9mIGhvdyBtYW55IGJpdHMgY2FuIGJlIHN0b3JlZCwg
YnV0IHRoaXMKIC8vICAgbWF5IGJlIHNsaWdodGx5IGdyZWF0ZXIgKGJ5IGFzIG11Y2ggYXMgc29t
ZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zdGFudCkKIC8vICAgdGhhbiB0aGUgbGFzdCBhcmd1bWVu
dCBwYXNzZWQgdG8gZW5zdXJlU2l6ZSgpLgogLy8KKy8vIC0gVGhlIGJpdHZlY3RvciBjYW4gcmVz
aXplIGl0c2VsZiBhdXRvbWF0aWNhbGx5IChzZXQsIGNsZWFyLCBnZXQpIG9yIGNhbiBiZSB1c2Vk
CisvLyAgIGluIGEgbWFudWFsIG1vZGUsIHdoaWNoIGlzIGZhc3RlciAocXVpY2tTZXQsIHF1aWNr
Q2xlYXIsIHF1aWNrR2V0LCBlbnN1cmVTaXplKS4KKy8vCiAvLyAtIEFjY2Vzc2VzIEFTU0VSVCB0
aGF0IHlvdSBhcmUgd2l0aGluIGJvdW5kcy4KIC8vCi0vLyAtIEJpdHMgYXJlIG5vdCBhdXRvbWF0
aWNhbGx5IGluaXRpYWxpemVkIHRvIHplcm8uCisvLyAtIEJpdHMgYXJlIGF1dG9tYXRpY2FsbHkg
aW5pdGlhbGl6ZWQgdG8gemVyby4KIC8vCiAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBCaXRW
ZWN0b3IgY2xhc3MgbWF5IG5vdCBiZSB0aGUgZmFzdGVzdCBhcm91bmQsIHNpbmNlCiAvLyBpdCBk
b2VzIGNvbmRpdGlvbmFscyBvbiBldmVyeSBnZXQvc2V0L2NsZWFyLiBCdXQgaXQgaXMgZ3JlYXQg
aWYgeW91IG5lZWQgdG8KQEAgLTU4LDYgKzU5LDEyIEBAIHB1YmxpYzogCiAgICAgewogICAgIH0K
ICAgICAKKyAgICBleHBsaWNpdCBCaXRWZWN0b3Ioc2l6ZV90IG51bUJpdHMpCisgICAgICAgIDog
bV9iaXRzT3JQb2ludGVyKG1ha2VJbmxpbmVCaXRzKDApKQorICAgIHsKKyAgICAgICAgZW5zdXJl
U2l6ZShudW1CaXRzKTsKKyAgICB9CisgICAgCiAgICAgQml0VmVjdG9yKGNvbnN0IEJpdFZlY3Rv
ciYgb3RoZXIpOwogICAgIAogICAgIH5CaXRWZWN0b3IoKQpAQCAtODgsMjQgKzk1LDUyIEBAIHB1
YmxpYzogCiAgICAgCiAgICAgdm9pZCBjbGVhckFsbCgpOwogCi0gICAgYm9vbCBnZXQoc2l6ZV90
IGJpdCkgY29uc3QKKyAgICBib29sIHF1aWNrR2V0KHNpemVfdCBiaXQpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoYml0IDwgc2l6ZSgpKTsKICAgICAgICAgcmV0dXJuICEhKGJpdHMoKVti
aXQgLyBiaXRzSW5Qb2ludGVyKCldICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJp
dCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXQo
c2l6ZV90IGJpdCkKKyAgICB2b2lkIHF1aWNrU2V0KHNpemVfdCBiaXQpCiAgICAgewogICAgICAg
ICBBU1NFUlQoYml0IDwgc2l6ZSgpKTsKICAgICAgICAgYml0cygpW2JpdCAvIGJpdHNJblBvaW50
ZXIoKV0gfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2lu
dGVyKCkgLSAxKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFyKHNpemVfdCBiaXQpCisg
ICAgdm9pZCBxdWlja0NsZWFyKHNpemVfdCBiaXQpCiAgICAgewogICAgICAgICBBU1NFUlQoYml0
IDwgc2l6ZSgpKTsKICAgICAgICAgYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJj0gfihz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkp
KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBxdWlja1NldChzaXplX3QgYml0LCBib29sIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgcXVpY2tTZXQoYml0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcXVpY2tDbGVhcihiaXQpOworICAgIH0KKyAgICAK
KyAgICBib29sIGdldChzaXplX3QgYml0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJpdCA+
PSBzaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBxdWlj
a0dldChiaXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgYml0KQorICAgIHsK
KyAgICAgICAgZW5zdXJlU2l6ZShiaXQgKyAxKTsKKyAgICAgICAgcXVpY2tTZXQoYml0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjbGVhcihzaXplX3QgYml0KQorICAgIHsKKyAgICAgICAgaWYg
KGJpdCA+PSBzaXplKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHF1aWNrQ2xlYXIo
Yml0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGFja2VkSW50VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYWNrZWRJbnRWZWN0b3IuaAkocmV2aXNpb24gOTcxNzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IDA7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgc3ViSW5kZXggPSAwOyBzdWJJbmRleCA8IGJpdENvdW50OyArK3N1YkluZGV4
KSB7CiAgICAgICAgICAgICByZXN1bHQgPDw9IDE7Ci0gICAgICAgICAgICByZXN1bHQgfD0gKG1f
Yml0cy5nZXQoaW5kZXggKiBiaXRDb3VudCArIHN1YkluZGV4KSA/IDEgOiAwKTsKKyAgICAgICAg
ICAgIHJlc3VsdCB8PSAobV9iaXRzLnF1aWNrR2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRl
eCkgPyAxIDogMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHJl
c3VsdCk7CiAgICAgfQpAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCgo
bXlWYWx1ZSAmIG1hc2soKSkgPT0gbXlWYWx1ZSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIHN1YkluZGV4ID0gYml0Q291bnQ7IHN1YkluZGV4LS0gPiAwOykgewotICAgICAgICAg
ICAgbV9iaXRzLnNldChpbmRleCAqIGJpdENvdW50ICsgc3ViSW5kZXgsICEhKG15VmFsdWUgJiAx
KSk7CisgICAgICAgICAgICBtX2JpdHMucXVpY2tTZXQoaW5kZXggKiBiaXRDb3VudCArIHN1Yklu
ZGV4LCAhIShteVZhbHVlICYgMSkpOwogICAgICAgICAgICAgbXlWYWx1ZSA+Pj0gMTsKICAgICAg
ICAgfQogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110589</attachid>
            <date>2011-10-11 15:41:43 -0700</date>
            <delta_ts>2011-10-11 15:48:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>vralloc_patch_2.diff</filename>
            <type>text/plain</type>
            <size>21137</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcxODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMTAtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGJlIG1vcmUgYWdncmVzc2l2ZSBp
bgorICAgICAgICByZXVzaW5nIHRlbXBvcmFyeSBzbG90cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIDEuMiUgd2luIG9uIFY4LCBuZXV0cmFs
IGVsc2V3aGVyZS4gVGhlIHdpbiBpcyBwcm9iYWJseSBiZWNhdXNlIGl0CisgICAgICAgIGluY3Jl
YXNlcyBwcmVjaXNpb24gb2YgR0MgY29uc2VydmF0aXZlIHNjYW5zLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyByZXF1aXJlZCBtYWtpbmcgdGhlIERGRzo6U2NvcmVCb2FyZCBvcGVyYXRlIG92ZXIg
YSBiaXR2ZWN0b3IKKyAgICAgICAgb2YgcHJlc2VydmVkIHZhcmlhYmxlcywgcmF0aGVyIHRoYW4g
anVzdCBhIHByZXNlcnZlZCB2YXJpYWJsZQorICAgICAgICB0aHJlc2hvbGQuIFRvIGRvIHRoaXMs
IEkgaW1wcm92ZWQgdGhlIFdURjo6Qml0VmVjdG9yIGNsYXNzIHRvIG1ha2UKKyAgICAgICAgaXQg
bW9yZSB1c2VyLWZyaWVuZGx5LiBJdCBzdGlsbCByZXRhaW5zIGFsbCBwcmV2aW91cyBmdW5jdGlv
bmFsaXR5LgorICAgICAgICBBbHNvIG1hZGUgY2hhbmdlcyB0byBQYWNrZWRJbnRWZWN0b3IgdG8g
YWNjb21vZGF0ZSB0aG9zZSBjaGFuZ2VzLgorICAgICAgICBGaW5hbGx5LCB0aGlzIGFkZHMgbW9y
ZSBkZWJ1Z2dpbmcgdG8gdGhlIHZpcnR1YWwgcmVnaXN0ZXIgYWxsb2NhdG9yCisgICAgICAgIGFu
ZCB0byB0aGUgT1NSIGV4aXQgY29kZSwgYXMgdGhpcyB3YXMgbmVjZXNzYXJ5IHRvIHRyYWNrIGRv
d24gYnVncworICAgICAgICBpbiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBwYXRjaC4KKwor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjphbGxvY2F0ZVZpcnR1YWxSZWdp
c3RlcnMpOgorICAgICAgICAqIGRmZy9ERkdTY29yZUJvYXJkLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U2NvcmVCb2FyZDo6U2NvcmVCb2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2Fy
ZDo6flNjb3JlQm9hcmQpOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9hcmQ6OmFsbG9jYXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjp1c2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNjb3JlQm9hcmQ6OmhpZ2hXYXRlcm1hcmspOgorICAgICAgICAoSlNDOjpERkc6OlNjb3Jl
Qm9hcmQ6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9hcmQ6Om1heCk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1
ZVJlY292ZXJ5OjpkdW1wKToKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmNwcDoKKyAgICAgICAg
KFdURjo6Qml0VmVjdG9yOjpzZXRTbG93KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpyZXNp
emVPdXRPZkxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmR1bXApOgorICAgICAgICAq
IHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpCaXRWZWN0b3IpOgor
ICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6cXVpY2tHZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnF1aWNrU2V0KToKKyAg
ICAgICAgKFdURjo6Qml0VmVjdG9yOjpxdWlja0NsZWFyKToKKyAgICAgICAgKFdURjo6Qml0VmVj
dG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldCk6CisgICAgICAgIChXVEY6
OkJpdFZlY3Rvcjo6Y2xlYXIpOgorICAgICAgICAqIHd0Zi9QYWNrZWRJbnRWZWN0b3IuaDoKKyAg
ICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJ
bnRWZWN0b3I6OnNldCk6CisKIDIwMTEtMTAtMTEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFyYWNs
b3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNoIFJlZ2lzdGVyU2l6ZWRCb29sZWFuL2Rm
Z0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiByZXR1cm4gdHlwZSB0byBzaXplX3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biA5NzE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2dsb2JhbFJlc29sdmVOdW1iZXIoMCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Byb2ZpbGVk
QmxvY2spOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2RlQmxvY2st
Pm1fbnVtVmFyczsgKytpKQorICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChpKTsKICAg
ICB9CiAKICAgICAvLyBQYXJzZSBhIGZ1bGwgQ29kZUJsb2NrIG9mIGJ5dGVjb2RlLgpAQCAtMTM3
LDcgKzE0MCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRl
bXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLAogICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2
ZWRWYXJzIHRvIGNvdmVyIHRoZXNlLgotICAgICAgICBtX3ByZXNlcnZlZFZhcnMgPSBzdGQ6Om1h
eChtX3ByZXNlcnZlZFZhcnMsIG9wZXJhbmQgKyAxKTsKKyAgICAgICAgbV9wcmVzZXJ2ZWRWYXJz
LnNldChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAg
ICAKQEAgLTYxNywxMCArNjIwLDEwIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1
bWVudHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jhcmllcykg
dXNlZCBpbiB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHM7Ci0gICAgLy8g
VGhlIG51bWJlciBvZiByZWdpc3RlcnMgd2UgbmVlZCB0byBwcmVzZXJ2ZSBhY3Jvc3MgQmFzaWNC
bG9jayBib3VuZGFyaWVzOwotICAgIC8vIHR5cGljYWxseSBlcXVhbCB0byB0aGUgbnVtYmVyIHZh
cnMsIGJ1dCB3ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwKKyAgICAvLyBUaGUgc2V0IG9mIHJl
Z2lzdGVycyB3ZSBuZWVkIHRvIHByZXNlcnZlIGFjcm9zcyBCYXNpY0Jsb2NrIGJvdW5kYXJpZXM7
CisgICAgLy8gdHlwaWNhbGx5IGVxdWFsIHRvIHRoZSBzZXQgb2YgdmFycywgYnV0IHdlIGV4cGFu
ZCB0aGlzIHRvIGNvdmVyIGFsbAogICAgIC8vIHRlbXBvcmFyaWVzIHRoYXQgcGVyc2lzdCBhY3Jv
c3MgYmxvY2tzIChkdWVzIHRvID86LCAmJiwgfHwsIGV0YykuCi0gICAgdW5zaWduZWQgbV9wcmVz
ZXJ2ZWRWYXJzOworICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7CiAgICAgLy8gVGhlIG51
bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVk
IHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGNhbGxzIGVtYW5hdGluZyBmcm9tIHRoaXMgZnJh
bWUuIFRoaXMgaW5jbHVkZXMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0aGUgQ2FsbEZyYW1lLCBvbmx5
IGlmIHRoaXMgaXMgbm90IGEgbGVhZiBmdW5jdGlvbi4gIChJLmUuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NzE3OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0yOTEsNyArMjkyLDcgQEAgcHVibGljOgogICAgIFNlZ21l
bnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsK
ICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhLCA4PiBtX3N0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhOwotICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICBCaXRW
ZWN0b3IgbV9wcmVzZXJ2ZWRWYXJzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVu
c2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk3MTc5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9T
UgogICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwogCiAjaWYgRU5BQkxFKERGR19ERUJVR19W
RVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkIChiYyMl
dSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0Lm1f
Ynl0ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQoKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJPU1Ig
ZXhpdCBmb3IgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIChpbnQpZXhp
dC5tX25vZGVJbmRleCwgZXhpdC5tX2J5dGVjb2RlSW5kZXgsIGRlYnVnT2Zmc2V0KCkpOwogICAg
IGV4aXQuZHVtcChzdGRlcnIpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19WRVJCT1NFX1NQRUNV
TEFUSU9OX0ZBSUxVUkUpCkBAIC0xNjEsNiArMTYxLDIzIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4
aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAgICAgfQogICAgIH0KICAgICAKKyNpZiBFTkFCTEUo
REZHX0RFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsIiAgIik7CisgICAgaWYgKG51
bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlBvaXNvbmVkPSV1ICIsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICBp
ZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKQorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRpc3BsYWNlZD0ldSAiLCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMp
OworICAgIGlmIChoYXZlVW5ib3hlZEludDMycykKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJV
bmJveGVkSW50MzIgIik7CisgICAgaWYgKGhhdmVGUFJzKQorICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkZQUiAiKTsKKyAgICBpZiAoaGF2ZUNvbnN0YW50cykKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDb25zdGFudHMgIik7CisgICAgaWYgKGhhdmVVbmRlZmluZWQpCisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiVW5kZWZpbmVkICIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICIpOworI2Vu
ZGlmCisgICAgCiAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyAr
IChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpKTsKIAog
ICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFi
bGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCkBAIC00ODUsNyArNTAyLDcgQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEp
OwogCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAi
ICAgLT4gJXBcbiIsIGp1bXBUYXJnZXQpOworICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXBcbiIs
IGp1bXBUYXJnZXQpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTcxNzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAyLDYg
KzE0MDIsMTEgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFsbG9jYXRlVmlydHVhbFJlZ2lz
dGVycygpCiAgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCJQcmVzZXJ2ZWQgdmFyczogIik7CisgICAgICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJz
LmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCiAgICAgICAgIFNj
b3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBoLCBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyk7CiAg
ICAgICAgIHVuc2lnbmVkIHNpemVFeGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3Mu
bGFzdCgpLT5lbmQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZUV4Y2x1ZGlu
Z1BoaU5vZGVzOyArK2kpIHsKQEAgLTE0NDAsOSArMTQ0NSwxMiBAQCBwcml2YXRlOgogICAgICAg
ICAvLyAnbV9udW1DYWxsZWVSZWdpc3RlcnMnIGlzIHRoZSBudW1iZXIgb2YgbG9jYWxzIGFuZCB0
ZW1wb3JhcmllcyBhbGxvY2F0ZWQKICAgICAgICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNo
ZWNrZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKICAgICAgICAg
Ly8gZGlmZmVyZW50IGFsbG9jYXRpb24gb2YgdGVtcG9yYXJpZXMsIG1vcmUgcmVnaXN0ZXJzIG1h
eSBub3cgYmUgcmVxdWlyZWQuCi0gICAgICAgIHVuc2lnbmVkIGNhbGxlZVJlZ2lzdGVycyA9IHNj
b3JlQm9hcmQuYWxsb2NhdGVkQ291bnQoKSArIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzICsgbV9n
cmFwaC5tX3BhcmFtZXRlclNsb3RzOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMg
PSBzY29yZUJvYXJkLmhpZ2hXYXRlcm1hcmsoKSArIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90czsK
ICAgICAgICAgaWYgKCh1bnNpZ25lZCltX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMg
PCBjYWxsZWVSZWdpc3RlcnMpCiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgPSBjYWxsZWVSZWdpc3RlcnM7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NF
KQorICAgICAgICBwcmludGYoIk51bSBjYWxsZWUgcmVnaXN0ZXJzOiAldVxuIiwgY2FsbGVlUmVn
aXN0ZXJzKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiA5NzE3
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
IDxkZmcvREZHR3JhcGguaD4KKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00Miwy
MyArNDMsMjcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gYW5vdGhlciBu
b2RlLgogY2xhc3MgU2NvcmVCb2FyZCB7CiBwdWJsaWM6Ci0gICAgU2NvcmVCb2FyZChHcmFwaCYg
Z3JhcGgsIHVpbnQzMl90IGZpcnN0VGVtcG9yYXJ5KQorICAgIFNjb3JlQm9hcmQoR3JhcGgmIGdy
YXBoLCBjb25zdCBCaXRWZWN0b3ImIHVzZWRWYXJzKQogICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgp
Ci0gICAgICAgICwgbV9maXJzdFRlbXBvcmFyeShmaXJzdFRlbXBvcmFyeSkKKyAgICAgICAgLCBt
X2hpZ2hXYXRlcm1hcmsoMCkKICAgICB7CisgICAgICAgIG1fdXNlZC5maWxsKDAsIHVzZWRWYXJz
LnNpemUoKSk7CisgICAgICAgIG1fZnJlZS5yZXNlcnZlQ2FwYWNpdHkodXNlZFZhcnMuc2l6ZSgp
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHVzZWRWYXJzLnNpemUoKTsgaS0tID4gMDspIHsK
KyAgICAgICAgICAgIGlmICh1c2VkVmFycy5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICBtX3Vz
ZWRbaV0gPSBtYXgoKTsgLy8gVGhpcyBpcyBtb3N0bHkgZm9yIGRlYnVnZ2luZyBhbmQgc2FuaXR5
LgorICAgICAgICAgICAgICAgIG1faGlnaFdhdGVybWFyayA9IHN0ZDo6bWF4KG1faGlnaFdhdGVy
bWFyaywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpICsgMSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBtX2ZyZWUuYXBwZW5kKGkpOworICAgICAgICB9CiAgICAgfQogCiAj
aWYgRU5BQkxFKERGR19DT05TSVNURU5DWV9DSEVDSykKICAgICB+U2NvcmVCb2FyZCgpCiAgICAg
ewotICAgICAgICAvLyBFdmVyeSBWaXJ0dWFsUmVnaXN0ZXIgdGhhdCB3YXMgYWxsb2NhdGVkIHNo
b3VsZCBub3cgYmUgZnJlZS4KLSAgICAgICAgQVNTRVJUKG1fdXNlZC5zaXplKCkgPT0gbV9mcmVl
LnNpemUoKSk7Ci0gICAgICAgIC8vIEV2ZXJ5IGVudHJ5IGluIHRoZSB1c2VkIGxpc3Qgc2hvdWxk
IGJlIGF2YWlsYWJsZSBpbiB0aGUgZnJlZSBsaXN0LgotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdXNlZC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIEFTU0VSVChtX2ZyZWUuY29u
dGFpbnMoaSkpOwogICAgICAgICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhlIHVzZWQgbGlzdCB0
aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIHNob3VsZCBiZSB6ZXJvLgogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJlZS5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIEFTU0VSVCghbV91c2VkW2ldKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2ldIHx8
IG1fdXNlZFtpXSA9PSBtYXgoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTcxLDEzICs3NiwxNSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ZyZWUucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAg
Ly8gVXNlIGNvdW50IG11c3QgaGF2ZSBoaXQgemVybyBmb3IgaXQgdG8gaGF2ZSBiZWVuIGFkZGVk
IHRvIHRoZSBmcmVlIGxpc3QhCiAgICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFtpbmRleF0pOwot
ICAgICAgICAgICAgcmV0dXJuIChWaXJ0dWFsUmVnaXN0ZXIpKG1fZmlyc3RUZW1wb3JhcnkgKyBp
bmRleCk7CisgICAgICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChtX2hpZ2hXYXRl
cm1hcmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgKyAxKTsKKyAgICAgICAgICAgIHJl
dHVybiAoVmlydHVhbFJlZ2lzdGVyKWluZGV4OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQWxs
b2NhdGUgYSBuZXcgVmlydHVhbFJlZ2lzdGVyLCBhbmQgYWRkIGEgY29ycmVzcG9uZGluZyBlbnRy
eSB0byBtX3VzZWQuCi0gICAgICAgIHNpemVfdCBuZXh0ID0gYWxsb2NhdGVkQ291bnQoKTsKKyAg
ICAgICAgc2l6ZV90IG5leHQgPSBtX3VzZWQuc2l6ZSgpOwogICAgICAgICBtX3VzZWQuYXBwZW5k
KDApOwotICAgICAgICByZXR1cm4gKFZpcnR1YWxSZWdpc3RlcikobV9maXJzdFRlbXBvcmFyeSAr
IG5leHQpOworICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChtX2hpZ2hXYXRlcm1h
cmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihuZXh0KSArIDEpOworICAgICAgICByZXR1cm4gKFZp
cnR1YWxSZWdpc3RlciluZXh0OwogICAgIH0KIAogICAgIC8vIEluY3JlbWVudCB0aGUgdXNlY291
bnQgZm9yIHRoZSBWaXJ0dWFsUmVnc2l0ZXIgYXNzb2NpYXRlZCB3aXRoICdjaGlsZCcsCkBAIC04
OSw3ICs5Niw4IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBGaW5kIHRoZSB2aXJ0dWFsIHJlZ2lz
dGVyIG51bWJlciBmb3IgdGhpcyBjaGlsZCwgaW5jcmVtZW50IGl0cyB1c2UgY291bnQuCiAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2NoaWxkXTsKLSAgICAgICAgdWludDMyX3QgaW5kZXgg
PSBub2RlLnZpcnR1YWxSZWdpc3RlcigpIC0gbV9maXJzdFRlbXBvcmFyeTsKKyAgICAgICAgdWlu
dDMyX3QgaW5kZXggPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBBU1NFUlQobV91
c2VkW2luZGV4XSAhPSBtYXgoKSk7CiAgICAgICAgIGlmIChub2RlLnJlZkNvdW50KCkgPT0gKytt
X3VzZWRbaW5kZXhdKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlIGNvdW50IGluIHRoZSBz
Y29yZWJvYXJkIHJlYWNoZXMgdGhlIHVzZSBjb3VudCBmb3IgdGhlIG5vZGUsCiAgICAgICAgICAg
ICAvLyB0aGVuIHRoaXMgd2FzIGl0cyBsYXN0IHVzZTsgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgaXMg
bm93IGZyZWUuCkBAIC05OSwyNyArMTA3LDMxIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
IAotICAgIHVuc2lnbmVkIGFsbG9jYXRlZENvdW50KCkKKyAgICB1bnNpZ25lZCBoaWdoV2F0ZXJt
YXJrKCkKICAgICB7Ci0gICAgICAgIC8vIG1fdXNlZCBjb250YWlucyBhbiBlbnRyeSBmb3IgZXZl
cnkgYWxsb2NhdGVkIFZpcnR1YWxSZWdpc3Rlci4KLSAgICAgICAgcmV0dXJuIG1fdXNlZC5zaXpl
KCk7CisgICAgICAgIHJldHVybiBtX2hpZ2hXYXRlcm1hcms7CiAgICAgfQotCisgICAgCiAjaWZu
ZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcCgpCiAgICAgewogICAgICAgICBwcmludGYoIiAgICBV
U0VEOiBbICIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91c2VkLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZnJlZS5jb250YWlucyhpKSkKLSAgICAgICAg
ICAgICAgICBwcmludGYoIiVkOiVkICIsIG1fZmlyc3RUZW1wb3JhcnkgKyBpLCBtX3VzZWRbaV0p
OworICAgICAgICAgICAgaWYgKCFtX2ZyZWUuY29udGFpbnMoaSkpIHsKKyAgICAgICAgICAgICAg
ICBwcmludGYoIiVkOiIsIGkpOworICAgICAgICAgICAgICAgIGlmIChtX3VzZWRbaV0gPT0gbWF4
KCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigibG9jYWwgIik7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVkICIsIG1fdXNlZFtpXSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRmKCJdXG4iKTsKIAogICAgICAg
ICBwcmludGYoIiAgICBGUkVFOiBbICIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV91c2VkLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9mcmVlLmNvbnRhaW5z
KGkpKSB7CisgICAgICAgICAgICBpZiAobV9mcmVlLmNvbnRhaW5zKGkpICYmIG1fdXNlZFtpXSAh
PSBtYXgoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2ldKTsKLSAgICAgICAg
ICAgICAgICBwcmludGYoIiVkICIsIG1fZmlyc3RUZW1wb3JhcnkgKyBpKTsKKyAgICAgICAgICAg
ICAgICBwcmludGYoIiVkICIsIGkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHByaW50ZigiXVxuIik7CkBAIC0xMjgsMTAgKzE0MCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDMyX3QgbWF4KCkgeyByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgCiAgICAgLy8gVGhlIGdyYXBoLCBzbyB3
ZSBjYW4gZ2V0IHJlZkNvdW50cyBmb3Igbm9kZXMsIHRvIGRldGVybWluZSB3aGVuIHZhbHVlcyBh
cmUgZGVhZC4KICAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICAvLyBUaGUgZmlyc3QgVmlydHVhbFJl
Z3NpdGVyIHRvIGJlIHVzZWQgYXMgYSB0ZW1wb3JhcnkuCi0gICAgdWludDMyX3QgbV9maXJzdFRl
bXBvcmFyeTsKKyAgICAKKyAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgc3BhbiBvZiB2aXJ0dWFsIHJl
Z2lzdGVycyB0aGF0IHRoaXMgY29kZSBibG9jayB3aWxsIHVzZS4KKyAgICB1bnNpZ25lZCBtX2hp
Z2hXYXRlcm1hcms7CiAgICAgCiAgICAgLy8gRm9yIGV2ZXJ5IHZpcnR1YWwgcmVnaXN0ZXIgdGhh
dCBoYXMgYmVlbiBhbGxvY2F0ZWQgKGVpdGhlciBjdXJyZW50bHkgYWxpdmUsIG9yIGluCiAgICAg
Ly8gdGhlIGZyZWUgbGlzdCksIHdlIGtlZXAgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHJlbWFp
bmluZyB1c2VzIHVudGlsIGl0IGlzIGRlYWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NzE3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Miw2ICs4MiwxMiBAQCB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBj
b25zCiAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgZnByaW50Zihv
dXQsICIqJWQiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqaW50
MzIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIipkb3Vi
bGUoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIENv
bnN0YW50OgogICAgICAgICBmcHJpbnRmKG91dCwgIlslc10iLCBjb25zdGFudCgpLmRlc2NyaXB0
aW9uKCkpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Qml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jp
dFZlY3Rvci5jcHAJKHJldmlzaW9uIDk3MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsOSBAQAogI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi1C
aXRWZWN0b3I6OkJpdFZlY3Rvcihjb25zdCBCaXRWZWN0b3ImIG90aGVyKQotICAgIDogbV9iaXRz
T3JQb2ludGVyKG1ha2VJbmxpbmVCaXRzKDApKQotewotICAgICgqdGhpcykgPSBvdGhlcjsKLX0K
K25hbWVzcGFjZSBXVEYgewogCi1CaXRWZWN0b3ImIEJpdFZlY3Rvcjo6b3BlcmF0b3I9KGNvbnN0
IEJpdFZlY3RvciYgb3RoZXIpCit2b2lkIEJpdFZlY3Rvcjo6c2V0U2xvdyhjb25zdCBCaXRWZWN0
b3ImIG90aGVyKQogewogICAgIHVpbnRwdHJfdCBuZXdCaXRzT3JQb2ludGVyOwogICAgIGlmIChv
dGhlci5pc0lubGluZSgpKQpAQCAtNTEsNyArNDcsNiBAQCBCaXRWZWN0b3ImIEJpdFZlY3Rvcjo6
b3BlcmF0b3I9KGNvbnN0IEJpCiAgICAgaWYgKCFpc0lubGluZSgpKQogICAgICAgICBPdXRPZkxp
bmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CiAgICAgbV9iaXRzT3JQb2ludGVyID0g
bmV3Qml0c09yUG9pbnRlcjsKLSAgICByZXR1cm4gKnRoaXM7CiB9CiAKIHZvaWQgQml0VmVjdG9y
OjpyZXNpemUoc2l6ZV90IG51bUJpdHMpCkBAIC05NCw5ICs4OSwzMiBAQCB2b2lkIEJpdFZlY3Rv
cjo6cmVzaXplT3V0T2ZMaW5lKHNpemVfdCBuCiB7CiAgICAgQVNTRVJUKG51bUJpdHMgPiBtYXhJ
bmxpbmVCaXRzKCkpOwogICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRP
ZkxpbmVCaXRzOjpjcmVhdGUobnVtQml0cyk7Ci0gICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMt
PmJpdHMoKSwgYml0cygpLCBieXRlQ291bnQoc3RkOjptaW4oc2l6ZSgpLCBudW1CaXRzKSkpOwot
ICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlIGJpdHMgYXJlIHplcm8gaW4gY2FzZSB3ZSBkbyBhIG5v
LW9wIHJlc2l6ZS4KKyAgICAgICAgKm5ld091dE9mTGluZUJpdHMtPmJpdHMoKSA9IG1fYml0c09y
UG9pbnRlciAmIH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChudW1CaXRzID4gc2l6ZSgpKSB7CisgICAgICAg
ICAgICBzaXplX3Qgb2xkTnVtV29yZHMgPSBvdXRPZkxpbmVCaXRzKCktPm51bVdvcmRzKCk7Cisg
ICAgICAgICAgICBzaXplX3QgbmV3TnVtV29yZHMgPSBuZXdPdXRPZkxpbmVCaXRzLT5udW1Xb3Jk
cygpOworICAgICAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3V0T2ZM
aW5lQml0cygpLT5iaXRzKCksIG9sZE51bVdvcmRzICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAg
ICAgICBtZW1zZXQobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpICsgb2xkTnVtV29yZHMsIDAsIChu
ZXdOdW1Xb3JkcyAtIG9sZE51bVdvcmRzKSAqIHNpemVvZih2b2lkKikpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG91dE9mTGlu
ZUJpdHMoKS0+Yml0cygpLCBuZXdPdXRPZkxpbmVCaXRzLT5udW1Xb3JkcygpICogc2l6ZW9mKHZv
aWQqKSk7CiAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsK
KyAgICB9CiAgICAgbV9iaXRzT3JQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3
T3V0T2ZMaW5lQml0cyk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCit2b2lkIEJpdFZlY3Rvcjo6ZHVt
cChGSUxFKiBvdXQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoZ2V0KGkpKQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIxIik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgIH0KK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9C
aXRWZWN0b3IuaAkocmV2aXNpb24gOTcxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNSArMzYsMTYgQEAgbmFtZXNwYWNl
IFdURiB7CiAvLyB0byBhIHNpbmdsZSBjaHVuayBvZiBvdXQtb2YtbGluZSBhbGxvY2F0ZWQgc3Rv
cmFnZSB0byBzdG9yZSBhbiBhcmJpdHJhcnkgbnVtYmVyCiAvLyBvZiBiaXRzLgogLy8KLS8vIC0g
VGhlIGJpdHZlY3RvciBuZWVkcyB0byBiZSByZXNpemVkIG1hbnVhbGx5IChqdXN0IGNhbGwgZW5z
dXJlU2l6ZSgpKS4KLS8vCiAvLyAtIFRoZSBiaXR2ZWN0b3IgcmVtZW1iZXJzIHRoZSBib3VuZCBv
ZiBob3cgbWFueSBiaXRzIGNhbiBiZSBzdG9yZWQsIGJ1dCB0aGlzCiAvLyAgIG1heSBiZSBzbGln
aHRseSBncmVhdGVyIChieSBhcyBtdWNoIGFzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29uc3Rh
bnQpCiAvLyAgIHRoYW4gdGhlIGxhc3QgYXJndW1lbnQgcGFzc2VkIHRvIGVuc3VyZVNpemUoKS4K
IC8vCisvLyAtIFRoZSBiaXR2ZWN0b3IgY2FuIHJlc2l6ZSBpdHNlbGYgYXV0b21hdGljYWxseSAo
c2V0LCBjbGVhciwgZ2V0KSBvciBjYW4gYmUgdXNlZAorLy8gICBpbiBhIG1hbnVhbCBtb2RlLCB3
aGljaCBpcyBmYXN0ZXIgKHF1aWNrU2V0LCBxdWlja0NsZWFyLCBxdWlja0dldCwgZW5zdXJlU2l6
ZSkuCisvLwogLy8gLSBBY2Nlc3NlcyBBU1NFUlQgdGhhdCB5b3UgYXJlIHdpdGhpbiBib3VuZHMu
CiAvLwotLy8gLSBCaXRzIGFyZSBub3QgYXV0b21hdGljYWxseSBpbml0aWFsaXplZCB0byB6ZXJv
LgorLy8gLSBCaXRzIGFyZSBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVkIHRvIHplcm8uCiAvLwog
Ly8gT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgQml0VmVjdG9yIGNsYXNzIG1heSBub3QgYmUgdGhl
IGZhc3Rlc3QgYXJvdW5kLCBzaW5jZQogLy8gaXQgZG9lcyBjb25kaXRpb25hbHMgb24gZXZlcnkg
Z2V0L3NldC9jbGVhci4gQnV0IGl0IGlzIGdyZWF0IGlmIHlvdSBuZWVkIHRvCkBAIC01OCw3ICs1
OSwxOCBAQCBwdWJsaWM6IAogICAgIHsKICAgICB9CiAgICAgCi0gICAgQml0VmVjdG9yKGNvbnN0
IEJpdFZlY3RvciYgb3RoZXIpOworICAgIGV4cGxpY2l0IEJpdFZlY3RvcihzaXplX3QgbnVtQml0
cykKKyAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIobWFrZUlubGluZUJpdHMoMCkpCisgICAgewor
ICAgICAgICBlbnN1cmVTaXplKG51bUJpdHMpOworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3Io
Y29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIobWFrZUlu
bGluZUJpdHMoMCkpCisgICAgeworICAgICAgICAoKnRoaXMpID0gb3RoZXI7CisgICAgfQorCiAg
ICAgCiAgICAgfkJpdFZlY3RvcigpCiAgICAgewpAQCAtNjcsNyArNzksMTQgQEAgcHVibGljOiAK
ICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwogICAgIH0K
ICAgICAKLSAgICBCaXRWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsK
KyAgICBCaXRWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsK
KyAgICAgICAgaWYgKGlzSW5saW5lKCkgJiYgb3RoZXIuaXNJbmxpbmUoKSkKKyAgICAgICAgICAg
IG1fYml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc2V0U2xvdyhvdGhlcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewpAQCAtODgsMjQgKzEwNyw1MiBAQCBw
dWJsaWM6IAogICAgIAogICAgIHZvaWQgY2xlYXJBbGwoKTsKIAotICAgIGJvb2wgZ2V0KHNpemVf
dCBiaXQpIGNvbnN0CisgICAgYm9vbCBxdWlja0dldChzaXplX3QgYml0KSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGJpdCA8IHNpemUoKSk7CiAgICAgICAgIHJldHVybiAhIShiaXRzKClb
Yml0IC8gYml0c0luUG9pbnRlcigpXSAmIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChi
aXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0
KHNpemVfdCBiaXQpCisgICAgdm9pZCBxdWlja1NldChzaXplX3QgYml0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGJpdCA8IHNpemUoKSk7CiAgICAgICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2lu
dGVyKCldIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9p
bnRlcigpIC0gMSkpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjbGVhcihzaXplX3QgYml0KQor
ICAgIHZvaWQgcXVpY2tDbGVhcihzaXplX3QgYml0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGJp
dCA8IHNpemUoKSk7CiAgICAgICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVyKCldICY9IH4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEp
KSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgcXVpY2tTZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHF1aWNrU2V0KGJpdCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHF1aWNrQ2xlYXIoYml0KTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBnZXQoc2l6ZV90IGJpdCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiaXQg
Pj0gc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcXVp
Y2tHZXQoYml0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGJpdCkKKyAgICB7
CisgICAgICAgIGVuc3VyZVNpemUoYml0ICsgMSk7CisgICAgICAgIHF1aWNrU2V0KGJpdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkKKyAgICB7CisgICAgICAgIGlm
IChiaXQgPj0gc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBxdWlja0NsZWFy
KGJpdCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0KHNpemVfdCBiaXQsIGJvb2wgdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAodmFsdWUpCkBAIC0xMTQsNiArMTYxLDEwIEBAIHB1YmxpYzog
CiAgICAgICAgICAgICBjbGVhcihiaXQpOwogICAgIH0KICAgICAKKyNpZm5kZWYgTkRFQlVHCisg
ICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYKKyAgICAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQogICAgIHsKQEAgLTE2Miw2ICsyMTMsNyBAQCBw
cml2YXRlOgogICAgIE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8T3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9pbnRlcik7IH0KICAgICAKICAgICB2
b2lkIHJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cyk7CisgICAgdm9pZCBzZXRTbG93KGNv
bnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIAogICAgIHVpbnRwdHJfdCogYml0cygpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJbnRWZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZlY3Rvci5oCShy
ZXZpc2lvbiA5NzE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICB1
aW50cHRyX3QgcmVzdWx0ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJJbmRleCA9IDA7
IHN1YkluZGV4IDwgYml0Q291bnQ7ICsrc3ViSW5kZXgpIHsKICAgICAgICAgICAgIHJlc3VsdCA8
PD0gMTsKLSAgICAgICAgICAgIHJlc3VsdCB8PSAobV9iaXRzLmdldChpbmRleCAqIGJpdENvdW50
ICsgc3ViSW5kZXgpID8gMSA6IDApOworICAgICAgICAgICAgcmVzdWx0IHw9IChtX2JpdHMucXVp
Y2tHZXQoaW5kZXggKiBiaXRDb3VudCArIHN1YkluZGV4KSA/IDEgOiAwKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4ocmVzdWx0KTsKICAgICB9CkBAIC05OCw3ICs5
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKChteVZhbHVlICYgbWFzaygpKSA9PSBteVZh
bHVlKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXggPSBiaXRDb3Vu
dDsgc3ViSW5kZXgtLSA+IDA7KSB7Ci0gICAgICAgICAgICBtX2JpdHMuc2V0KGluZGV4ICogYml0
Q291bnQgKyBzdWJJbmRleCwgISEobXlWYWx1ZSAmIDEpKTsKKyAgICAgICAgICAgIG1fYml0cy5x
dWlja1NldChpbmRleCAqIGJpdENvdW50ICsgc3ViSW5kZXgsICEhKG15VmFsdWUgJiAxKSk7CiAg
ICAgICAgICAgICBteVZhbHVlID4+PSAxOwogICAgICAgICB9CiAgICAgICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110594</attachid>
            <date>2011-10-11 15:48:24 -0700</date>
            <delta_ts>2011-10-11 15:50:29 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>vralloc_patch_3.diff</filename>
            <type>text/plain</type>
            <size>21138</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcxODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMTAtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGJlIG1vcmUgYWdncmVzc2l2ZSBp
bgorICAgICAgICByZXVzaW5nIHRlbXBvcmFyeSBzbG90cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4NjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIDEuMiUgd2luIG9uIFY4LCBuZXV0cmFs
IGVsc2V3aGVyZS4gVGhlIHdpbiBpcyBwcm9iYWJseSBiZWNhdXNlIGl0CisgICAgICAgIGluY3Jl
YXNlcyBwcmVjaXNpb24gb2YgR0MgY29uc2VydmF0aXZlIHNjYW5zLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyByZXF1aXJlZCBtYWtpbmcgdGhlIERGRzo6U2NvcmVCb2FyZCBvcGVyYXRlIG92ZXIg
YSBiaXR2ZWN0b3IKKyAgICAgICAgb2YgcHJlc2VydmVkIHZhcmlhYmxlcywgcmF0aGVyIHRoYW4g
anVzdCBhIHByZXNlcnZlZCB2YXJpYWJsZQorICAgICAgICB0aHJlc2hvbGQuIFRvIGRvIHRoaXMs
IEkgaW1wcm92ZWQgdGhlIFdURjo6Qml0VmVjdG9yIGNsYXNzIHRvIG1ha2UKKyAgICAgICAgaXQg
bW9yZSB1c2VyLWZyaWVuZGx5LiBJdCBzdGlsbCByZXRhaW5zIGFsbCBwcmV2aW91cyBmdW5jdGlv
bmFsaXR5LgorICAgICAgICBBbHNvIG1hZGUgY2hhbmdlcyB0byBQYWNrZWRJbnRWZWN0b3IgdG8g
YWNjb21vZGF0ZSB0aG9zZSBjaGFuZ2VzLgorICAgICAgICBGaW5hbGx5LCB0aGlzIGFkZHMgbW9y
ZSBkZWJ1Z2dpbmcgdG8gdGhlIHZpcnR1YWwgcmVnaXN0ZXIgYWxsb2NhdG9yCisgICAgICAgIGFu
ZCB0byB0aGUgT1NSIGV4aXQgY29kZSwgYXMgdGhpcyB3YXMgbmVjZXNzYXJ5IHRvIHRyYWNrIGRv
d24gYnVncworICAgICAgICBpbiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBwYXRjaC4KKwor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjphbGxvY2F0ZVZpcnR1YWxSZWdp
c3RlcnMpOgorICAgICAgICAqIGRmZy9ERkdTY29yZUJvYXJkLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U2NvcmVCb2FyZDo6U2NvcmVCb2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2Fy
ZDo6flNjb3JlQm9hcmQpOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9hcmQ6OmFsbG9jYXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjp1c2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNjb3JlQm9hcmQ6OmhpZ2hXYXRlcm1hcmspOgorICAgICAgICAoSlNDOjpERkc6OlNjb3Jl
Qm9hcmQ6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9hcmQ6Om1heCk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1
ZVJlY292ZXJ5OjpkdW1wKToKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmNwcDoKKyAgICAgICAg
KFdURjo6Qml0VmVjdG9yOjpzZXRTbG93KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpyZXNp
emVPdXRPZkxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmR1bXApOgorICAgICAgICAq
IHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpCaXRWZWN0b3IpOgor
ICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6cXVpY2tHZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnF1aWNrU2V0KToKKyAg
ICAgICAgKFdURjo6Qml0VmVjdG9yOjpxdWlja0NsZWFyKToKKyAgICAgICAgKFdURjo6Qml0VmVj
dG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldCk6CisgICAgICAgIChXVEY6
OkJpdFZlY3Rvcjo6Y2xlYXIpOgorICAgICAgICAqIHd0Zi9QYWNrZWRJbnRWZWN0b3IuaDoKKyAg
ICAgICAgKFdURjo6UGFja2VkSW50VmVjdG9yOjpnZXQpOgorICAgICAgICAoV1RGOjpQYWNrZWRJ
bnRWZWN0b3I6OnNldCk6CisKIDIwMTEtMTAtMTEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFyYWNs
b3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNoIFJlZ2lzdGVyU2l6ZWRCb29sZWFuL2Rm
Z0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiByZXR1cm4gdHlwZSB0byBzaXplX3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biA5NzE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2dsb2JhbFJlc29sdmVOdW1iZXIoMCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Byb2ZpbGVk
QmxvY2spOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2RlQmxvY2st
Pm1fbnVtVmFyczsgKytpKQorICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChpKTsKICAg
ICB9CiAKICAgICAvLyBQYXJzZSBhIGZ1bGwgQ29kZUJsb2NrIG9mIGJ5dGVjb2RlLgpAQCAtMTM3
LDcgKzE0MCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRl
bXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLAogICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2
ZWRWYXJzIHRvIGNvdmVyIHRoZXNlLgotICAgICAgICBtX3ByZXNlcnZlZFZhcnMgPSBzdGQ6Om1h
eChtX3ByZXNlcnZlZFZhcnMsIG9wZXJhbmQgKyAxKTsKKyAgICAgICAgbV9wcmVzZXJ2ZWRWYXJz
LnNldChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAg
ICAKQEAgLTYxNywxMCArNjIwLDEwIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1Bcmd1
bWVudHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jhcmllcykg
dXNlZCBpbiB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHM7Ci0gICAgLy8g
VGhlIG51bWJlciBvZiByZWdpc3RlcnMgd2UgbmVlZCB0byBwcmVzZXJ2ZSBhY3Jvc3MgQmFzaWNC
bG9jayBib3VuZGFyaWVzOwotICAgIC8vIHR5cGljYWxseSBlcXVhbCB0byB0aGUgbnVtYmVyIHZh
cnMsIGJ1dCB3ZSBleHBhbmQgdGhpcyB0byBjb3ZlciBhbGwKKyAgICAvLyBUaGUgc2V0IG9mIHJl
Z2lzdGVycyB3ZSBuZWVkIHRvIHByZXNlcnZlIGFjcm9zcyBCYXNpY0Jsb2NrIGJvdW5kYXJpZXM7
CisgICAgLy8gdHlwaWNhbGx5IGVxdWFsIHRvIHRoZSBzZXQgb2YgdmFycywgYnV0IHdlIGV4cGFu
ZCB0aGlzIHRvIGNvdmVyIGFsbAogICAgIC8vIHRlbXBvcmFyaWVzIHRoYXQgcGVyc2lzdCBhY3Jv
c3MgYmxvY2tzIChkdWVzIHRvID86LCAmJiwgfHwsIGV0YykuCi0gICAgdW5zaWduZWQgbV9wcmVz
ZXJ2ZWRWYXJzOworICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7CiAgICAgLy8gVGhlIG51
bWJlciBvZiBzbG90cyAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVk
IHRvCiAgICAgLy8gcHJlYWxsb2NhdGUgZm9yIGNhbGxzIGVtYW5hdGluZyBmcm9tIHRoaXMgZnJh
bWUuIFRoaXMgaW5jbHVkZXMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0aGUgQ2FsbEZyYW1lLCBvbmx5
IGlmIHRoaXMgaXMgbm90IGEgbGVhZiBmdW5jdGlvbi4gIChJLmUuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NzE3OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0yOTEsNyArMjkyLDcgQEAgcHVibGljOgogICAgIFNlZ21l
bnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsK
ICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhLCA4PiBtX3N0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhOwotICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICBCaXRW
ZWN0b3IgbV9wcmVzZXJ2ZWRWYXJzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVu
c2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk3MTc5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9T
UgogICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwogCiAjaWYgRU5BQkxFKERGR19ERUJVR19W
RVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkIChiYyMl
dSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0Lm1f
Ynl0ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQoKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJPU1Ig
ZXhpdCBmb3IgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIChpbnQpZXhp
dC5tX25vZGVJbmRleCwgZXhpdC5tX2J5dGVjb2RlSW5kZXgsIGRlYnVnT2Zmc2V0KCkpOwogICAg
IGV4aXQuZHVtcChzdGRlcnIpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19WRVJCT1NFX1NQRUNV
TEFUSU9OX0ZBSUxVUkUpCkBAIC0xNjEsNiArMTYxLDIzIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4
aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAgICAgfQogICAgIH0KICAgICAKKyNpZiBFTkFCTEUo
REZHX0RFQlVHX1ZFUkJPU0UpCisgICAgZnByaW50ZihzdGRlcnIsICIgICIpOworICAgIGlmIChu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJQb2lzb25lZD0ldSAiLCBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7CisgICAg
aWYgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJEaXNwbGFjZWQ9JXUgIiwgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKKyAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
VW5ib3hlZEludDMyICIpOworICAgIGlmIChoYXZlRlBScykKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJGUFIgIik7CisgICAgaWYgKGhhdmVDb25zdGFudHMpCisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ29uc3RhbnRzICIpOworICAgIGlmIChoYXZlVW5kZWZpbmVkKQorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlVuZGVmaW5lZCAiKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAiKTsKKyNl
bmRpZgorICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoQnVmZmVyID0gc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihnbG9iYWxEYXRhKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkgKiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMg
KyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpKSk7CiAK
ICAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRh
YmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQpAQCAtNDg1LDcgKzUwMiw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICBqdW1wKEdQUkluZm86OnJlZ1Qx
KTsKIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwg
IiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVwXG4i
LCBqdW1wVGFyZ2V0KTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk3MTc5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMiw2
ICsxNDAyLDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBhbGxvY2F0ZVZpcnR1YWxSZWdp
c3RlcnMoKQogICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHBy
aW50ZigiUHJlc2VydmVkIHZhcnM6ICIpOworICAgICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFy
cy5kdW1wKHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgogICAgICAgICBT
Y29yZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaCwgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOwog
ICAgICAgICB1bnNpZ25lZCBzaXplRXhjbHVkaW5nUGhpTm9kZXMgPSBtX2dyYXBoLm1fYmxvY2tz
Lmxhc3QoKS0+ZW5kOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVFeGNsdWRp
bmdQaGlOb2RlczsgKytpKSB7CkBAIC0xNDQwLDkgKzE0NDUsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQg
dGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAgICAgICAgIC8vIGZvciB0aGUgZnVuY3Rpb24gKGFuZCBj
aGVja2VkIGZvciBvbiBlbnRyeSkuIFNpbmNlIHdlIHBlcmZvcm0gYSBuZXcgYW5kCiAgICAgICAg
IC8vIGRpZmZlcmVudCBhbGxvY2F0aW9uIG9mIHRlbXBvcmFyaWVzLCBtb3JlIHJlZ2lzdGVycyBt
YXkgbm93IGJlIHJlcXVpcmVkLgotICAgICAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBz
Y29yZUJvYXJkLmFsbG9jYXRlZENvdW50KCkgKyBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyArIG1f
Z3JhcGgubV9wYXJhbWV0ZXJTbG90czsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlUmVnaXN0ZXJz
ID0gc2NvcmVCb2FyZC5oaWdoV2F0ZXJtYXJrKCkgKyBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHM7
CiAgICAgICAgIGlmICgodW5zaWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
IDwgY2FsbGVlUmVnaXN0ZXJzKQogICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9T
RSkKKyAgICAgICAgcHJpbnRmKCJOdW0gY2FsbGVlIHJlZ2lzdGVyczogJXVcbiIsIGNhbGxlZVJl
Z2lzdGVycyk7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkocmV2aXNpb24gOTcx
NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVk
ZSA8ZGZnL0RGR0dyYXBoLmg+CisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDIs
MjMgKzQzLDI3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIGFub3RoZXIg
bm9kZS4KIGNsYXNzIFNjb3JlQm9hcmQgewogcHVibGljOgotICAgIFNjb3JlQm9hcmQoR3JhcGgm
IGdyYXBoLCB1aW50MzJfdCBmaXJzdFRlbXBvcmFyeSkKKyAgICBTY29yZUJvYXJkKEdyYXBoJiBn
cmFwaCwgY29uc3QgQml0VmVjdG9yJiB1c2VkVmFycykKICAgICAgICAgOiBtX2dyYXBoKGdyYXBo
KQotICAgICAgICAsIG1fZmlyc3RUZW1wb3JhcnkoZmlyc3RUZW1wb3JhcnkpCisgICAgICAgICwg
bV9oaWdoV2F0ZXJtYXJrKDApCiAgICAgeworICAgICAgICBtX3VzZWQuZmlsbCgwLCB1c2VkVmFy
cy5zaXplKCkpOworICAgICAgICBtX2ZyZWUucmVzZXJ2ZUNhcGFjaXR5KHVzZWRWYXJzLnNpemUo
KSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSB1c2VkVmFycy5zaXplKCk7IGktLSA+IDA7KSB7
CisgICAgICAgICAgICBpZiAodXNlZFZhcnMuZ2V0KGkpKSB7CisgICAgICAgICAgICAgICAgbV91
c2VkW2ldID0gbWF4KCk7IC8vIFRoaXMgaXMgbW9zdGx5IGZvciBkZWJ1Z2dpbmcgYW5kIHNhbml0
eS4KKyAgICAgICAgICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChtX2hpZ2hXYXRl
cm1hcmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSArIDEpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbV9mcmVlLmFwcGVuZChpKTsKKyAgICAgICAgfQogICAgIH0KIAog
I2lmIEVOQUJMRShERkdfQ09OU0lTVEVOQ1lfQ0hFQ0spCiAgICAgflNjb3JlQm9hcmQoKQogICAg
IHsKLSAgICAgICAgLy8gRXZlcnkgVmlydHVhbFJlZ2lzdGVyIHRoYXQgd2FzIGFsbG9jYXRlZCBz
aG91bGQgbm93IGJlIGZyZWUuCi0gICAgICAgIEFTU0VSVChtX3VzZWQuc2l6ZSgpID09IG1fZnJl
ZS5zaXplKCkpOwotICAgICAgICAvLyBFdmVyeSBlbnRyeSBpbiB0aGUgdXNlZCBsaXN0IHNob3Vs
ZCBiZSBhdmFpbGFibGUgaW4gdGhlIGZyZWUgbGlzdC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3VzZWQuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBBU1NFUlQobV9mcmVlLmNv
bnRhaW5zKGkpKTsKICAgICAgICAgLy8gRm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSB1c2VkIGxpc3Qg
dGhlIHVzZSBjb3VudCBvZiB0aGUgdmlydHVhbCByZWdpc3RlciBzaG91bGQgYmUgemVyby4KICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBBU1NFUlQoIW1fdXNlZFtpXSk7CisgICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFtpXSB8
fCBtX3VzZWRbaV0gPT0gbWF4KCkpOwogICAgIH0KICNlbmRpZgogCkBAIC03MSwxMyArNzYsMTUg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9mcmVlLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
IC8vIFVzZSBjb3VudCBtdXN0IGhhdmUgaGl0IHplcm8gZm9yIGl0IHRvIGhhdmUgYmVlbiBhZGRl
ZCB0byB0aGUgZnJlZSBsaXN0IQogICAgICAgICAgICAgQVNTRVJUKCFtX3VzZWRbaW5kZXhdKTsK
LSAgICAgICAgICAgIHJldHVybiAoVmlydHVhbFJlZ2lzdGVyKShtX2ZpcnN0VGVtcG9yYXJ5ICsg
aW5kZXgpOworICAgICAgICAgICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgobV9oaWdoV2F0
ZXJtYXJrLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpICsgMSk7CisgICAgICAgICAgICBy
ZXR1cm4gKFZpcnR1YWxSZWdpc3RlcilpbmRleDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFs
bG9jYXRlIGEgbmV3IFZpcnR1YWxSZWdpc3RlciwgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgZW50
cnkgdG8gbV91c2VkLgotICAgICAgICBzaXplX3QgbmV4dCA9IGFsbG9jYXRlZENvdW50KCk7Cisg
ICAgICAgIHNpemVfdCBuZXh0ID0gbV91c2VkLnNpemUoKTsKICAgICAgICAgbV91c2VkLmFwcGVu
ZCgwKTsKLSAgICAgICAgcmV0dXJuIChWaXJ0dWFsUmVnaXN0ZXIpKG1fZmlyc3RUZW1wb3Jhcnkg
KyBuZXh0KTsKKyAgICAgICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgobV9oaWdoV2F0ZXJt
YXJrLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obmV4dCkgKyAxKTsKKyAgICAgICAgcmV0dXJuIChW
aXJ0dWFsUmVnaXN0ZXIpbmV4dDsKICAgICB9CiAKICAgICAvLyBJbmNyZW1lbnQgdGhlIHVzZWNv
dW50IGZvciB0aGUgVmlydHVhbFJlZ3NpdGVyIGFzc29jaWF0ZWQgd2l0aCAnY2hpbGQnLApAQCAt
ODksNyArOTYsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gRmluZCB0aGUgdmlydHVhbCByZWdp
c3RlciBudW1iZXIgZm9yIHRoaXMgY2hpbGQsIGluY3JlbWVudCBpdHMgdXNlIGNvdW50LgogICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtjaGlsZF07Ci0gICAgICAgIHVpbnQzMl90IGluZGV4
ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSAtIG1fZmlyc3RUZW1wb3Jhcnk7CisgICAgICAgIHVp
bnQzMl90IGluZGV4ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgQVNTRVJUKG1f
dXNlZFtpbmRleF0gIT0gbWF4KCkpOwogICAgICAgICBpZiAobm9kZS5yZWZDb3VudCgpID09ICsr
bV91c2VkW2luZGV4XSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHVzZSBjb3VudCBpbiB0aGUg
c2NvcmVib2FyZCByZWFjaGVzIHRoZSB1c2UgY291bnQgZm9yIHRoZSBub2RlLAogICAgICAgICAg
ICAgLy8gdGhlbiB0aGlzIHdhcyBpdHMgbGFzdCB1c2U7IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIGlz
IG5vdyBmcmVlLgpAQCAtOTksMjcgKzEwNywzMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICB1bnNpZ25lZCBhbGxvY2F0ZWRDb3VudCgpCisgICAgdW5zaWduZWQgaGlnaFdhdGVy
bWFyaygpCiAgICAgewotICAgICAgICAvLyBtX3VzZWQgY29udGFpbnMgYW4gZW50cnkgZm9yIGV2
ZXJ5IGFsbG9jYXRlZCBWaXJ0dWFsUmVnaXN0ZXIuCi0gICAgICAgIHJldHVybiBtX3VzZWQuc2l6
ZSgpOworICAgICAgICByZXR1cm4gbV9oaWdoV2F0ZXJtYXJrOwogICAgIH0KLQorICAgIAogI2lm
bmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoKQogICAgIHsKICAgICAgICAgcHJpbnRmKCIgICAg
VVNFRDogWyAiKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXNlZC5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFtX2ZyZWUuY29udGFpbnMoaSkpCi0gICAgICAg
ICAgICAgICAgcHJpbnRmKCIlZDolZCAiLCBtX2ZpcnN0VGVtcG9yYXJ5ICsgaSwgbV91c2VkW2ld
KTsKKyAgICAgICAgICAgIGlmICghbV9mcmVlLmNvbnRhaW5zKGkpKSB7CisgICAgICAgICAgICAg
ICAgcHJpbnRmKCIlZDoiLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAobV91c2VkW2ldID09IG1h
eCgpKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoImxvY2FsICIpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZCAiLCBtX3VzZWRbaV0pOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHByaW50ZigiXVxuIik7CiAKICAgICAg
ICAgcHJpbnRmKCIgICAgRlJFRTogWyAiKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdXNlZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZnJlZS5jb250YWlu
cyhpKSkgeworICAgICAgICAgICAgaWYgKG1fZnJlZS5jb250YWlucyhpKSAmJiBtX3VzZWRbaV0g
IT0gbWF4KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFtpXSk7Ci0gICAgICAg
ICAgICAgICAgcHJpbnRmKCIlZCAiLCBtX2ZpcnN0VGVtcG9yYXJ5ICsgaSk7CisgICAgICAgICAg
ICAgICAgcHJpbnRmKCIlZCAiLCBpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBwcmludGYoIl1cbiIpOwpAQCAtMTI4LDEwICsxNDAsMTMgQEAgcHVibGljOgogI2VuZGlmCiAK
IHByaXZhdGU6CisgICAgc3RhdGljIHVpbnQzMl90IG1heCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAogICAgIC8vIFRoZSBncmFwaCwgc28g
d2UgY2FuIGdldCByZWZDb3VudHMgZm9yIG5vZGVzLCB0byBkZXRlcm1pbmUgd2hlbiB2YWx1ZXMg
YXJlIGRlYWQuCiAgICAgR3JhcGgmIG1fZ3JhcGg7Ci0gICAgLy8gVGhlIGZpcnN0IFZpcnR1YWxS
ZWdzaXRlciB0byBiZSB1c2VkIGFzIGEgdGVtcG9yYXJ5LgotICAgIHVpbnQzMl90IG1fZmlyc3RU
ZW1wb3Jhcnk7CisgICAgCisgICAgLy8gVGhlIHNpemUgb2YgdGhlIHNwYW4gb2YgdmlydHVhbCBy
ZWdpc3RlcnMgdGhhdCB0aGlzIGNvZGUgYmxvY2sgd2lsbCB1c2UuCisgICAgdW5zaWduZWQgbV9o
aWdoV2F0ZXJtYXJrOwogICAgIAogICAgIC8vIEZvciBldmVyeSB2aXJ0dWFsIHJlZ2lzdGVyIHRo
YXQgaGFzIGJlZW4gYWxsb2NhdGVkIChlaXRoZXIgY3VycmVudGx5IGFsaXZlLCBvciBpbgogICAg
IC8vIHRoZSBmcmVlIGxpc3QpLCB3ZSBrZWVwIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiByZW1h
aW5pbmcgdXNlcyB1bnRpbCBpdCBpcyBkZWFkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTcxNzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODIsNiArODIsMTIgQEAgdm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkg
Y29ucwogICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgIGZwcmludGYo
b3V0LCAiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiKmlu
dDMyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBE
b3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqZG91
YmxlKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBD
b25zdGFudDoKICAgICAgICAgZnByaW50ZihvdXQsICJbJXNdIiwgY29uc3RhbnQoKS5kZXNjcmlw
dGlvbigpKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0JpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9C
aXRWZWN0b3IuY3BwCShyZXZpc2lvbiA5NzE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0VmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDkgQEAKICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAot
Qml0VmVjdG9yOjpCaXRWZWN0b3IoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKLSAgICA6IG1fYml0
c09yUG9pbnRlcihtYWtlSW5saW5lQml0cygwKSkKLXsKLSAgICAoKnRoaXMpID0gb3RoZXI7Ci19
CituYW1lc3BhY2UgV1RGIHsKIAotQml0VmVjdG9yJiBCaXRWZWN0b3I6Om9wZXJhdG9yPShjb25z
dCBCaXRWZWN0b3ImIG90aGVyKQordm9pZCBCaXRWZWN0b3I6OnNldFNsb3coY29uc3QgQml0VmVj
dG9yJiBvdGhlcikKIHsKICAgICB1aW50cHRyX3QgbmV3Qml0c09yUG9pbnRlcjsKICAgICBpZiAo
b3RoZXIuaXNJbmxpbmUoKSkKQEAgLTUxLDcgKzQ3LDYgQEAgQml0VmVjdG9yJiBCaXRWZWN0b3I6
Om9wZXJhdG9yPShjb25zdCBCaQogICAgIGlmICghaXNJbmxpbmUoKSkKICAgICAgICAgT3V0T2ZM
aW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwogICAgIG1fYml0c09yUG9pbnRlciA9
IG5ld0JpdHNPclBvaW50ZXI7Ci0gICAgcmV0dXJuICp0aGlzOwogfQogCiB2b2lkIEJpdFZlY3Rv
cjo6cmVzaXplKHNpemVfdCBudW1CaXRzKQpAQCAtOTQsOSArODksMzIgQEAgdm9pZCBCaXRWZWN0
b3I6OnJlc2l6ZU91dE9mTGluZShzaXplX3QgbgogewogICAgIEFTU0VSVChudW1CaXRzID4gbWF4
SW5saW5lQml0cygpKTsKICAgICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0
T2ZMaW5lQml0czo6Y3JlYXRlKG51bUJpdHMpOwotICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRz
LT5iaXRzKCksIGJpdHMoKSwgYnl0ZUNvdW50KHN0ZDo6bWluKHNpemUoKSwgbnVtQml0cykpKTsK
LSAgICBpZiAoIWlzSW5saW5lKCkpCisgICAgaWYgKGlzSW5saW5lKCkpIHsKKyAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBiaXRzIGFyZSB6ZXJvIGluIGNhc2Ugd2UgZG8gYSBu
by1vcCByZXNpemUuCisgICAgICAgICpuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgPSBtX2JpdHNP
clBvaW50ZXIgJiB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobnVtQml0cyA+IHNpemUoKSkgeworICAgICAg
ICAgICAgc2l6ZV90IG9sZE51bVdvcmRzID0gb3V0T2ZMaW5lQml0cygpLT5udW1Xb3JkcygpOwor
ICAgICAgICAgICAgc2l6ZV90IG5ld051bVdvcmRzID0gbmV3T3V0T2ZMaW5lQml0cy0+bnVtV29y
ZHMoKTsKKyAgICAgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG91dE9m
TGluZUJpdHMoKS0+Yml0cygpLCBvbGROdW1Xb3JkcyAqIHNpemVvZih2b2lkKikpOworICAgICAg
ICAgICAgbWVtc2V0KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSArIG9sZE51bVdvcmRzLCAwLCAo
bmV3TnVtV29yZHMgLSBvbGROdW1Xb3JkcykgKiBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdXRPZkxp
bmVCaXRzKCktPmJpdHMoKSwgbmV3T3V0T2ZMaW5lQml0cy0+bnVtV29yZHMoKSAqIHNpemVvZih2
b2lkKikpOwogICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7
CisgICAgfQogICAgIG1fYml0c09yUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5l
d091dE9mTGluZUJpdHMpOwogfQogCisjaWZuZGVmIE5ERUJVRwordm9pZCBCaXRWZWN0b3I6OmR1
bXAoRklMRSogb3V0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGdldChpKSkKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiMSIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAgICB9Cit9Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Qml0VmVjdG9yLmgJKHJldmlzaW9uIDk3MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTUgKzM2LDE2IEBAIG5hbWVzcGFj
ZSBXVEYgewogLy8gdG8gYSBzaW5nbGUgY2h1bmsgb2Ygb3V0LW9mLWxpbmUgYWxsb2NhdGVkIHN0
b3JhZ2UgdG8gc3RvcmUgYW4gYXJiaXRyYXJ5IG51bWJlcgogLy8gb2YgYml0cy4KIC8vCi0vLyAt
IFRoZSBiaXR2ZWN0b3IgbmVlZHMgdG8gYmUgcmVzaXplZCBtYW51YWxseSAoanVzdCBjYWxsIGVu
c3VyZVNpemUoKSkuCi0vLwogLy8gLSBUaGUgYml0dmVjdG9yIHJlbWVtYmVycyB0aGUgYm91bmQg
b2YgaG93IG1hbnkgYml0cyBjYW4gYmUgc3RvcmVkLCBidXQgdGhpcwogLy8gICBtYXkgYmUgc2xp
Z2h0bHkgZ3JlYXRlciAoYnkgYXMgbXVjaCBhcyBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGNvbnN0
YW50KQogLy8gICB0aGFuIHRoZSBsYXN0IGFyZ3VtZW50IHBhc3NlZCB0byBlbnN1cmVTaXplKCku
CiAvLworLy8gLSBUaGUgYml0dmVjdG9yIGNhbiByZXNpemUgaXRzZWxmIGF1dG9tYXRpY2FsbHkg
KHNldCwgY2xlYXIsIGdldCkgb3IgY2FuIGJlIHVzZWQKKy8vICAgaW4gYSBtYW51YWwgbW9kZSwg
d2hpY2ggaXMgZmFzdGVyIChxdWlja1NldCwgcXVpY2tDbGVhciwgcXVpY2tHZXQsIGVuc3VyZVNp
emUpLgorLy8KIC8vIC0gQWNjZXNzZXMgQVNTRVJUIHRoYXQgeW91IGFyZSB3aXRoaW4gYm91bmRz
LgogLy8KLS8vIC0gQml0cyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gemVy
by4KKy8vIC0gQml0cyBhcmUgYXV0b21hdGljYWxseSBpbml0aWFsaXplZCB0byB6ZXJvLgogLy8K
IC8vIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIEJpdFZlY3RvciBjbGFzcyBtYXkgbm90IGJlIHRo
ZSBmYXN0ZXN0IGFyb3VuZCwgc2luY2UKIC8vIGl0IGRvZXMgY29uZGl0aW9uYWxzIG9uIGV2ZXJ5
IGdldC9zZXQvY2xlYXIuIEJ1dCBpdCBpcyBncmVhdCBpZiB5b3UgbmVlZCB0bwpAQCAtNTgsNyAr
NTksMTggQEAgcHVibGljOiAKICAgICB7CiAgICAgfQogICAgIAotICAgIEJpdFZlY3Rvcihjb25z
dCBCaXRWZWN0b3ImIG90aGVyKTsKKyAgICBleHBsaWNpdCBCaXRWZWN0b3Ioc2l6ZV90IG51bUJp
dHMpCisgICAgICAgIDogbV9iaXRzT3JQb2ludGVyKG1ha2VJbmxpbmVCaXRzKDApKQorICAgIHsK
KyAgICAgICAgZW5zdXJlU2l6ZShudW1CaXRzKTsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9y
KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRzT3JQb2ludGVyKG1ha2VJ
bmxpbmVCaXRzKDApKQorICAgIHsKKyAgICAgICAgKCp0aGlzKSA9IG90aGVyOworICAgIH0KKwog
ICAgIAogICAgIH5CaXRWZWN0b3IoKQogICAgIHsKQEAgLTY3LDcgKzc5LDE0IEBAIHB1YmxpYzog
CiAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKICAgICB9
CiAgICAgCi0gICAgQml0VmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgQml0VmVjdG9yJiBvdGhlcik7
CisgICAgQml0VmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7
CisgICAgICAgIGlmIChpc0lubGluZSgpICYmIG90aGVyLmlzSW5saW5lKCkpCisgICAgICAgICAg
ICBtX2JpdHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNldFNsb3cob3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKQEAgLTg4LDI0ICsxMDcsNTIgQEAg
cHVibGljOiAKICAgICAKICAgICB2b2lkIGNsZWFyQWxsKCk7CiAKLSAgICBib29sIGdldChzaXpl
X3QgYml0KSBjb25zdAorICAgIGJvb2wgcXVpY2tHZXQoc2l6ZV90IGJpdCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChiaXQgPCBzaXplKCkpOwogICAgICAgICByZXR1cm4gISEoYml0cygp
W2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAo
Yml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNl
dChzaXplX3QgYml0KQorICAgIHZvaWQgcXVpY2tTZXQoc2l6ZV90IGJpdCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChiaXQgPCBzaXplKCkpOwogICAgICAgICBiaXRzKClbYml0IC8gYml0c0luUG9p
bnRlcigpXSB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBv
aW50ZXIoKSAtIDEpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkK
KyAgICB2b2lkIHF1aWNrQ2xlYXIoc2l6ZV90IGJpdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChi
aXQgPCBzaXplKCkpOwogICAgICAgICBiaXRzKClbYml0IC8gYml0c0luUG9pbnRlcigpXSAmPSB+
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAx
KSkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHF1aWNrU2V0KHNpemVfdCBiaXQsIGJvb2wgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBxdWlja1NldChiaXQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBxdWlja0NsZWFyKGJpdCk7CisgICAgfQorICAg
IAorICAgIGJvb2wgZ2V0KHNpemVfdCBiaXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYml0
ID49IHNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHF1
aWNrR2V0KGJpdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBiaXQpCisgICAg
eworICAgICAgICBlbnN1cmVTaXplKGJpdCArIDEpOworICAgICAgICBxdWlja1NldChiaXQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKHNpemVfdCBiaXQpCisgICAgeworICAgICAgICBp
ZiAoYml0ID49IHNpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcXVpY2tDbGVh
cihiaXQpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldChzaXplX3QgYml0LCBib29sIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlKQpAQCAtMTE0LDYgKzE2MSwxMCBAQCBwdWJsaWM6
IAogICAgICAgICAgICAgY2xlYXIoYml0KTsKICAgICB9CiAgICAgCisjaWZuZGVmIE5ERUJVRwor
ICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisgICAgCiBwcml2YXRlOgogICAgIHN0
YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7CkBAIC0xNjIsNiArMjEzLDcgQEAg
cHJpdmF0ZToKICAgICBPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKCkgeyByZXR1cm4gYml0
d2lzZV9jYXN0PE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBvaW50ZXIpOyB9CiAgICAgCiAgICAg
dm9pZCByZXNpemVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMpOworICAgIHZvaWQgc2V0U2xvdyhj
b25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAKICAgICB1aW50cHRyX3QqIGJpdHMoKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFja2VkSW50VmVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWNrZWRJbnRWZWN0b3IuaAko
cmV2aXNpb24gOTcxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhY2tlZEludFZl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAg
dWludHB0cl90IHJlc3VsdCA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXggPSAw
OyBzdWJJbmRleCA8IGJpdENvdW50OyArK3N1YkluZGV4KSB7CiAgICAgICAgICAgICByZXN1bHQg
PDw9IDE7Ci0gICAgICAgICAgICByZXN1bHQgfD0gKG1fYml0cy5nZXQoaW5kZXggKiBiaXRDb3Vu
dCArIHN1YkluZGV4KSA/IDEgOiAwKTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSAobV9iaXRzLnF1
aWNrR2V0KGluZGV4ICogYml0Q291bnQgKyBzdWJJbmRleCkgPyAxIDogMCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHJlc3VsdCk7CiAgICAgfQpAQCAtOTgsNyAr
OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCgobXlWYWx1ZSAmIG1hc2soKSkgPT0gbXlW
YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHN1YkluZGV4ID0gYml0Q291
bnQ7IHN1YkluZGV4LS0gPiAwOykgewotICAgICAgICAgICAgbV9iaXRzLnNldChpbmRleCAqIGJp
dENvdW50ICsgc3ViSW5kZXgsICEhKG15VmFsdWUgJiAxKSk7CisgICAgICAgICAgICBtX2JpdHMu
cXVpY2tTZXQoaW5kZXggKiBiaXRDb3VudCArIHN1YkluZGV4LCAhIShteVZhbHVlICYgMSkpOwog
ICAgICAgICAgICAgbXlWYWx1ZSA+Pj0gMTsKICAgICAgICAgfQogICAgICAgICAK
</data>
<flag name="review"
          id="108141"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>