<?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>88840</bug_id>
          
          <creation_ts>2012-06-11 22:57:41 -0700</creation_ts>
          <short_desc>GC should be 1.7X faster</short_desc>
          <delta_ts>2012-06-12 23:13:54 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>88966</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>646644</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-11 22:57:41 -0700</bug_when>
    <thetext>GC should be 1.7X faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646647</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-11 23:00:59 -0700</bug_when>
    <thetext>Highlights:

1.7X reduction in average pause on gc-benchmark.html on a Mac Pro: 105ms vs 62ms.

1.12X speedup on v8-splay.

Possible small regression on SunSpider, but not statistically significant.

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

VMs tested:
&quot;SPADE&quot; at /Volumes/Big/ggaren/Downloads/Safari-MountainLion-Production-Curie-119909-43390.app/Contents/Resources/DumpRenderTree
&quot;PATCH&quot; at /Volumes/Big/ggaren/webkit/WebKitBuild/Release/DumpRenderTree (r119908)

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

                                                    SPADE                     PATCH                                       
SunSpider:
   3d-cube                                      8.5830+-0.1405     ?      9.3066+-0.6883        ? might be 1.0843x slower
   3d-morph                                     8.6177+-0.1482     ?      8.6985+-0.0973        ?
   3d-raytrace                                 15.2287+-0.6303     ?     15.2385+-0.6271        ?
   access-binary-trees                          2.3384+-0.4223     ?      2.7461+-0.5536        ? might be 1.1743x slower
   access-fannkuch                              7.6331+-0.0680     ?      7.6771+-0.0479        ?
   access-nbody                                 4.6996+-0.0765     ?      4.7859+-0.0354        ? might be 1.0184x slower
   access-nsieve                                3.6986+-0.0436     ?      3.7721+-0.0729        ? might be 1.0199x slower
   bitops-3bit-bits-in-byte                     1.5707+-0.0080     ?      1.5955+-0.0252        ? might be 1.0158x slower
   bitops-bits-in-byte                          6.5760+-0.0391            6.5643+-0.0353        
   bitops-bitwise-and                           2.7999+-0.1013     ?      2.8158+-0.0815        ?
   bitops-nsieve-bits                           3.6562+-0.0232     !      3.6960+-0.0095        ! definitely 1.0109x slower
   controlflow-recursive                        2.9061+-0.0245     ?      2.9222+-0.0246        ?
   crypto-aes                                  10.0641+-0.5468     ?     10.8969+-0.8429        ? might be 1.0827x slower
   crypto-md5                                   4.2083+-0.0921     ?      4.2382+-0.1361        ?
   crypto-sha1                                  3.5431+-0.0680     !      3.6564+-0.0185        ! definitely 1.0320x slower
   date-format-tofte                           15.6157+-1.4840           15.4828+-1.6521        
   date-format-xparb                           12.9708+-0.1381     ?     13.6844+-1.1520        ? might be 1.0550x slower
   math-cordic                                  5.1981+-0.0536     ?      5.2323+-0.0491        ?
   math-partial-sums                           10.5900+-0.0850     ?     10.6056+-0.0157        ?
   math-spectral-norm                           3.4542+-0.0605     ?      3.5117+-0.0154        ? might be 1.0166x slower
   regexp-dna                                  11.4805+-0.0649     ?     11.7938+-0.3619        ? might be 1.0273x slower
   string-base64                                6.6503+-0.8510     ?      6.7046+-0.8126        ?
   string-fasta                                 9.3593+-0.4904     ?      9.4326+-0.4028        ?
   string-tagcloud                             15.7902+-0.3367           15.7115+-0.4151        
   string-unpack-code                          27.1805+-1.0656           26.5491+-1.0049          might be 1.0238x faster
   string-validate-input                        9.9656+-0.6400            9.5112+-0.7653          might be 1.0478x faster

   &lt;arithmetic&gt; *                               8.2453+-0.1518     ?      8.3396+-0.2877        ? might be 1.0114x slower
   &lt;geometric&gt;                                  6.5643+-0.0814     ?      6.6848+-0.1922        ? might be 1.0184x slower
   &lt;harmonic&gt;                                   5.1823+-0.0700     ?      5.3088+-0.1312        ? might be 1.0244x slower

                                                    SPADE                     PATCH                                       
V8:
   crypto                                      87.8475+-0.7467           87.8045+-0.7383        
   deltablue                                  172.8938+-1.7931          172.3493+-1.7812        
   earley-boyer                               101.2235+-1.5644     ?    101.5495+-1.8055        ?
   raytrace                                    69.5681+-0.3166     ?     70.1683+-2.1174        ?
   regexp                                     102.5394+-0.3300     !    104.3305+-0.3496        ! definitely 1.0175x slower
   richards                                   146.3581+-1.0942     ?    147.1016+-2.0144        ?
   splay                                      144.2647+-11.0317    ^    119.3962+-12.2720       ^ definitely 1.2083x faster

   &lt;arithmetic&gt;                               117.8136+-1.1902     ^    114.6714+-1.4067        ^ definitely 1.0274x faster
   &lt;geometric&gt; *                              112.6310+-0.9225     ^    110.0133+-1.3500        ^ definitely 1.0238x faster
   &lt;harmonic&gt;                                 107.6217+-0.6607     ^    105.6110+-1.2751        ^ definitely 1.0190x faster

                                                    SPADE                     PATCH                                       
V8Real:
   encrypt                                     0.47470+-0.00099    ?     0.47477+-0.00082       ?
   decrypt                                     8.23235+-0.00980    ?     8.23890+-0.01067       ?
   deltablue                          x2       0.90939+-0.01345    ?     0.91183+-0.01432       ?
   earley                                      2.44956+-0.01556    ?     2.46486+-0.02022       ?
   boyer                                      15.97746+-0.10361    ?    16.15869+-0.14813       ? might be 1.0113x slower
   raytrace                           x2       6.26569+-0.06272    ?     6.32463+-0.04388       ?
   regexp                             x2      30.72591+-0.09405    ?    30.76099+-0.06738       ?
   richards                           x2       0.40930+-0.00952          0.40682+-0.00740       
   splay                              x2       1.13597+-0.02031    ^     1.01809+-0.03479       ^ definitely 1.1158x faster

   &lt;arithmetic&gt;                                7.57333+-0.01659    ?     7.58442+-0.01926       ? might be 1.0015x slower
   &lt;geometric&gt; *                               2.68480+-0.01298    ^     2.64905+-0.01572       ^ definitely 1.0135x faster
   &lt;harmonic&gt;                                  1.17302+-0.01180    ^     1.15142+-0.00867       ^ definitely 1.0188x faster

                                                    SPADE                     PATCH                                       
Kraken:
   ai-astar                                    927.713+-3.869            926.424+-3.120         
   audio-beat-detection                        241.742+-3.215      ?     242.090+-4.505         ?
   audio-dft                                   320.833+-0.427      ?     320.974+-0.771         ?
   audio-fft                                   146.010+-0.387            145.769+-0.339         
   audio-oscillator                            273.660+-0.212            273.610+-0.327         
   imaging-darkroom                            331.959+-2.721      ?     331.970+-2.382         ?
   imaging-desaturate                          257.814+-0.332            257.678+-0.166         
   imaging-gaussian-blur                       502.870+-0.165      ?     504.113+-2.315         ?
   json-parse-financial                         76.072+-0.283      ^      75.543+-0.080         ^ definitely 1.0070x faster
   json-stringify-tinderbox                     96.523+-0.427      ?      97.317+-0.477         ?
   stanford-crypto-aes                         102.722+-0.650            102.187+-0.541         
   stanford-crypto-ccm                         112.508+-0.409      ?     112.643+-0.376         ?
   stanford-crypto-pbkdf2                      227.194+-0.954            226.091+-0.785         
   stanford-crypto-sha256-iterative            111.009+-0.213            110.499+-0.433         

   &lt;arithmetic&gt; *                              266.331+-0.437            266.208+-0.551           might be 1.0005x faster
   &lt;geometric&gt;                                 206.972+-0.232            206.798+-0.348           might be 1.0008x faster
   &lt;harmonic&gt;                                  168.153+-0.146            167.921+-0.225           might be 1.0014x faster

                                                    SPADE                     PATCH                                       
JSBench:
   amazon                                      20.8333+-0.2473           20.6667+-0.3128        
   facebook                                    78.8333+-2.2962     ?     81.5833+-2.3378        ? might be 1.0349x slower
   google                                     111.5833+-2.0536     ?    111.8333+-1.8541        ?
   twitter                                     60.9167+-0.4248     ^     59.3333+-0.3128        ^ definitely 1.0267x faster
   yahoo                                       25.6667+-0.4138     ?     26.0833+-0.4248        ? might be 1.0162x slower

   &lt;arithmetic&gt; *                              59.5667+-0.7485     ?     59.9000+-0.9486        ? might be 1.0056x slower
   &lt;geometric&gt;                                 49.1269+-0.4701     ?     49.3125+-0.6902        ? might be 1.0038x slower
   &lt;harmonic&gt;                                  39.9751+-0.3130     ?     40.0608+-0.5170        ? might be 1.0021x slower

                                                    SPADE                     PATCH                                       
JSRegress:
   adapt-to-double-divide                      83.3630+-0.0237     !     83.4670+-0.0737        ! definitely 1.0012x slower
   aliased-arguments-getbyval                   0.9438+-0.0245     ?      0.9580+-0.0168        ? might be 1.0151x slower
   arity-mismatch-inlining                      0.7349+-0.0287            0.7267+-0.0136          might be 1.0113x faster
   big-int-mul                                 10.0781+-0.0257     ?     10.1085+-0.0219        ?
   boolean-test                                 4.0164+-0.0126     ?      4.0522+-0.0256        ?
   cast-int-to-double                          14.1922+-0.0215     ?     14.2338+-0.0351        ?
   cfg-simplify                                 3.5019+-0.0127     ?      3.5164+-0.0133        ?
   cmpeq-obj-to-obj-other                      16.1665+-0.2244           16.1618+-0.5207        
   constant-test                                7.8481+-0.0155     ?      7.8666+-0.0082        ?
   direct-arguments-getbyval                    0.8645+-0.0149     ?      0.8756+-0.0117        ? might be 1.0129x slower
   double-pollution-getbyval                   10.1094+-0.0282     ?     10.1474+-0.0164        ?
   double-pollution-putbyoffset                 5.0111+-0.0786     ?      5.0267+-0.0773        ?
   external-arguments-getbyval                  2.6587+-0.3422     ?      2.6905+-0.3176        ? might be 1.0120x slower
   external-arguments-putbyval                  3.9350+-0.6730     ?      4.0129+-0.6519        ? might be 1.0198x slower
   Float32Array-matrix-mult                    13.3589+-1.1334           13.1731+-1.1115          might be 1.0141x faster
   fold-double-to-int                          42.8418+-1.0133     ?     44.4507+-1.9277        ? might be 1.0376x slower
   function-dot-apply                           3.5925+-0.0181     !      3.6583+-0.0180        ! definitely 1.0183x slower
   function-test                                4.9003+-0.0471            4.8732+-0.0610        
   inline-arguments-access                      1.2773+-0.0144     ?      1.2877+-0.0038        ?
   inline-arguments-local-escape               33.2692+-4.6584     ?     33.5490+-4.5307        ?
   int-overflow-local                         104.7309+-0.0833          104.6487+-0.1333        
   Int16Array-bubble-sort                      80.0115+-0.2301           79.7546+-1.6814        
   Int16Array-load-int-mul                      2.0172+-0.0201     ?      2.0255+-0.0119        ?
   Int8Array-load                               5.1788+-0.0778            5.1478+-0.0118        
   integer-divide                              16.0347+-0.0165     ?     16.0573+-0.0164        ?
   method-on-number                           231.4135+-4.9584     ^    211.2290+-3.5086        ^ definitely 1.0956x faster
   number-test                                  3.9184+-0.0366     ?      3.9268+-0.0218        ?
   object-test                                  4.2765+-0.0342     ?      4.3429+-0.0438        ? might be 1.0155x slower
   poly-stricteq                               94.1316+-1.2360           93.5036+-0.4059        
   rare-osr-exit-on-local                     201.5588+-0.3274          201.3859+-0.2713        
   simple-activation-demo                      45.6224+-0.1255     ?     45.7235+-0.1803        ?
   slow-convergence                            89.5075+-0.1528     ?     89.5298+-0.1226        ?
   sparse-conditional                           1.3877+-0.0156     ?      1.3905+-0.0120        ?
   string-hash                                  5.4583+-0.0251     ?      5.4798+-0.0131        ?
   string-test                                  3.8887+-0.0146     !      3.9280+-0.0147        ! definitely 1.0101x slower
   tear-off-arguments                           0.9541+-0.0193     ?      0.9617+-0.0155        ?
   to-int32-boolean                            26.9931+-0.0650     ?     26.9961+-0.0169        ?
   undefined-test                               4.2910+-0.0176     !      4.3289+-0.0184        ! definitely 1.0088x slower

   &lt;arithmetic&gt;                                31.1589+-0.2293     ^     30.6631+-0.2177        ^ definitely 1.0162x faster
   &lt;geometric&gt; *                                9.1655+-0.1023     ?      9.1864+-0.1010        ? might be 1.0023x slower
   &lt;harmonic&gt;                                   3.5706+-0.0184     ?      3.5940+-0.0138        ? might be 1.0066x slower

                                                    SPADE                     PATCH                                       
DSP:
   filtrr-posterize-tint                       50.5980+-0.6100     ?     50.7318+-0.5787        ?
   filtrr-tint-contrast-sat-bright             79.0194+-0.9351     ?     79.9662+-1.1456        ? might be 1.0120x slower
   filtrr-tint-sat-adj-contr-mult             103.4475+-0.3864     !    107.6216+-3.3997        ! definitely 1.0403x slower
   filtrr-blur-overlay-sat-contr              260.2373+-4.6067     ?    264.2078+-4.6535        ? might be 1.0153x slower
   filtrr-sat-blur-mult-sharpen-contr         326.9078+-5.5831     ?    327.4784+-5.4996        ?
   filtrr-sepia-bias                           36.0644+-0.6724           35.7091+-0.8061        
   route9-vp8                         x5     1388.5253+-15.9151    ?   1395.0577+-7.1459        ?

   &lt;arithmetic&gt;                               708.9910+-7.2687     ?    712.8185+-3.5027        ? might be 1.0054x slower
   &lt;geometric&gt; *                              337.8135+-1.8839     ?    340.4040+-2.2165        ? might be 1.0077x slower
   &lt;harmonic&gt;                                 136.9157+-1.1923     ?    137.5429+-1.7390        ? might be 1.0046x slower

                                                    SPADE                     PATCH                                       
All benchmarks:
   &lt;arithmetic&gt;                               123.0826+-0.6766     ?    123.1158+-0.3829        ? might be 1.0003x slower
   &lt;geometric&gt;                                 18.9278+-0.0993     ?     18.9744+-0.1599        ? might be 1.0025x slower
   &lt;harmonic&gt;                                   4.1141+-0.0199            4.1085+-0.0214          might be 1.0014x faster

                                                    SPADE                     PATCH                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                             38.3671+-0.1316           38.3038+-0.2069          might be 1.0017x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646671</commentid>
    <comment_count>2</comment_count>
      <attachid>147019</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-11 23:35:15 -0700</bug_when>
    <thetext>Created attachment 147019
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646673</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-11 23:37:39 -0700</bug_when>
    <thetext>Attachment 147019 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/heap/MarkStack.h:46:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>647131</commentid>
    <comment_count>4</comment_count>
      <attachid>147019</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-06-12 11:39:07 -0700</bug_when>
    <thetext>Comment on attachment 147019
Patch

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

Makes me wonder if we should be looking at other Mutex users and seeing if spinlocks would be more appropriate...

&gt; Source/JavaScriptCore/runtime/Options.cpp:198
&gt; +    // We don&apos;t scale so well beyond 6.
&gt; +    if (cpusToUse &gt; 6)
&gt; +        cpusToUse = 6;

Can&apos;t we use a constant here rather than a magic number that gets repeated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647593</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-12 19:06:55 -0700</bug_when>
    <thetext>Committed r120149: &lt;http://trac.webkit.org/changeset/120149&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147019</attachid>
            <date>2012-06-11 23:35:15 -0700</date>
            <delta_ts>2012-06-12 11:39:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88840-20120611233516.patch</filename>
            <type>text/plain</type>
            <size>21777</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwMDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBA
CisyMDEyLTA2LTExICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgR0Mgc2hvdWxkIGJlIDEuN1ggZmFzdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04ODg0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEkgcHJvZmlsZWQsIGFuZCByZW1vdmVkIGFueXRoaW5nIHRoYXQg
c2hvd2VkIHVwIGFzIGEgY29uY3VycmVuY3kKKyAgICAgICAgYm90dGxlbmVjay4gVGhlbiwgSSBh
ZGRlZCAyIHRocmVhZHMgdG8gb3VyIG1heCB0aHJlYWQgY291bnQsIHNpbmNlIHdlCisgICAgICAg
IGNhbiBzY2FsZSB1cCB0byBtb3JlIHRocmVhZHMgbm93LgorCisgICAgICAgICogaGVhcC9CbG9j
a0FsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJsb2NrQWxsb2NhdG9yOjpCbG9ja0FsbG9j
YXRvcik6CisgICAgICAgIChKU0M6OkJsb2NrQWxsb2NhdG9yOjp+QmxvY2tBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpCbG9ja0FsbG9jYXRvcjo6cmVsZWFzZUZyZWVCbG9ja3MpOgorICAgICAg
ICAoSlNDOjpCbG9ja0FsbG9jYXRvcjo6d2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xv
Y2spOgorICAgICAgICAoSlNDOjpCbG9ja0FsbG9jYXRvcjo6d2FpdEZvclJlbGF0aXZlVGltZSk6
CisgICAgICAgIChKU0M6OkJsb2NrQWxsb2NhdG9yOjpibG9ja0ZyZWVpbmdUaHJlYWRNYWluKToK
KyAgICAgICAgKiBoZWFwL0Jsb2NrQWxsb2NhdG9yLmg6CisgICAgICAgIChCbG9ja0FsbG9jYXRv
cik6CisgICAgICAgIChKU0M6OkJsb2NrQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChK
U0M6OkJsb2NrQWxsb2NhdG9yOjpkZWFsbG9jYXRlKTogVXNlIGEgc3BpbiBsb2NrIGZvciB0aGUg
Y29tbW9uIGNhc2UKKyAgICAgICAgd2hlcmUgd2UncmUganVzdCBwb3BwaW5nIGEgbGlua2VkIGxp
c3QuIChBIHB0aHJlYWQgbXV0ZXggd291bGQgc2xlZXAgb3VyCisgICAgICAgIHRocmVhZCBldmVu
IGlmIHRoZSBsb2NrIHdlcmUgb25seSBjb250ZW5kZWQgZm9yIGEgbWljcm9zZWNvbmQuKSAKKwor
ICAgICAgICBTY29wZSB0aGUgbG9jayB0byBhdm9pZCBob2xkaW5nIGl0IHdoaWxlIGFsbG9jYXRp
bmcgVk0sIHNpbmNlIHRoYXQncyBhCisgICAgICAgIHNsb3cgYWN0aXZpdHkgYW5kIGl0IGRvZXNu
J3QgbW9kaWZ5IGFueSBvZiBvdXIgZGF0YSBzdHJ1Y3R1cmVzLgorCisgICAgICAgIFdlIHN0aWxs
IHVzZSBhIHB0aHJlYWQgbXV0ZXggdG8gaGFuZGxlIG91ciBjb25kaXRpb24gdmFyaWFibGUgc2lu
Y2Ugd2UKKyAgICAgICAgaGF2ZSB0bywgYW5kIGl0J3Mgbm90IGEgaG90IHBhdGguCisKKyAgICAg
ICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OkNv
cGllZFNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2sp
OgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3Bh
Y2U6OkNvcGllZFNwYWNlKTogVXNlIGEgc3BpbiBsb2NrIGZvciB0aGUgdG8gc3BhY2UgbG9jaywK
KyAgICAgICAgc2luY2UgaXQganVzdCBndWFyZHMgbGlua2VkIGxpc3QgYW5kIGhhc2ggdGFibGUg
bWFuaXB1bGF0aW9uLgorCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAo
SlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9y
KToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrU2VnbWVudEFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAg
ICAgKEpTQzo6TWFya1N0YWNrU2VnbWVudEFsbG9jYXRvcjo6c2hyaW5rUmVzZXJ2ZSk6IFVzZSBh
IHNwaW4gbG9jaywgc2luY2UKKyAgICAgICAgd2UncmUganVzdCBtYW5hZ2luZyBhIGxpbmtlZCBs
aXN0LgorCisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyk6
IENoYW5nZWQgZG9uYXRpb24gdG8gYmUgcHJvcG9ydGlvbmFsCisgICAgICAgIHRvIG91ciBjdXJy
ZW50IHN0YWNrIHNpemUuIFRoaXMgZml4ZXMgY2FzZXMgd2hlcmUgd2UgdXNlZCB0byBkb25hdGUg
dG9vCisgICAgICAgIG11Y2guIEludGVyZXN0aW5nbHksIGRvbmF0aW5nIHRvbyBtdWNoIHdhcyBz
dGFydmluZyB0aGUgZG9ub3IgKHdoZW4gaXQKKyAgICAgICAgcmFuIG91dCBvZiB3b3JrIGxhdGVy
KSAqYW5kKiB0aGUgcmVjaXBpZW50IChzaW5jZSBpdCBoYWQgdG8gd2FpdCBvbiBhCisgICAgICAg
IGxvbmcgZG9uYXRpb24gb3BlcmF0aW9uIHRvIGNvbXBsZXRlIGJlZm9yZSBpdCBjb3VsZCBhY3F1
aXJlIHRoZSBsb2NrKS4KKworICAgICAgICBJbiB0aGUgd29yc3QgY2FzZSwgd2UncmUgc3RpbGwg
Z3VhcmFudGVlZCB0byBkb25hdGUgTiBjZWxscyBpbiByb3VnaGx5IGxvZyBOIHRpbWUuCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBmaXhlcyBjYXNlcyB3aGVyZSB3ZSB1c2VkIHRvIGRvbmF0
ZSB0b28gbGl0dGxlLCBzaW5jZQorICAgICAgICB3ZSB3b3VsZCBhbHdheXMga2VlcCBhIGZpeGVk
IG1pbmltdW0gbnVtYmVyIG9mIGNlbGxzLiBJbiB0aGUgd29yc3QgY2FzZSwKKyAgICAgICAgd2l0
aCBOIG1hcmtpbmcgdGhyZWFkcywgd291bGQgY291bGQgaGF2ZSBOIGxhcmdlIG9iamVjdCBncmFw
aCByb290cyBpbgorICAgICAgICBvdXIgc3RhY2sgZm9yIHRoZSBkdXJhdGlvbiBvZiBHQywgYW5k
IHNjYWxlIHRvIG9ubHkgMSB0aHJlYWQuCisKKyAgICAgICAgSXQncyBhbiBpbnRlcmVzdGluZyBv
YnNlcnZhdGlvbiB0aGF0IGEgc2luZ2xlIG9iamVjdCBpbiB0aGUgbWFyayBzdGFjaworICAgICAg
ICBtaWdodCByZXByZXNlbnQgYW4gYXJiaXRyYXJpbHkgbGFyZ2Ugb2JqZWN0IGdyYXBoIC0tIGFu
ZCBvbmx5IHRoZSBhY3QKKyAgICAgICAgb2YgbWFya2luZyBjYW4gZmluZCBvdXQuCisKKyAgICAg
ICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnN0ZWFsU29tZUNlbGxzRnJvbSk6IFN0ZWFsIGluIHBy
b3BvcnRpb24gdG8gaWRsZQorICAgICAgICB0aHJlYWRzLiBPbmNlIGFnYWluLCB0aGlzIGZpeGVz
IGNhc2VzIHdoZXJlIGNvbnN0YW50cyBjb3VsZCBjYXVzZSB1cworICAgICAgICB0byBzdGVhbCB0
b28gbXVjaCBvciB0b28gbGl0dGxlLgorCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25h
dGVLbm93blBhcmFsbGVsKTogQWx3YXlzIHdha2UgdXAgb3RoZXIgdGhyZWFkcworICAgICAgICBp
ZiB0aGV5J3JlIGlkbGUuIFdlIGNhbiBhZmZvcmQgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIGNv
bnNlcnZhdGl2ZQorICAgICAgICBhYm91dCB3aGVuIHdlIGRvbmF0ZS4KKworICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFj
ay5oOgorICAgICAgICAoTWFya1N0YWNrU2VnbWVudEFsbG9jYXRvcik6CisgICAgICAgIChNYXJr
U3RhY2tBcnJheSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3Iu
aDogTWVyZ2VkIHRoZSAic2hvdWxkIEkgZG9uYXRlPyIgZGVjaXNpb24gaW50byBhCisgICAgICAg
IHNpbmdsZSBmdW5jdGlvbiwgZm9yIHNpbXBsaWNpdHkuCisKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuY3BwOgorICAgICAgICAobWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNl
KTogUmVkdWNlZCB0aGUgZGVsYXkgYmVmb3JlIGRvbmF0aW9uCisgICAgICAgIGEgbG90LiBXZSBj
YW4gYWZmb3JkIHRvIGRvIHRoaXMgYmVjYXVzZSwgaW4gdGhlIGNvbW1vbiBjYXNlLCBkb25hdGlv
biBpcworICAgICAgICBhIHNpbmdsZSBicmFuY2ggdGhhdCBkZWNpZGVzIG5vdCB0byBkb25hdGUu
IAorCisgICAgICAgIChjcHVzVG9Vc2UpOiBVc2UgbW9yZSBDUFVzIG5vdywgc2luY2Ugd2Ugc2Nh
bGUgYmV0dGVyIG5vdy4KKworICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAo
T3B0aW9ucyk6IFJlbW92ZWQgbm93LXVudXNlZCB2YXJpYWJsZXMuCisKIDIwMTItMDYtMTEgIEd5
dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbQ01BS0Vd
W0VGTF0gUmVtb3ZlIGR1cGxpY2F0ZWQgZXhlY3V0YWJsZSBvdXRwdXQgcGF0aApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTIwMDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTUgQEAgQmxvY2tBbGxvY2F0b3I6OkJsb2Nr
QWxsb2NhdG9yKCkKICAgICAsIG1fYmxvY2tGcmVlaW5nVGhyZWFkKGNyZWF0ZVRocmVhZChibG9j
a0ZyZWVpbmdUaHJlYWRTdGFydEZ1bmMsIHRoaXMsICJKYXZhU2NyaXB0Q29yZTo6QmxvY2tGcmVl
IikpCiB7CiAgICAgQVNTRVJUKG1fYmxvY2tGcmVlaW5nVGhyZWFkKTsKKyAgICBtX2ZyZWVCbG9j
a0xvY2suSW5pdCgpOwogfQogCiBCbG9ja0FsbG9jYXRvcjo6fkJsb2NrQWxsb2NhdG9yKCkKIHsK
ICAgICByZWxlYXNlRnJlZUJsb2NrcygpOwogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVC
bG9ja0NvbmRpdGlvbkxvY2spOworCiAgICAgICAgIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxk
UXVpdCA9IHRydWU7CiAgICAgICAgIG1fZnJlZUJsb2NrQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwog
ICAgIH0KQEAgLTU1LDcgKzU3LDcgQEAgdm9pZCBCbG9ja0FsbG9jYXRvcjo6cmVsZWFzZUZyZWVC
bG9ja3MoKQogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEhlYXBCbG9jayogYmxvY2s7CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVCbG9ja0xvY2sp
OworICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2ZyZWVCbG9ja0xvY2spOwog
ICAgICAgICAgICAgaWYgKCFtX251bWJlck9mRnJlZUJsb2NrcykKICAgICAgICAgICAgICAgICBi
bG9jayA9IDA7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTc2LDcgKzc4LDggQEAgdm9pZCBCbG9j
a0FsbG9jYXRvcjo6d2FpdEZvclJlbGF0aXZlVGltZQogewogICAgIGlmIChtX2Jsb2NrRnJlZWlu
Z1RocmVhZFNob3VsZFF1aXQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2ZyZWVCbG9ja0NvbmRp
dGlvbi50aW1lZFdhaXQobV9mcmVlQmxvY2tMb2NrLCBjdXJyZW50VGltZSgpICsgcmVsYXRpdmUp
OworCisgICAgbV9mcmVlQmxvY2tDb25kaXRpb24udGltZWRXYWl0KG1fZnJlZUJsb2NrQ29uZGl0
aW9uTG9jaywgY3VycmVudFRpbWUoKSArIHJlbGF0aXZlKTsKIH0KIAogdm9pZCBCbG9ja0FsbG9j
YXRvcjo6d2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUgcmVsYXRpdmUpCkBAIC04NSw3ICs4OCw3
IEBAIHZvaWQgQmxvY2tBbGxvY2F0b3I6OndhaXRGb3JSZWxhdGl2ZVRpbWUKICAgICAvLyBmcmVx
dWVudGx5LiBJdCB3b3VsZCBvbmx5IGJlIGEgYnVnIGlmIHRoaXMgZnVuY3Rpb24gZmFpbGVkIHRv
IHJldHVybgogICAgIC8vIHdoZW4gaXQgd2FzIGFza2VkIHRvIGRvIHNvLgogICAgIAotICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVCbG9ja0xvY2spOworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2ZyZWVCbG9ja0NvbmRpdGlvbkxvY2spOwogICAgIHdhaXRGb3JSZWxhdGl2ZVRpbWVXaGls
ZUhvbGRpbmdMb2NrKHJlbGF0aXZlKTsKIH0KIApAQCAtMTIwLDcgKzEyMyw3IEBAIHZvaWQgQmxv
Y2tBbGxvY2F0b3I6OmJsb2NrRnJlZWluZ1RocmVhZE0KICAgICAgICAgd2hpbGUgKCFtX2Jsb2Nr
RnJlZWluZ1RocmVhZFNob3VsZFF1aXQpIHsKICAgICAgICAgICAgIEhlYXBCbG9jayogYmxvY2s7
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJl
ZUJsb2NrTG9jayk7CisgICAgICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2Zy
ZWVCbG9ja0xvY2spOwogICAgICAgICAgICAgICAgIGlmIChtX251bWJlck9mRnJlZUJsb2NrcyA8
PSBkZXNpcmVkTnVtYmVyT2ZGcmVlQmxvY2tzKQogICAgICAgICAgICAgICAgICAgICBibG9jayA9
IDA7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9CbG9ja0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEyMDA0MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UQ1NwaW5Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTU4LDE5ICs1OSwyMiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBt
X251bWJlck9mRnJlZUJsb2NrczsKICAgICBib29sIG1faXNDdXJyZW50bHlBbGxvY2F0aW5nOwog
ICAgIGJvb2wgbV9ibG9ja0ZyZWVpbmdUaHJlYWRTaG91bGRRdWl0OwotICAgIE11dGV4IG1fZnJl
ZUJsb2NrTG9jazsKKyAgICBTcGluTG9jayBtX2ZyZWVCbG9ja0xvY2s7CisgICAgTXV0ZXggbV9m
cmVlQmxvY2tDb25kaXRpb25Mb2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBtX2ZyZWVCbG9ja0Nv
bmRpdGlvbjsKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fYmxvY2tGcmVlaW5nVGhyZWFkOwogfTsK
IAogaW5saW5lIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBCbG9ja0FsbG9jYXRvcjo6YWxsb2NhdGUo
KQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVCbG9ja0xvY2spOwotICAgIG1faXND
dXJyZW50bHlBbGxvY2F0aW5nID0gdHJ1ZTsKLSAgICBpZiAobV9udW1iZXJPZkZyZWVCbG9ja3Mp
IHsKLSAgICAgICAgQVNTRVJUKCFtX2ZyZWVCbG9ja3MuaXNFbXB0eSgpKTsKLSAgICAgICAgbV9u
dW1iZXJPZkZyZWVCbG9ja3MtLTsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUJsb2Nrcy5yZW1vdmVI
ZWFkKCktPm1fYWxsb2NhdGlvbjsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tl
cigmbV9mcmVlQmxvY2tMb2NrKTsKKyAgICAgICAgbV9pc0N1cnJlbnRseUFsbG9jYXRpbmcgPSB0
cnVlOworICAgICAgICBpZiAobV9udW1iZXJPZkZyZWVCbG9ja3MpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbV9mcmVlQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtX251bWJlck9mRnJl
ZUJsb2Nrcy0tOworICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUJsb2Nrcy5yZW1vdmVIZWFkKCkt
Pm1fYWxsb2NhdGlvbjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEFTU0VSVChtX2ZyZWVCbG9j
a3MuaXNFbXB0eSgpKTsKQEAgLTgyLDcgKzg2LDcgQEAgaW5saW5lIFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCBCbG9ja0FsbG9jYQogCiBpbmxpbmUgdm9pZCBCbG9ja0FsbG9jYXRvcjo6ZGVhbGxvY2F0
ZShQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbikKIHsKLSAgICBNdXRleExvY2tlciBs
b2NrZXIobV9mcmVlQmxvY2tMb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fZnJl
ZUJsb2NrTG9jayk7CiAgICAgSGVhcEJsb2NrKiBoZWFwQmxvY2sgPSBuZXcoTm90TnVsbCwgYWxs
b2NhdGlvbi5iYXNlKCkpIEhlYXBCbG9jayhhbGxvY2F0aW9uKTsKICAgICBtX2ZyZWVCbG9ja3Mu
cHVzaChoZWFwQmxvY2spOwogICAgIG1fbnVtYmVyT2ZGcmVlQmxvY2tzKys7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxMjAwNDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAgQ29waWVkU3BhY2U6OkNvcGllZFNwYWNlKEhlYXAqIGhl
YXApCiAgICAgLCBtX2luQ29weWluZ1BoYXNlKGZhbHNlKQogICAgICwgbV9udW1iZXJPZkxvYW5l
ZEJsb2NrcygwKQogeworICAgIG1fdG9TcGFjZUxvY2suSW5pdCgpOwogfQogCiBDb3BpZWRTcGFj
ZTo6fkNvcGllZFNwYWNlKCkKQEAgLTE2OCw3ICsxNjksNyBAQCB2b2lkIENvcGllZFNwYWNlOjpk
b25lRmlsbGluZ0Jsb2NrKENvcGllCiAgICAgfQogCiAgICAgewotICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV90b1NwYWNlTG9jayk7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigm
bV90b1NwYWNlTG9jayk7CiAgICAgICAgIG1fdG9TcGFjZS0+cHVzaChibG9jayk7CiAgICAgICAg
IG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRl
cnByZXRfY2FzdDxCaXRzPihibG9jaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxMjAwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAj
aW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oPgogI2luY2x1ZGUgPHd0Zi9QYWdl
QmxvY2suaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RD
U3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTEwMCw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIFRpbnlCbG9vbUZp
bHRlciBtX2Jsb2NrRmlsdGVyOwogICAgIEhhc2hTZXQ8Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0
OwogCi0gICAgTXV0ZXggbV90b1NwYWNlTG9jazsKKyAgICBTcGluTG9jayBtX3RvU3BhY2VMb2Nr
OwogCiAgICAgRG91Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+KiBtX3RvU3BhY2U7CiAgICAgRG91
Ymx5TGlua2VkTGlzdDxIZWFwQmxvY2s+KiBtX2Zyb21TcGFjZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMTIwMDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NiArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6Ok1h
cmtTdGFja1NlZ21lbnRBbGxvY2F0b3IoKQogICAgIDogbV9uZXh0RnJlZVNlZ21lbnQoMCkKIHsK
KyAgICBtX2xvY2suSW5pdCgpOwogfQogCiBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjp+TWFy
a1N0YWNrU2VnbWVudEFsbG9jYXRvcigpCkBAIC01Niw3ICs1Nyw3IEBAIE1hcmtTdGFja1NlZ21l
bnRBbGxvY2F0b3I6On5NYXJrU3RhY2tTZWcKIE1hcmtTdGFja1NlZ21lbnQqIE1hcmtTdGFja1Nl
Z21lbnRBbGxvY2F0b3I6OmFsbG9jYXRlKCkKIHsKICAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7
CiAgICAgICAgIGlmIChtX25leHRGcmVlU2VnbWVudCkgewogICAgICAgICAgICAgTWFya1N0YWNr
U2VnbWVudCogcmVzdWx0ID0gbV9uZXh0RnJlZVNlZ21lbnQ7CiAgICAgICAgICAgICBtX25leHRG
cmVlU2VnbWVudCA9IHJlc3VsdC0+bV9wcmV2aW91czsKQEAgLTY5LDcgKzcwLDcgQEAgTWFya1N0
YWNrU2VnbWVudCogTWFya1N0YWNrU2VnbWVudEFsbG9jYQogCiB2b2lkIE1hcmtTdGFja1NlZ21l
bnRBbGxvY2F0b3I6OnJlbGVhc2UoTWFya1N0YWNrU2VnbWVudCogc2VnbWVudCkKIHsKLSAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1f
bG9jayk7CiAgICAgc2VnbWVudC0+bV9wcmV2aW91cyA9IG1fbmV4dEZyZWVTZWdtZW50OwogICAg
IG1fbmV4dEZyZWVTZWdtZW50ID0gc2VnbWVudDsKIH0KQEAgLTc4LDcgKzc5LDcgQEAgdm9pZCBN
YXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpzaHJpbmtSZQogewogICAgIE1hcmtTdGFja1NlZ21l
bnQqIHNlZ21lbnRzOwogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICAgICAgc2VnbWVu
dHMgPSBtX25leHRGcmVlU2VnbWVudDsKICAgICAgICAgbV9uZXh0RnJlZVNlZ21lbnQgPSAwOwog
ICAgIH0KQEAgLTE0MiwyMyArMTQzLDMxIEBAIGJvb2wgTWFya1N0YWNrQXJyYXk6OnJlZmlsbCgp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTWFya1N0YWNrQXJyYXk6OmRvbmF0ZVNvbWVD
ZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OmRvbmF0
ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKKyAgICAvLyBUcnkgdG8gZG9u
YXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNvcHlpbmcgY29zdHMsCisg
ICAgLy8gd2UgcHJlZmVyIGRvbmF0aW5nIHdob2xlIHNlZ21lbnRzIG92ZXIgZG9uYXRpbmcgaW5k
aXZpZHVhbCBjZWxscywKKyAgICAvLyBldmVuIGlmIHRoaXMgc2tld3MgYXdheSBmcm9tIG91ciAx
IC8gMiB0YXJnZXQuCisKICAgICBBU1NFUlQobV9zZWdtZW50Q2FwYWNpdHkgPT0gb3RoZXIubV9z
ZWdtZW50Q2FwYWNpdHkpOworCisgICAgc2l6ZV90IHNlZ21lbnRzVG9Eb25hdGUgPSAobV9udW1i
ZXJPZlByZXZpb3VzU2VnbWVudHMgKyAyIC0gMSkgLyAyOyAvLyBSb3VuZCB1cCB0byBkb25hdGUg
MSAvIDEgcHJldmlvdXMgc2VnbWVudHMuCisKKyAgICBpZiAoIXNlZ21lbnRzVG9Eb25hdGUpIHsK
KyAgICAgICAgc2l6ZV90IGNlbGxzVG9Eb25hdGUgPSBtX3RvcCAvIDI7IC8vIFJvdW5kIGRvd24g
dG8gZG9uYXRlIDAgLyAxIGNlbGxzLgorICAgICAgICB3aGlsZSAoY2VsbHNUb0RvbmF0ZS0tKSB7
CisgICAgICAgICAgICBBU1NFUlQobV90b3ApOworICAgICAgICAgICAgb3RoZXIuYXBwZW5kKHJl
bW92ZUxhc3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHZh
bGlkYXRlUHJldmlvdXMoKTsKICAgICBvdGhlci52YWxpZGF0ZVByZXZpb3VzKCk7Ci0gICAgICAg
IAotICAgIC8vIEZhc3QgY2hlY2s6IHNlZSBpZiB0aGUgb3RoZXIgbWFyayBzdGFjayBhbHJlYWR5
IGhhcyBlbm91Z2ggc2VnbWVudHMuCi0gICAgaWYgKG90aGVyLm1fbnVtYmVyT2ZQcmV2aW91c1Nl
Z21lbnRzICsgMSA+PSBPcHRpb25zOjptYXhpbXVtTnVtYmVyT2ZTaGFyZWRTZWdtZW50cykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBzaXplX3QgbnVtYmVyT2ZDZWxsc1Rv
S2VlcCA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZkNlbGxzVG9LZWVwOwotICAgIEFTU0VSVCht
X3RvcCA+IG51bWJlck9mQ2VsbHNUb0tlZXAgfHwgbV90b3BTZWdtZW50LT5tX3ByZXZpb3VzKTsK
LSAgICAgICAgCi0gICAgLy8gTG9va3MgbGlrZSB3ZSBzaG91bGQgZG9uYXRlISBHaXZlIHRoZSBv
dGhlciBtYXJrIHN0YWNrIGFsbCBvZiBvdXIKLSAgICAvLyBwcmV2aW91cyBzZWdtZW50cywgYW5k
IHRoZW4gdG9wIGl0IG9mZi4KKwogICAgIE1hcmtTdGFja1NlZ21lbnQqIHByZXZpb3VzID0gbV90
b3BTZWdtZW50LT5tX3ByZXZpb3VzOwotICAgIHdoaWxlIChwcmV2aW91cykgeworICAgIHdoaWxl
IChzZWdtZW50c1RvRG9uYXRlLS0pIHsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzKTsKICAgICAg
ICAgQVNTRVJUKG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzKTsKIAogICAgICAgICBNYXJrU3Rh
Y2tTZWdtZW50KiBjdXJyZW50ID0gcHJldmlvdXM7CkBAIC0xNzAsMjMgKzE3OSwxOCBAQCBib29s
IE1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyhNCiAgICAgICAgIG1fbnVtYmVyT2ZQ
cmV2aW91c1NlZ21lbnRzLS07CiAgICAgICAgIG90aGVyLm1fbnVtYmVyT2ZQcmV2aW91c1NlZ21l
bnRzKys7CiAgICAgfQotICAgIEFTU0VSVCghbV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHMpOwot
ICAgIG1fdG9wU2VnbWVudC0+bV9wcmV2aW91cyA9IDA7CisgICAgbV90b3BTZWdtZW50LT5tX3By
ZXZpb3VzID0gcHJldmlvdXM7CisKICAgICB2YWxpZGF0ZVByZXZpb3VzKCk7CiAgICAgb3RoZXIu
dmFsaWRhdGVQcmV2aW91cygpOwotICAgICAgICAKLSAgICAvLyBOb3cgdG9wIG9mZi4gV2Ugd2Fu
dCB0byBrZWVwIGF0IGEgbWluaW11bSBudW1iZXJPZkNlbGxzVG9LZWVwLCBidXQgaWYKLSAgICAv
LyB3ZSByZWFsbHkgaGF2ZSBhIGxvdCBvZiB3b3JrLCB3ZSBnaXZlIHVwIGhhbGYuCi0gICAgaWYg
KG1fdG9wID4gbnVtYmVyT2ZDZWxsc1RvS2VlcCAqIDIpCi0gICAgICAgIG51bWJlck9mQ2VsbHNU
b0tlZXAgPSBtX3RvcCAvIDI7Ci0gICAgd2hpbGUgKG1fdG9wID4gbnVtYmVyT2ZDZWxsc1RvS2Vl
cCkKLSAgICAgICAgb3RoZXIuYXBwZW5kKHJlbW92ZUxhc3QoKSk7Ci0gICAgICAgIAotICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIE1hcmtTdGFja0FycmF5OjpzdGVhbFNvbWVDZWxsc0Zyb20o
TWFya1N0YWNrQXJyYXkmIG90aGVyKQordm9pZCBNYXJrU3RhY2tBcnJheTo6c3RlYWxTb21lQ2Vs
bHNGcm9tKE1hcmtTdGFja0FycmF5JiBvdGhlciwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCkKIHsK
KyAgICAvLyBUcnkgdG8gc3RlYWwgMSAvIE50aCBvZiB0aGUgc2hhcmVkIGFycmF5LCB3aGVyZSBO
IGlzIHRoZSBudW1iZXIgb2YgaWRsZSB0aHJlYWRzLgorICAgIC8vIFRvIHJlZHVjZSBjb3B5aW5n
IGNvc3RzLCB3ZSBwcmVmZXIgc3RlYWxpbmcgYSB3aG9sZSBzZWdtZW50IG92ZXIgc3RlYWxpbmcK
KyAgICAvLyBpbmRpdmlkdWFsIGNlbGxzLCBldmVuIGlmIHRoaXMgc2tld3MgYXdheSBmcm9tIG91
ciAxIC8gTiB0YXJnZXQuCisKICAgICBBU1NFUlQobV9zZWdtZW50Q2FwYWNpdHkgPT0gb3RoZXIu
bV9zZWdtZW50Q2FwYWNpdHkpOwogICAgIHZhbGlkYXRlUHJldmlvdXMoKTsKICAgICBvdGhlci52
YWxpZGF0ZVByZXZpb3VzKCk7CkBAIC0yMTEsMTAgKzIxNSw4IEBAIHZvaWQgTWFya1N0YWNrQXJy
YXk6OnN0ZWFsU29tZUNlbGxzRnJvbSgKICAgICAgICAgb3RoZXIudmFsaWRhdGVQcmV2aW91cygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgICAgICAKLSAgICAvLyBPdGhlcndpc2UgZHJh
aW4gMS9OdGggb2YgdGhlIHNoYXJlZCBhcnJheSB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YKLSAg
ICAvLyB3b3JrZXJzLCBvciBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZDZWxsc1RvS2VlcCwgd2hp
Y2hldmVyIGlzIGJpZ2dlci4KLSAgICBzaXplX3QgbnVtYmVyT2ZDZWxsc1RvU3RlYWwgPSBzdGQ6
Om1heCgoc2l6ZV90KU9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZkNlbGxzVG9LZWVwLCBvdGhlci5z
aXplKCkgLyBPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vycyk7CisKKyAgICBzaXplX3QgbnVtYmVy
T2ZDZWxsc1RvU3RlYWwgPSAob3RoZXIuc2l6ZSgpICsgaWRsZVRocmVhZENvdW50IC0gMSkgLyBp
ZGxlVGhyZWFkQ291bnQ7IC8vIFJvdW5kIHVwIHRvIHN0ZWFsIDEgLyAxLgogICAgIHdoaWxlIChu
dW1iZXJPZkNlbGxzVG9TdGVhbC0tID4gMCAmJiBvdGhlci5jYW5SZW1vdmVMYXN0KCkpCiAgICAg
ICAgIGFwcGVuZChvdGhlci5yZW1vdmVMYXN0KCkpOwogfQpAQCAtMzQzLDE4ICszNDUsMzEgQEAg
QUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKAogICAgIGNlbGwtPm1ldGhv
ZFRhYmxlKCktPnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRv
cik7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZVNsb3coKQordm9pZCBTbG90VmlzaXRv
cjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiB7Ci0gICAgLy8gUmVmdXNlIHRvIGRvbmF0ZSBpZiBz
aGFyZWQgaGFzIG1vcmUgZW50cmllcyB0aGFuIEkgZG8uCi0gICAgaWYgKG1fc2hhcmVkLm1fc2hh
cmVkTWFya1N0YWNrLnNpemUoKSA+IG1fc3RhY2suc2l6ZSgpKQorICAgIC8vIE5PVEU6IEJlY2F1
c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBjYW4gYWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5k
CisgICAgLy8gYXNzdW1lIHRoYXQgZG9uYXRpbmcgaXMgbm90IHByb2ZpdGFibGUuCisKKyAgICAv
LyBBdm9pZCBsb2NraW5nIHdoZW4gYSB0aHJlYWQgcmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBv
YmplY3QgZ3JhcGguCisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJu
OwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKLSAgICBp
ZiAobV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjaykp
IHsKLSAgICAgICAgLy8gT25seSB3YWtlIHVwIHRocmVhZHMgaWYgdGhlIHNoYXJlZCBzdGFjayBp
cyBiaWcgZW5vdWdoOyBvdGhlcndpc2UgYXNzdW1lIHRoYXQKLSAgICAgICAgLy8gaXQncyBtb3Jl
IHByb2ZpdGFibGUgZm9yIHVzIHRvIGp1c3Qgc2NhbiB0aGlzIG91cnNlbHZlcyBsYXRlci4KLSAg
ICAgICAgaWYgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSA+PSBPcHRpb25zOjpz
aGFyZWRTdGFja1dha2V1cFRocmVzaG9sZCkKLSAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2lu
Z0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKLSAgICB9CisKKyAgICAvLyBJZiB0aGVyZSdzIGFscmVh
ZHkgc29tZSBzaGFyZWQgd29yayBxdWV1ZWQgdXAsIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1l
CisgICAgLy8gdGhhdCBkb25hdGluZyBtb3JlIGlzIG5vdCBwcm9maXRhYmxlLgorICAgIGlmICht
X3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIElmIHdlJ3JlIGNvbnRlbmRpbmcgb24gdGhlIGxvY2ssIGJlIGNvbnNlcnZhdGl2ZSBhbmQg
YXNzdW1lIHRoYXQgYW5vdGhlcgorICAgIC8vIHRocmVhZCBpcyBhbHJlYWR5IGRvbmF0aW5nLgor
ICAgIE11dGV4VHJ5TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICBp
ZiAoIWxvY2tlci5sb2NrZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3RoZXJ3aXNl
LCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KKyAg
ICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrKTsK
KworICAgIGlmIChtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMpCisgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRp
dGlvbi5icm9hZGNhc3QoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQpAQCAtNDU0
LDcgKzQ2OSw4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20obV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2spOwor
ICAgICAgICAgICAgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzIC0gbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VyczsKKyAgICAg
ICAgICAgIG1fc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0
YWNrLCBpZGxlVGhyZWFkQ291bnQpOwogICAgICAgICAgICAgbV9zaGFyZWQubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDEyMDA0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4
ICsyOCw4IEBACiAKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkhhbmRsZVR5
cGVzLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKKyNpbmNs
dWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJVbmNvbmRp
dGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVlRhYmxlU3BlY3RydW0uaCIKQEAgLTM4LDEx
ICszOCwxMiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT1NBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2su
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiAjaWYgRU5BQkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCiAjZGVmaW5lIE1BUktfTE9H
X01FU1NBR0UwKG1lc3NhZ2UpIGRhdGFMb2cobWVzc2FnZSkKQEAgLTExMiw3ICsxMTMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzaHJpbmtSZXNlcnZlKCk7CiAgICAgICAgIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIE11dGV4IG1fbG9jazsKKyAgICAgICAgU3BpbkxvY2sgbV9s
b2NrOwogICAgICAgICBNYXJrU3RhY2tTZWdtZW50KiBtX25leHRGcmVlU2VnbWVudDsKICAgICB9
OwogCkBAIC0xMjksMTAgKzEzMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAg
ICAgYm9vbCBpc0VtcHR5KCk7CiAgICAgICAgIAotICAgICAgICBib29sIGNhbkRvbmF0ZVNvbWVD
ZWxscygpOyAvLyBSZXR1cm5zIGZhbHNlIGlmIHlvdSBzaG91bGQgZGVmaW5pdGVseSBub3QgY2Fs
bCBkb2FudGVTb21lQ2VsbHNUbygpLgotICAgICAgICBib29sIGRvbmF0ZVNvbWVDZWxsc1RvKE1h
cmtTdGFja0FycmF5JiBvdGhlcik7IC8vIFJldHVybnMgdHJ1ZSBpZiBzb21lIGNlbGxzIHdlcmUg
ZG9uYXRlZC4KKyAgICAgICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYg
b3RoZXIpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0
YWNrQXJyYXkmIG90aGVyKTsKKyAgICAgICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0
YWNrQXJyYXkmIG90aGVyLCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKIAogICAgICAgICBzaXpl
X3Qgc2l6ZSgpOwogCkBAIC00MTQsMjIgKzQxNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBNYXJrU3RhY2tBcnJheTo6
Y2FuRG9uYXRlU29tZUNlbGxzKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZkNlbGxz
VG9LZWVwID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mQ2VsbHNUb0tlZXA7Ci0gICAgICAgIC8v
IEFub3RoZXIgY2hlY2s6IHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBjZWxscyB0byB3YXJyYW50IGRv
bmF0aW9uLgotICAgICAgICBpZiAobV90b3AgPD0gbnVtYmVyT2ZDZWxsc1RvS2VlcCkgewotICAg
ICAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBtaWdodCBub3Qgd2FudCB0byBkb25h
dGUgYW55dGhpbmc7IGNoZWNrIGlmIHdlIGhhdmUKLSAgICAgICAgICAgIC8vIGFub3RoZXIgZnVs
bCBzZWdtZW50LiBJZiBub3QsIHRoZW4gZG9uJ3QgZG9uYXRlLgotICAgICAgICAgICAgaWYgKCFt
X3RvcFNlZ21lbnQtPm1fcHJldmlvdXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV90b3BTZWdtZW50LT5tX3ByZXZpb3Vz
LT5tX3RvcCA9PSBtX3NlZ21lbnRDYXBhY2l0eSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQogICAgIGlubGluZSBzaXplX3QgTWFya1N0YWNrQXJy
YXk6OnNpemUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdG9wICsgbV9zZWdtZW50Q2FwYWNp
dHkgKiBtX251bWJlck9mUHJldmlvdXNTZWdtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMTIwMDQwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTUgKzY4
LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHZvaWQq
LCBzaXplX3QpOwogCi0gICAgdm9pZCBkb25hdGVTbG93KCk7Ci0gICAgCi0gICAgdm9pZCBkb25h
dGVLbm93blBhcmFsbGVsKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdGFjay5jYW5Eb25hdGVT
b21lQ2VsbHMoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZG9uYXRlU2xvdygpOwot
ICAgIH0KLSAgICAKKyAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKKwogICAgIENvcGll
ZEJsb2NrKiBtX2NvcHlCbG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxMjAwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksNiBA
QCBkb3VibGUgZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0OwogCiB1bnNpZ25lZCBtaW5p
bXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2U7CiB1bnNpZ25lZCBnY01hcmtTdGFja1Nl
Z21lbnRTaXplOwotdW5zaWduZWQgbWluaW11bU51bWJlck9mQ2VsbHNUb0tlZXA7Ci11bnNpZ25l
ZCBtYXhpbXVtTnVtYmVyT2ZTaGFyZWRTZWdtZW50czsKLXVuc2lnbmVkIHNoYXJlZFN0YWNrV2Fr
ZXVwVGhyZXNob2xkOwogdW5zaWduZWQgbnVtYmVyT2ZHQ01hcmtlcnM7CiB1bnNpZ25lZCBvcGFx
dWVSb290TWVyZ2VUaHJlc2hvbGQ7CiAKQEAgLTE4OCwyMCArMTg1LDE3IEBAIHZvaWQgaW5pdGlh
bGl6ZU9wdGlvbnMoKQogICAgIAogICAgIFNFVChkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3Jt
YXQsIDIpOwogICAgIAotICAgIFNFVChtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFu
Y2UsIDEwMDAwKTsKKyAgICBTRVQobWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNl
LCAxMDApOwogICAgIFNFVChnY01hcmtTdGFja1NlZ21lbnRTaXplLCAgICAgICAgICAgICAgIHBh
Z2VTaXplKCkpOwotICAgIFNFVChtaW5pbXVtTnVtYmVyT2ZDZWxsc1RvS2VlcCwgICAgICAgICAg
IDEwKTsKLSAgICBTRVQobWF4aW11bU51bWJlck9mU2hhcmVkU2VnbWVudHMsICAgICAgICAzKTsK
LSAgICBTRVQoc2hhcmVkU3RhY2tXYWtldXBUaHJlc2hvbGQsICAgICAgICAgICAxKTsKICAgICBT
RVQob3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAgICAgICAgICAgICAxMDAwKTsKIAogICAgIGlu
dCBjcHVzVG9Vc2UgPSAxOwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBjcHVzVG9Vc2Ug
PSBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsKICNlbmRpZgotICAgIC8vIFdlIGRvbid0
IHNjYWxlIHNvIHdlbGwgYmV5b25kIDQuCi0gICAgaWYgKGNwdXNUb1VzZSA+IDQpCi0gICAgICAg
IGNwdXNUb1VzZSA9IDQ7CisgICAgLy8gV2UgZG9uJ3Qgc2NhbGUgc28gd2VsbCBiZXlvbmQgNi4K
KyAgICBpZiAoY3B1c1RvVXNlID4gNikKKyAgICAgICAgY3B1c1RvVXNlID0gNjsKICAgICAvLyBC
ZSBwYXJhbm9pZCwgaXQgaXMgdGhlIE9TIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYWZ0ZXIgYWxsLgog
ICAgIGlmIChjcHVzVG9Vc2UgPCAxKQogICAgICAgICBjcHVzVG9Vc2UgPSAxOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTIwMDQwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw5ICs3NSw2IEBAIGV4dGVybiBkb3VibGUgZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm8K
IAogZXh0ZXJuIHVuc2lnbmVkIG1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZTsK
IGV4dGVybiB1bnNpZ25lZCBnY01hcmtTdGFja1NlZ21lbnRTaXplOwotZXh0ZXJuIHVuc2lnbmVk
IG1pbmltdW1OdW1iZXJPZkNlbGxzVG9LZWVwOwotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1OdW1i
ZXJPZlNoYXJlZFNlZ21lbnRzOwotZXh0ZXJuIHVuc2lnbmVkIHNoYXJlZFN0YWNrV2FrZXVwVGhy
ZXNob2xkOwogSlNfRVhQT1JUREFUQSBleHRlcm4gdW5zaWduZWQgbnVtYmVyT2ZHQ01hcmtlcnM7
CiBKU19FWFBPUlREQVRBIGV4dGVybiB1bnNpZ25lZCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQ7
CiAK
</data>
<flag name="review"
          id="154426"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>