<?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>148157</bug_id>
          
          <creation_ts>2015-08-18 18:44:39 -0700</creation_ts>
          <short_desc>[JSC] Optimize more cases of something-compared-to-null/undefined</short_desc>
          <delta_ts>2015-08-18 21:09:17 -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>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1118773</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-18 18:44:39 -0700</bug_when>
    <thetext>[JSC] Optimize more cases of something-compared-to-null</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118779</commentid>
    <comment_count>1</comment_count>
      <attachid>259341</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-18 19:04:00 -0700</bug_when>
    <thetext>Created attachment 259341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118780</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-18 19:21:42 -0700</bug_when>
    <thetext>                                                          Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                            4.3320+-0.0587            4.1412+-0.4001          might be 1.0461x faster
   3d-morph                                           4.7820+-0.0983            4.7555+-0.0256        
   3d-raytrace                                        4.7429+-0.1841     ?      4.7596+-0.3667        ?
   access-binary-trees                                1.7972+-0.0826            1.7513+-0.0463          might be 1.0262x faster
   access-fannkuch                                    4.8633+-0.0609     ?      4.9108+-0.1503        ?
   access-nbody                                       2.2955+-0.2588            2.2356+-0.0662          might be 1.0268x faster
   access-nsieve                                      2.7100+-0.0253     ?      2.7568+-0.0653        ? might be 1.0173x slower
   bitops-3bit-bits-in-byte                           1.3252+-0.0479     ?      1.3259+-0.0522        ?
   bitops-bits-in-byte                                3.4797+-0.1449            3.2645+-0.4562          might be 1.0659x faster
   bitops-bitwise-and                                 1.8219+-0.0141            1.8130+-0.0175        
   bitops-nsieve-bits                                 2.7290+-0.1214     ?      2.7855+-0.2066        ? might be 1.0207x slower
   controlflow-recursive                              1.8038+-0.0341     ?      1.8857+-0.0777        ? might be 1.0454x slower
   crypto-aes                                         3.4129+-0.1156     ?      3.4209+-0.2994        ?
   crypto-md5                                         2.1389+-0.0635     ?      2.2063+-0.1436        ? might be 1.0315x slower
   crypto-sha1                                        2.2618+-0.5480            2.1058+-0.1946          might be 1.0741x faster
   date-format-tofte                                  6.3775+-0.3880            6.1036+-0.1890          might be 1.0449x faster
   date-format-xparb                                  4.0027+-0.1212     ?      4.0540+-0.1840        ? might be 1.0128x slower
   math-cordic                                        2.5290+-0.0755            2.5284+-0.0775        
   math-partial-sums                                  4.9065+-0.1698     ?      4.9472+-0.2322        ?
   math-spectral-norm                                 1.6378+-0.0578     ?      1.6553+-0.1024        ? might be 1.0107x slower
   regexp-dna                                         5.8759+-0.1207     ?      5.9268+-0.1677        ?
   string-base64                                      3.9315+-0.3277            3.8875+-0.1517          might be 1.0113x faster
   string-fasta                                       5.3929+-0.0861            5.2944+-0.1803          might be 1.0186x faster
   string-tagcloud                                    7.5638+-0.2792            7.3725+-0.1272          might be 1.0260x faster
   string-unpack-code                                17.2087+-0.5402     ?     17.4806+-1.0212        ? might be 1.0158x slower
   string-validate-input                              4.2167+-0.2597            4.1940+-0.2764        

   &lt;arithmetic&gt;                                       4.1592+-0.0470            4.1370+-0.0261          might be 1.0054x faster

                                                          Conf#1                    Conf#2                                      
LongSpider:
   3d-cube                                          764.2908+-5.7906     ?    769.5660+-11.9344       ?
   3d-morph                                        1448.6265+-3.7010     ?   1451.1602+-7.9621        ?
   3d-raytrace                                      576.5409+-5.8986          575.7640+-3.8432        
   access-binary-trees                              880.0142+-27.3949         868.5279+-12.1178         might be 1.0132x faster
   access-fannkuch                                  264.7452+-11.6713         260.5678+-1.8838          might be 1.0160x faster
   access-nbody                                     489.0494+-0.2718     !    491.2237+-1.4296        ! definitely 1.0044x slower
   access-nsieve                                    476.1485+-4.9304          475.1461+-3.1936        
   bitops-3bit-bits-in-byte                          36.3306+-0.3871           36.2047+-0.4519        
   bitops-bits-in-byte                               71.7745+-1.0244           71.3761+-1.7227        
   bitops-nsieve-bits                               370.2285+-2.4953          368.9565+-0.9128        
   controlflow-recursive                            429.2131+-0.5509     ?    430.1453+-2.2431        ?
   crypto-aes                                       559.8577+-10.6826    ?    562.0433+-8.2789        ?
   crypto-md5                                       474.9011+-2.3454          473.6127+-10.3663       
   crypto-sha1                                      588.6923+-8.0143          586.9300+-3.4435        
   date-format-tofte                                477.6645+-4.2640     ?    483.3655+-9.4265        ? might be 1.0119x slower
   date-format-xparb                                597.7426+-11.4554         596.8495+-5.8417        
   hash-map                                         147.9409+-2.6607          147.2597+-2.1779        
   math-cordic                                      467.5943+-1.0007     ?    468.8848+-2.1121        ?
   math-partial-sums                                452.9103+-0.7556     ^    449.0076+-0.3915        ^ definitely 1.0087x faster
   math-spectral-norm                               530.1084+-2.9211          529.0294+-0.3170        
   string-base64                                    339.6539+-3.0193     ?    342.1121+-4.4725        ?
   string-fasta                                     360.5400+-5.4084          359.2713+-3.7712        
   string-tagcloud                                  169.2455+-2.4820          168.0764+-0.5958        

   &lt;geometric&gt;                                      380.3246+-0.8561          379.7191+-1.0232          might be 1.0016x faster

                                                          Conf#1                    Conf#2                                      
V8Spider:
   crypto                                            45.9628+-1.5058     ?     46.3597+-2.1320        ?
   deltablue                                         84.1795+-3.2171     ?     84.7140+-7.2355        ?
   earley-boyer                                      38.4523+-1.2901     ?     40.6664+-3.9299        ? might be 1.0576x slower
   raytrace                                          30.5253+-1.6546     !     33.6824+-0.7479        ! definitely 1.1034x slower
   regexp                                            59.6331+-0.6021           59.2955+-1.0740        
   richards                                          62.3392+-2.0380           61.7024+-2.2068          might be 1.0103x faster
   splay                                             36.0264+-2.0624     ?     36.5447+-3.5053        ? might be 1.0144x slower

   &lt;geometric&gt;                                       48.2323+-0.2501     !     49.3820+-0.2657        ! definitely 1.0238x slower

                                                          Conf#1                    Conf#2                                      
Octane:
   encrypt                                           0.16673+-0.00074          0.16628+-0.00137       
   decrypt                                           3.13884+-0.01791    ?     3.14155+-0.00658       ?
   deltablue                                x2       0.14754+-0.00179    ?     0.15075+-0.00310       ? might be 1.0217x slower
   earley                                            0.29852+-0.00908          0.29753+-0.01004       
   boyer                                             4.32043+-0.01946          4.29582+-0.06898       
   navier-stokes                            x2       4.67272+-0.00515    ?     4.68349+-0.01595       ?
   raytrace                                 x2       1.05136+-0.04993    ?     1.07392+-0.00854       ? might be 1.0215x slower
   richards                                 x2       0.10396+-0.00150    ?     0.10416+-0.00350       ?
   splay                                    x2       0.37900+-0.00565    ?     0.37964+-0.00875       ?
   regexp                                   x2      23.86281+-1.77487         23.52744+-1.38830         might be 1.0143x faster
   pdfjs                                    x2      36.12210+-0.33474    ?    36.55328+-1.11246       ? might be 1.0119x slower
   mandreel                                 x2      43.03230+-3.43075    ?    43.17738+-2.96491       ?
   gbemu                                    x2      31.15367+-0.65456    ?    31.65615+-0.75394       ? might be 1.0161x slower
   closure                                           0.52942+-0.00824          0.52642+-0.00215       
   jquery                                            6.67151+-0.09495          6.66472+-0.02003       
   box2d                                    x2       9.29647+-0.19048    ?     9.30857+-0.11770       ?
   zlib                                     x2     381.95235+-4.70541        381.33907+-9.37820       
   typescript                               x2     619.03943+-9.04748    ?   633.30298+-12.22184      ? might be 1.0230x slower

   &lt;geometric&gt;                                       5.45195+-0.05700    ?     5.48099+-0.03562       ? might be 1.0053x slower

                                                          Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                          207.651+-3.586            207.220+-2.121         
   audio-beat-detection                               48.834+-1.145             47.795+-0.405           might be 1.0217x faster
   audio-dft                                          89.306+-0.260      ?      89.708+-2.059         ?
   audio-fft                                          33.514+-0.122      ?      33.547+-0.166         ?
   audio-oscillator                                   56.577+-0.415      ?      56.896+-0.168         ?
   imaging-darkroom                                   58.961+-0.200      ?      59.002+-0.210         ?
   imaging-desaturate                                 46.870+-0.511      ?      46.941+-0.314         ?
   imaging-gaussian-blur                              80.170+-0.633             79.841+-0.247         
   json-parse-financial                               35.736+-0.671      ?      36.647+-0.788         ? might be 1.0255x slower
   json-stringify-tinderbox                           23.577+-0.120      ^      21.817+-1.045         ^ definitely 1.0807x faster
   stanford-crypto-aes                                38.884+-1.032      ?      39.027+-0.909         ?
   stanford-crypto-ccm                                32.499+-1.813             32.359+-1.343         
   stanford-crypto-pbkdf2                             90.265+-1.128             89.488+-0.366         
   stanford-crypto-sha256-iterative                   35.626+-1.827             34.668+-0.455           might be 1.0277x faster

   &lt;arithmetic&gt;                                       62.748+-0.168             62.497+-0.354           might be 1.0040x faster

                                                          Conf#1                    Conf#2                                      
JSRegress:
   abc-forward-loop-equal                            28.1307+-0.5253           28.0436+-0.4766        
   abc-postfix-backward-loop                         28.3713+-0.8836     ?     28.5770+-1.2618        ?
   abc-simple-backward-loop                          27.5651+-0.4050     ?     28.0515+-0.4874        ? might be 1.0176x slower
   abc-simple-forward-loop                           27.6914+-0.5197     ?     27.7676+-0.3670        ?
   abc-skippy-loop                                   19.8237+-0.2376     ?     20.0164+-0.1350        ?
   abs-boolean                                        2.2292+-0.0439     ?      2.3989+-0.3961        ? might be 1.0761x slower
   adapt-to-double-divide                            15.5211+-0.2814           15.2526+-0.2950          might be 1.0176x faster
   aliased-arguments-getbyval                         1.0295+-0.1216            1.0037+-0.0483          might be 1.0257x faster
   allocate-big-object                                2.3690+-0.1442            2.3231+-0.1403          might be 1.0198x faster
   arguments-named-and-reflective                    10.4975+-0.3473           10.3997+-0.3189        
   arguments-out-of-bounds                            9.2864+-0.1424            9.2345+-0.2147        
   arguments-strict-mode                              9.4885+-0.6197            9.4305+-0.3421        
   arguments                                          8.3257+-0.1658            8.2400+-0.0873          might be 1.0104x faster
   arity-mismatch-inlining                            0.7332+-0.0650            0.7123+-0.0282          might be 1.0293x faster
   array-access-polymorphic-structure                 5.3979+-0.0686     ?      5.4042+-0.1169        ?
   array-nonarray-polymorhpic-access                 23.0314+-0.7180           22.7224+-0.5355          might be 1.0136x faster
   array-prototype-every                             71.1091+-0.5605           70.9395+-0.9976        
   array-prototype-forEach                           70.6488+-0.5157           70.4292+-1.0656        
   array-prototype-map                               79.0865+-1.5276           77.4642+-1.1635          might be 1.0209x faster
   array-prototype-reduce                            69.5240+-0.7135           69.1218+-0.5812        
   array-prototype-reduceRight                       70.3754+-1.9091           68.8304+-0.5437          might be 1.0224x faster
   array-prototype-some                              71.1717+-0.5233           70.7686+-1.0447        
   array-splice-contiguous                           19.4446+-1.1562           19.1470+-0.2213          might be 1.0155x faster
   array-with-double-add                              3.1600+-0.2621            3.1224+-0.1048          might be 1.0120x faster
   array-with-double-increment                        2.7946+-0.0529     ?      2.8068+-0.1083        ?
   array-with-double-mul-add                          3.9362+-0.1745            3.8589+-0.1547          might be 1.0200x faster
   array-with-double-sum                              2.9370+-0.0518            2.8911+-0.0220          might be 1.0159x faster
   array-with-int32-add-sub                           5.3571+-0.1835            5.3330+-0.2464        
   array-with-int32-or-double-sum                     2.9456+-0.1056     ?      2.9877+-0.1092        ? might be 1.0143x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     28.2842+-0.5059     ?     28.3325+-0.6576        ?
   ArrayBuffer-DataView-alloc-long-lived             11.1048+-0.2004     ?     11.1649+-0.2542        ?
   ArrayBuffer-Int32Array-byteOffset                  3.2808+-0.0119     ?      3.3147+-0.0817        ? might be 1.0103x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     28.9438+-0.8528     ?     28.9451+-0.5636        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     18.5299+-0.4618     ?     18.7118+-0.5215        ?
   ArrayBuffer-Int8Array-alloc-long-lived            10.8255+-0.0641           10.7750+-0.3883        
   ArrayBuffer-Int8Array-alloc                        9.1591+-0.0462     ?      9.2383+-0.4424        ?
   arrowfunction-call                                 9.9349+-0.2505     ?      9.9401+-0.3139        ?
   asmjs_bool_bug                                     6.7295+-0.2035            6.6997+-0.1681        
   assign-custom-setter-polymorphic                   2.0683+-0.0441     !      2.1362+-0.0137        ! definitely 1.0328x slower
   assign-custom-setter                               2.9457+-0.0848     ?      2.9999+-0.0325        ? might be 1.0184x slower
   basic-set                                          6.5880+-0.1586     ?      6.7290+-0.1833        ? might be 1.0214x slower
   big-int-mul                                        3.1361+-0.0043     ?      3.1945+-0.0999        ? might be 1.0186x slower
   boolean-test                                       2.6879+-0.1165            2.6564+-0.0479          might be 1.0118x faster
   branch-fold                                        3.3031+-0.0138     ?      3.3840+-0.1655        ? might be 1.0245x slower
   branch-on-string-as-boolean                       15.4325+-0.3059           15.3499+-0.2670        
   by-val-generic                                     5.5905+-0.0801            5.5674+-0.2210        
   call-spread-apply                                 25.1209+-2.4392           24.9460+-1.8824        
   call-spread-call                                  19.4127+-0.3988     ?     20.7404+-1.6375        ? might be 1.0684x slower
   captured-assignments                               0.3709+-0.0121     ?      0.3927+-0.0368        ? might be 1.0587x slower
   cast-int-to-double                                 4.6940+-0.0742            4.6434+-0.2664          might be 1.0109x faster
   cell-argument                                      6.1630+-0.1405            6.0806+-0.2584          might be 1.0136x faster
   cfg-simplify                                       2.5312+-0.1485     ?      2.5318+-0.0941        ?
   chain-getter-access                                7.6668+-0.0711     ?      7.6726+-0.1124        ?
   cmpeq-obj-to-obj-other                            10.6282+-2.2212     ?     11.4427+-1.1495        ? might be 1.0766x slower
   constant-test                                      4.4823+-0.0849     ?      4.5118+-0.1505        ?
   create-lots-of-functions                          10.3473+-0.2684     ?     10.7435+-1.0656        ? might be 1.0383x slower
   cse-new-array-buffer                               2.1180+-0.2463            2.1055+-0.1409        
   cse-new-array                                      2.0957+-0.1220     ?      2.1797+-0.1979        ? might be 1.0401x slower
   DataView-custom-properties                        33.1803+-0.5985           32.8547+-0.9285        
   delay-tear-off-arguments-strictmode               11.4208+-0.2331     ?     11.6694+-0.2928        ? might be 1.0218x slower
   deltablue-varargs                                155.1306+-3.0487     ?    156.3932+-3.2080        ?
   destructuring-arguments                          155.3320+-2.3028     ?    156.4148+-0.3525        ?
   destructuring-parameters-overridden-by-function   
                                                      0.3864+-0.0141     ?      0.4189+-0.0595        ? might be 1.0842x slower
   destructuring-swap                                 4.3851+-0.1441            4.3820+-0.0657        
   direct-arguments-getbyval                          1.0412+-0.1550            0.9907+-0.0412          might be 1.0509x faster
   div-boolean-double                                 4.9628+-0.0321            4.9142+-0.1934        
   div-boolean                                        7.7978+-0.6165            7.5744+-0.0252          might be 1.0295x faster
   double-get-by-val-out-of-bounds                    3.9719+-0.0568            3.9160+-0.1274          might be 1.0143x faster
   double-pollution-getbyval                          8.1218+-0.1501            8.0888+-0.1350        
   double-pollution-putbyoffset                       3.3989+-0.0495     ?      3.4218+-0.0485        ?
   double-real-use                                   22.7996+-0.7106           22.5508+-0.3103          might be 1.0110x faster
   double-to-int32-typed-array-no-inline              1.8984+-0.1940            1.8184+-0.0575          might be 1.0440x faster
   double-to-int32-typed-array                        1.6630+-0.1542            1.6476+-0.1225        
   double-to-uint32-typed-array-no-inline             1.9619+-0.1876            1.8663+-0.0818          might be 1.0512x faster
   double-to-uint32-typed-array                       1.7013+-0.0698            1.6619+-0.0278          might be 1.0237x faster
   elidable-new-object-dag                           37.5438+-0.6691           37.4698+-0.9780        
   elidable-new-object-roflcopter                    36.1979+-1.1617     ?     36.2987+-0.6831        ?
   elidable-new-object-then-call                     33.8806+-1.0882     ?     33.9935+-0.7506        ?
   elidable-new-object-tree                          41.3449+-0.7828           40.9897+-0.5409        
   empty-string-plus-int                              4.5848+-0.2385            4.5825+-0.2458        
   emscripten-cube2hash                              24.9752+-0.4855     ^     22.5428+-0.7636        ^ definitely 1.1079x faster
   exit-length-on-plain-object                       11.2985+-0.1868     ?     11.5306+-0.5528        ? might be 1.0205x slower
   external-arguments-getbyval                        0.9941+-0.0281            0.9755+-0.0337          might be 1.0190x faster
   external-arguments-putbyval                        1.8720+-0.0353            1.8695+-0.0798        
   fixed-typed-array-storage-var-index                1.1119+-0.1133            1.0455+-0.0083          might be 1.0636x faster
   fixed-typed-array-storage                          0.7607+-0.0231     ?      0.8263+-0.1761        ? might be 1.0863x slower
   Float32Array-matrix-mult                           3.4659+-0.0719     ?      3.5764+-0.1873        ? might be 1.0319x slower
   Float32Array-to-Float64Array-set                  44.7214+-0.4520     ?     44.7829+-0.3646        ?
   Float64Array-alloc-long-lived                     62.8608+-0.9082           62.8035+-1.2982        
   Float64Array-to-Int16Array-set                    55.1075+-2.7049           53.9890+-0.5053          might be 1.0207x faster
   fold-double-to-int                                11.4140+-0.5357           11.2550+-0.1672          might be 1.0141x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.3053+-2.2968     ?     10.3747+-1.2673        ?
   fold-get-by-id-to-multi-get-by-offset              9.2518+-0.7121     ?      9.8688+-1.2182        ? might be 1.0667x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.0374+-2.0844            8.8925+-0.8522          might be 1.0163x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.6640+-0.6937            8.6082+-1.0407        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.4756+-0.4555            8.1950+-1.0046          might be 1.0342x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.3945+-1.0609            3.9868+-1.0151          might be 1.1023x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.2040+-0.7673     ?      8.4639+-0.8969        ? might be 1.0317x slower
   fold-put-by-id-to-multi-put-by-offset              9.7743+-1.6612            8.8141+-0.3255          might be 1.1089x faster
   fold-put-structure                                 5.9258+-1.5907            4.3293+-0.7145          might be 1.3688x faster
   for-of-iterate-array-entries                      10.9377+-0.4700           10.5499+-0.4384          might be 1.0368x faster
   for-of-iterate-array-keys                          3.3280+-0.0624            3.2230+-0.1599          might be 1.0326x faster
   for-of-iterate-array-values                        3.1405+-0.1309     ?      3.2747+-0.4905        ? might be 1.0427x slower
   fround                                            18.1347+-0.1569           17.4070+-0.8415          might be 1.0418x faster
   ftl-library-inlining-dataview                     53.2344+-0.3773     ?     54.2917+-0.7936        ? might be 1.0199x slower
   ftl-library-inlining                             104.3997+-0.5498     ?    104.6085+-0.6766        ?
   function-call                                     10.1235+-0.3412           10.1002+-0.3815        
   function-dot-apply                                 1.8473+-0.0370            1.8124+-0.0425          might be 1.0193x faster
   function-test                                      2.4758+-0.0749            2.4536+-0.0736        
   function-with-eval                               100.2545+-2.4707           99.1455+-1.8847          might be 1.0112x faster
   gcse-poly-get-less-obvious                        13.2332+-0.1888     ?     13.2620+-0.1804        ?
   gcse-poly-get                                     15.0040+-0.3376     ?     15.0042+-0.2826        ?
   gcse                                               3.5072+-0.0413     ?      3.6536+-0.2524        ? might be 1.0417x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.3627+-0.0188     ?      2.4057+-0.0589        ? might be 1.0182x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.2856+-0.0694     ?      5.3297+-0.1092        ?
   get-by-id-chain-from-try-block                     5.0725+-0.0822     ?      5.1132+-0.0994        ?
   get-by-id-check-structure-elimination              4.0588+-0.1990     ?      4.0662+-0.0880        ?
   get-by-id-proto-or-self                           14.8710+-3.4879           13.6914+-0.4935          might be 1.0862x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.6988+-0.1670            2.6925+-0.1788        
   get-by-id-self-or-proto                           14.2288+-2.5867           13.5596+-0.3787          might be 1.0494x faster
   get-by-val-out-of-bounds                           3.8060+-0.1025            3.6995+-0.0879          might be 1.0288x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7106+-0.4624            2.5845+-0.1083          might be 1.0488x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      5.4758+-0.0398     ?      5.5474+-0.1350        ? might be 1.0131x slower
   get-by-val-with-string-chain-from-try-block   
                                                      5.2258+-0.1804     ?      5.2330+-0.1063        ?
   get-by-val-with-string-check-structure-elimination   
                                                      4.7305+-0.1112            4.7122+-0.0401        
   get-by-val-with-string-proto-or-self              13.5417+-0.2486     ?     14.0054+-1.3285        ? might be 1.0342x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      2.8921+-0.0438     ?      2.9347+-0.1000        ? might be 1.0147x slower
   get-by-val-with-string-self-or-proto              13.6237+-0.5063     ?     14.1215+-1.1678        ? might be 1.0365x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      2.9509+-0.5143            2.8294+-0.1112          might be 1.0429x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     11.5400+-0.2291     ?     13.3361+-5.5022        ? might be 1.1556x slower
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.3015+-0.1655            5.2040+-0.0863          might be 1.0187x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     10.4081+-0.2300     ?     10.5082+-0.3519        ?
   get-by-val-with-symbol-proto-or-self              13.6393+-0.5944     ?     14.3726+-1.6124        ? might be 1.0538x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.6711+-0.2403            3.6393+-0.1309        
   get-by-val-with-symbol-self-or-proto              13.6231+-0.4803     ?     14.6212+-1.3898        ? might be 1.0733x slower
   get_callee_monomorphic                             2.4030+-0.1001            2.3585+-0.0453          might be 1.0188x faster
   get_callee_polymorphic                             2.9083+-0.1037     ?      2.9111+-0.0161        ?
   getter-no-activation                               4.5791+-0.2079     ?      4.5941+-0.3525        ?
   getter-prototype                                   9.5087+-0.4955            9.3455+-0.1155          might be 1.0175x faster
   getter-richards                                  117.1927+-6.3313          111.6265+-14.8306         might be 1.0499x faster
   getter                                             4.9160+-0.2013     ?      5.8914+-1.1318        ? might be 1.1984x slower
   global-object-access-with-mutating-structure   
                                                      5.0530+-0.0813     ?      5.2035+-0.0811        ? might be 1.0298x slower
   global-var-const-infer-fire-from-opt               0.7433+-0.1141     ?      0.7505+-0.0873        ?
   global-var-const-infer                             0.5425+-0.0613     ?      0.5515+-0.1036        ? might be 1.0165x slower
   HashMap-put-get-iterate-keys                      24.8284+-2.4094           24.6608+-2.0885        
   HashMap-put-get-iterate                           28.1352+-1.6546           26.8884+-0.9686          might be 1.0464x faster
   HashMap-string-put-get-iterate                    24.6302+-1.7032     ?     25.7580+-2.2963        ? might be 1.0458x slower
   hoist-make-rope                                    9.4874+-0.3702            9.4481+-1.4359        
   hoist-poly-check-structure-effectful-loop   
                                                      3.6766+-0.0387     ?      3.8304+-0.2106        ? might be 1.0418x slower
   hoist-poly-check-structure                         3.0370+-0.1552            3.0123+-0.0645        
   imul-double-only                                   6.7993+-0.8869            6.6915+-0.4266          might be 1.0161x faster
   imul-int-only                                      8.8172+-0.6548            8.3345+-1.1870          might be 1.0579x faster
   imul-mixed                                         6.5760+-0.1374            6.3395+-0.5516          might be 1.0373x faster
   in-four-cases                                     15.8185+-0.3080     ?     16.1951+-0.6874        ? might be 1.0238x slower
   in-one-case-false                                  9.2048+-0.5969            9.1288+-0.4980        
   in-one-case-true                                   8.9587+-0.6720            8.8094+-0.0713          might be 1.0169x faster
   in-two-cases                                       9.4320+-1.1630     ?      9.5925+-1.2098        ? might be 1.0170x slower
   indexed-properties-in-objects                      2.4990+-0.0141            2.4952+-0.0285        
   infer-closure-const-then-mov-no-inline             2.8655+-0.1295     ?      2.9010+-0.1548        ? might be 1.0124x slower
   infer-closure-const-then-mov                      16.8227+-0.2984     ?     17.0471+-0.3087        ? might be 1.0133x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.3746+-0.1244           10.3267+-0.1732        
   infer-closure-const-then-put-to-scope             20.0470+-0.8221           19.9337+-0.4564        
   infer-closure-const-then-reenter-no-inline   
                                                     47.7305+-0.3026     ?     47.7427+-0.4830        ?
   infer-closure-const-then-reenter                  20.4565+-0.8691     ?     21.1375+-0.3247        ? might be 1.0333x slower
   infer-constant-global-property                     3.1286+-0.1161     ?      3.1580+-0.0932        ?
   infer-constant-property                            2.4235+-0.1814            2.4199+-0.0893        
   infer-one-time-closure-ten-vars                    8.0407+-0.5398     ?      8.0895+-0.3520        ?
   infer-one-time-closure-two-vars                    7.6534+-0.1526     ?      7.6945+-0.2571        ?
   infer-one-time-closure                             7.7328+-0.3340            7.5710+-0.0394          might be 1.0214x faster
   infer-one-time-deep-closure                       12.1055+-0.0925     ?     12.1179+-0.3840        ?
   inline-arguments-access                            3.7010+-0.0672     ?      3.8995+-0.2871        ? might be 1.0536x slower
   inline-arguments-aliased-access                    3.6990+-0.0447     ?      3.7096+-0.0801        ?
   inline-arguments-local-escape                      3.8208+-0.0987            3.7451+-0.0350          might be 1.0202x faster
   inline-get-scoped-var                              4.4369+-0.1237     ?      4.4574+-0.2847        ?
   inlined-put-by-id-transition                      10.7570+-0.5446     ?     10.9053+-0.6965        ? might be 1.0138x slower
   int-or-other-abs-then-get-by-val                   4.4870+-0.1873            4.3750+-0.1674          might be 1.0256x faster
   int-or-other-abs-zero-then-get-by-val             14.9845+-0.1189           14.7850+-0.2692          might be 1.0135x faster
   int-or-other-add-then-get-by-val                   3.7150+-0.1635     ?      3.7174+-0.1272        ?
   int-or-other-add                                   4.5416+-0.1412            4.5119+-0.0670        
   int-or-other-div-then-get-by-val                   3.3738+-0.0979     ?      3.3963+-0.1342        ?
   int-or-other-max-then-get-by-val                   3.6537+-0.2204            3.6505+-0.2019        
   int-or-other-min-then-get-by-val                   3.6807+-0.2707            3.6400+-0.2136          might be 1.0112x faster
   int-or-other-mod-then-get-by-val                   3.2963+-0.2867            3.1781+-0.0542          might be 1.0372x faster
   int-or-other-mul-then-get-by-val                   3.2392+-0.0096     ?      3.2794+-0.0332        ? might be 1.0124x slower
   int-or-other-neg-then-get-by-val                   4.1825+-0.2100            4.0921+-0.1515          might be 1.0221x faster
   int-or-other-neg-zero-then-get-by-val             14.8413+-0.1135     ?     14.8625+-0.1777        ?
   int-or-other-sub-then-get-by-val                   3.7227+-0.1359            3.6203+-0.0244          might be 1.0283x faster
   int-or-other-sub                                   3.0823+-0.0835     ?      3.0973+-0.0660        ?
   int-overflow-local                                 4.1581+-0.3309            3.8074+-0.1160          might be 1.0921x faster
   Int16Array-alloc-long-lived                       44.4243+-1.1790           44.1898+-0.7822        
   Int16Array-bubble-sort-with-byteLength            16.6092+-0.7520           16.4497+-0.4494        
   Int16Array-bubble-sort                            16.4949+-0.1125     ?     17.0073+-1.6150        ? might be 1.0311x slower
   Int16Array-load-int-mul                            1.2758+-0.0278     ?      1.2832+-0.0616        ?
   Int16Array-to-Int32Array-set                      43.7805+-0.5413     ?     43.8387+-0.1314        ?
   Int32Array-alloc-large                            10.9038+-0.9219           10.8234+-0.2259        
   Int32Array-alloc-long-lived                       50.2711+-1.2289     ?     51.1222+-1.3229        ? might be 1.0169x slower
   Int32Array-alloc                                   2.7811+-0.1059     ?      2.9445+-0.3312        ? might be 1.0587x slower
   Int32Array-Int8Array-view-alloc                    5.5891+-0.1493     ?      5.7365+-0.3419        ? might be 1.0264x slower
   int52-spill                                        4.1675+-0.1851     ?      4.1883+-0.2040        ?
   Int8Array-alloc-long-lived                        39.3405+-1.3145           38.7850+-0.5137          might be 1.0143x faster
   Int8Array-load-with-byteLength                     3.0730+-0.0253     ?      3.1763+-0.2103        ? might be 1.0336x slower
   Int8Array-load                                     3.1161+-0.1131            3.1064+-0.0245        
   integer-divide                                     9.7459+-0.1125            9.7088+-0.1826        
   integer-modulo                                     1.3969+-0.0129            1.3927+-0.0851        
   is-boolean-fold-tricky                             3.4763+-0.1166     ?      3.5128+-0.1646        ? might be 1.0105x slower
   is-boolean-fold                                    2.3828+-0.0137     ?      2.4127+-0.0508        ? might be 1.0126x slower
   is-function-fold-tricky-internal-function   
                                                      9.2090+-0.1823            9.1898+-0.1886        
   is-function-fold-tricky                            3.7667+-0.0428     ?      3.8735+-0.0868        ? might be 1.0284x slower
   is-function-fold                                   2.4218+-0.1065     ?      2.4487+-0.0807        ? might be 1.0111x slower
   is-number-fold-tricky                              3.7835+-0.2021            3.6926+-0.0201          might be 1.0246x faster
   is-number-fold                                     2.3909+-0.0206            2.3827+-0.0152        
   is-object-or-null-fold-functions                   2.4260+-0.0328     ?      2.4501+-0.0555        ?
   is-object-or-null-fold-less-tricky                 3.7793+-0.1053     ?      3.8517+-0.1584        ? might be 1.0192x slower
   is-object-or-null-fold-tricky                      4.8323+-0.1695            4.8011+-0.1697        
   is-object-or-null-fold                             2.4348+-0.0924     ?      2.4578+-0.1135        ?
   is-object-or-null-trickier-function                3.7950+-0.0928     ?      3.8434+-0.1311        ? might be 1.0128x slower
   is-object-or-null-trickier-internal-function   
                                                      9.6400+-0.1860     ?      9.7579+-0.3854        ? might be 1.0122x slower
   is-object-or-null-tricky-function                  3.8556+-0.1218            3.7738+-0.0408          might be 1.0217x faster
   is-object-or-null-tricky-internal-function   
                                                      7.1075+-0.0527     ?      7.1138+-0.0949        ?
   is-string-fold-tricky                              3.7090+-0.0535     ?      3.7397+-0.1000        ?
   is-string-fold                                     2.3805+-0.0156     ?      2.4266+-0.1123        ? might be 1.0194x slower
   is-undefined-fold-tricky                           3.0208+-0.0320     ?      3.0745+-0.1151        ? might be 1.0178x slower
   is-undefined-fold                                  2.3977+-0.0139     ?      2.4587+-0.1098        ? might be 1.0255x slower
   JSONP-negative-0                                   0.2300+-0.0219            0.2158+-0.0066          might be 1.0656x faster
   large-int-captured                                 3.7728+-0.0670     ?      4.0264+-0.7473        ? might be 1.0672x slower
   large-int-neg                                     13.1509+-0.1698     ?     13.1954+-0.2603        ?
   large-int                                         12.6638+-0.2029           12.4351+-0.2757          might be 1.0184x faster
   load-varargs-elimination                          20.6477+-0.4012     ^     19.4882+-0.2508        ^ definitely 1.0595x faster
   logical-not-weird-types                            2.6624+-0.1358            2.6383+-0.0942        
   logical-not                                        3.9583+-0.2867            3.8461+-0.1325          might be 1.0292x faster
   lots-of-fields                                     9.0632+-0.2842            9.0078+-0.4183        
   make-indexed-storage                               2.4125+-0.2981     ?      2.4687+-0.0709        ? might be 1.0233x slower
   make-rope-cse                                      4.1198+-0.1817            4.0156+-0.0796          might be 1.0260x faster
   marsaglia-larger-ints                             29.9467+-0.6955           29.6468+-0.3447          might be 1.0101x faster
   marsaglia-osr-entry                               19.9342+-0.3525           19.8265+-0.2153        
   math-with-out-of-bounds-array-values              19.8613+-0.3092     ?     20.0020+-0.8370        ?
   max-boolean                                        2.4799+-0.0446            2.4730+-0.1327        
   method-on-number                                  16.0612+-1.3556           15.3971+-1.9407          might be 1.0431x faster
   min-boolean                                        2.4383+-0.0839     ?      2.5698+-0.4645        ? might be 1.0539x slower
   minus-boolean-double                               2.8248+-0.0909            2.7959+-0.0254          might be 1.0103x faster
   minus-boolean                                      2.1680+-0.1215            2.1406+-0.0751          might be 1.0128x faster
   misc-strict-eq                                    29.5515+-0.4710           28.9578+-0.9018          might be 1.0205x faster
   mod-boolean-double                                10.3306+-0.0741     !     10.4968+-0.0921        ! definitely 1.0161x slower
   mod-boolean                                        7.7781+-0.0726     ?      7.8437+-0.2206        ?
   mul-boolean-double                                 3.3920+-0.1833            3.3356+-0.0885          might be 1.0169x faster
   mul-boolean                                        2.5851+-0.1210            2.5513+-0.0198          might be 1.0133x faster
   neg-boolean                                        2.8578+-0.0778     ?      2.8625+-0.1216        ?
   negative-zero-divide                               0.2944+-0.0214     ?      0.3206+-0.0639        ? might be 1.0889x slower
   negative-zero-modulo                               0.3026+-0.0240     ?      0.3222+-0.0400        ? might be 1.0650x slower
   negative-zero-negate                               0.2756+-0.0180            0.2692+-0.0092          might be 1.0238x faster
   nested-function-parsing                           42.0218+-0.4005     ?     42.0792+-2.1488        ?
   new-array-buffer-dead                             99.3793+-2.4754           98.7009+-0.8377        
   new-array-buffer-push                              6.0219+-0.0913            5.9671+-0.0456        
   new-array-dead                                    15.0530+-0.3517     ?     15.1920+-0.4470        ?
   new-array-push                                     3.3562+-0.0520     ?      3.5501+-0.3670        ? might be 1.0578x slower
   no-inline-constructor                             33.8278+-1.3365           33.2073+-0.5220          might be 1.0187x faster
   number-test                                        2.6871+-0.1362     ?      2.7189+-0.1440        ? might be 1.0118x slower
   object-closure-call                                4.4099+-0.0644     ?      4.4618+-0.1142        ? might be 1.0118x slower
   object-get-own-property-symbols-on-large-array   
                                                      3.4291+-0.1010     ?      3.5024+-0.0844        ? might be 1.0214x slower
   object-test                                        2.4528+-0.0899            2.4512+-0.1404        
   obvious-sink-pathology-taken                     118.2056+-4.6679          117.0830+-2.4729        
   obvious-sink-pathology                           112.2554+-1.7088          112.0320+-0.9510        
   obviously-elidable-new-object                     30.4865+-0.2238     ?     30.9480+-0.7748        ? might be 1.0151x slower
   plus-boolean-arith                                 2.2045+-0.1001            2.1542+-0.0131          might be 1.0234x faster
   plus-boolean-double                                2.8821+-0.1394     ?      2.9208+-0.1857        ? might be 1.0134x slower
   plus-boolean                                       2.3508+-0.0652            2.3126+-0.0337          might be 1.0165x faster
   poly-chain-access-different-prototypes-simple   
                                                      2.9725+-0.0676     ?      3.0477+-0.1686        ? might be 1.0253x slower
   poly-chain-access-different-prototypes             2.6594+-0.0687     ?      2.6886+-0.1960        ? might be 1.0110x slower
   poly-chain-access-simpler                          2.9790+-0.1205     ?      3.0157+-0.1424        ? might be 1.0123x slower
   poly-chain-access                                  3.0645+-0.1502            2.9772+-0.0695          might be 1.0293x faster
   poly-stricteq                                     48.4321+-0.5676     ?     48.4660+-0.5014        ?
   polymorphic-array-call                             1.0378+-0.0178     ?      1.0446+-0.0531        ?
   polymorphic-get-by-id                              2.5576+-0.0486     ?      2.6830+-0.2654        ? might be 1.0490x slower
   polymorphic-put-by-id                             23.4388+-0.5440     ?     23.8307+-1.0479        ? might be 1.0167x slower
   polymorphic-structure                             12.2604+-0.3139           12.1516+-0.1410        
   polyvariant-monomorphic-get-by-id                  6.4839+-1.3796     ?      6.7169+-1.9236        ? might be 1.0359x slower
   proto-getter-access                                7.7809+-0.1709            7.6189+-0.1120          might be 1.0213x faster
   prototype-access-with-mutating-prototype           4.9463+-0.1937     ?      5.0630+-0.2276        ? might be 1.0236x slower
   put-by-id-replace-and-transition                   7.4903+-0.1137     ?      7.6229+-0.1605        ? might be 1.0177x slower
   put-by-id-slightly-polymorphic                     2.3905+-0.0160            2.3833+-0.0156        
   put-by-id                                         11.4437+-0.1052     !     11.7938+-0.2237        ! definitely 1.0306x slower
   put-by-val-direct                                  0.3046+-0.0292     ?      0.3060+-0.0333        ?
   put-by-val-large-index-blank-indexing-type   
                                                      4.8892+-0.1386     ?      4.9377+-0.0489        ?
   put-by-val-machine-int                             2.1345+-0.0241     ?      2.1614+-0.0328        ? might be 1.0126x slower
   rare-osr-exit-on-local                            13.9852+-0.9574           13.5388+-0.1564          might be 1.0330x faster
   register-pressure-from-osr                        15.3957+-0.2457     ?     15.4186+-0.1786        ?
   repeat-multi-get-by-offset                        20.3784+-0.3650           20.3503+-0.1455        
   setter-prototype                                   7.2803+-0.1504     ?      7.2916+-0.1250        ?
   setter                                             4.9507+-0.0901     ?      5.3691+-0.6632        ? might be 1.0845x slower
   simple-activation-demo                            22.7606+-0.1660           22.6671+-0.1550        
   simple-getter-access                               9.7059+-0.2382     ?      9.7530+-0.3336        ?
   simple-poly-call-nested                            7.3297+-0.6011     ?      8.5966+-0.6791        ? might be 1.1728x slower
   simple-poly-call                                   1.1111+-0.0864            1.0692+-0.0409          might be 1.0392x faster
   sin-boolean                                       19.0338+-2.6455           17.5510+-2.1123          might be 1.0845x faster
   singleton-scope                                   57.7782+-0.3624           57.6447+-0.3950        
   sink-function                                     10.5342+-0.3065     ?     10.7287+-0.1497        ? might be 1.0185x slower
   sink-huge-activation                              15.8782+-0.3012     ?     16.0065+-1.0538        ?
   sinkable-new-object-dag                           58.8242+-6.2361     ?     59.5800+-2.7920        ? might be 1.0128x slower
   sinkable-new-object-taken                         42.5032+-0.6262     ?     42.6943+-0.5460        ?
   sinkable-new-object                               32.1003+-0.5976     ?     32.1489+-0.7934        ?
   slow-array-profile-convergence                     2.1802+-0.2555            2.1092+-0.1264          might be 1.0337x faster
   slow-convergence                                   2.0793+-0.1092     ?      2.1117+-0.1196        ? might be 1.0156x slower
   slow-ternaries                                    16.2823+-0.1998     ?     16.3262+-0.2796        ?
   sorting-benchmark                                 15.7859+-0.7355           15.5121+-0.1863          might be 1.0177x faster
   sparse-conditional                                 1.0391+-0.0836            1.0102+-0.0157          might be 1.0286x faster
   splice-to-remove                                  11.5527+-0.2087     ?     11.5884+-0.1385        ?
   string-char-code-at                               13.3163+-0.1066     !     15.7315+-0.0808        ! definitely 1.1814x slower
   string-concat-object                               2.1044+-0.1337     ?      2.1439+-0.3408        ? might be 1.0188x slower
   string-concat-pair-object                          2.1172+-0.2588            2.0919+-0.2136          might be 1.0121x faster
   string-concat-pair-simple                         10.5715+-0.3596           10.3104+-0.1269          might be 1.0253x faster
   string-concat-simple                              10.6246+-0.4660           10.3213+-0.2170          might be 1.0294x faster
   string-cons-repeat                                 7.1260+-0.2411     ?      7.2795+-0.1290        ? might be 1.0215x slower
   string-cons-tower                                  7.3710+-0.1486     ?      7.4099+-0.1343        ?
   string-equality                                   14.1112+-0.1446     ?     14.2170+-0.2567        ?
   string-get-by-val-big-char                         6.2004+-0.1633     ?      6.4890+-1.1789        ? might be 1.0465x slower
   string-get-by-val-out-of-bounds-insane             2.8797+-0.0494     ?      2.9246+-0.1612        ? might be 1.0156x slower
   string-get-by-val-out-of-bounds                    3.7250+-0.1826     ?      3.7355+-0.0855        ?
   string-get-by-val                                  2.9686+-0.0771     ^      2.5738+-0.0264        ^ definitely 1.1534x faster
   string-hash                                        1.7173+-0.1756     ?      1.7573+-0.0163        ? might be 1.0233x slower
   string-long-ident-equality                        11.6415+-0.1187     ?     11.6634+-0.1315        ?
   string-out-of-bounds                              10.1749+-0.1802           10.1293+-0.2696        
   string-repeat-arith                               25.4526+-0.2735           25.4291+-0.4812        
   string-sub                                        49.5026+-0.5943           49.4460+-0.1404        
   string-test                                        2.5120+-0.0311     ?      2.6223+-0.1616        ? might be 1.0439x slower
   string-var-equality                               24.7866+-0.5373           24.5566+-0.5194        
   structure-hoist-over-transitions                   2.2693+-0.2080            2.2115+-0.1624          might be 1.0261x faster
   substring-concat-weird                            36.1452+-0.3454           35.8426+-0.1411        
   substring-concat                                  38.8893+-0.3189     ?     39.4170+-0.7695        ? might be 1.0136x slower
   substring                                         43.4373+-1.3797     ?     43.5703+-0.5629        ?
   switch-char-constant                               2.5798+-0.1472            2.5246+-0.1410          might be 1.0219x faster
   switch-char                                        5.6861+-1.5569     ?      5.7839+-1.1761        ? might be 1.0172x slower
   switch-constant                                    7.6008+-0.4400            7.5909+-0.2412        
   switch-string-basic-big-var                       12.9896+-0.0942     ?     13.0135+-0.1002        ?
   switch-string-basic-big                           13.7849+-0.1447     ?     13.9345+-0.2110        ? might be 1.0109x slower
   switch-string-basic-var                           12.1566+-0.3900     ?     12.3443+-0.5409        ? might be 1.0154x slower
   switch-string-basic                               11.9726+-0.3665           11.9400+-0.1886        
   switch-string-big-length-tower-var                16.6581+-0.3343     ?     16.7551+-0.3204        ?
   switch-string-length-tower-var                    12.0955+-0.1430     ?     12.2636+-0.5109        ? might be 1.0139x slower
   switch-string-length-tower                        10.9318+-0.0893           10.9060+-0.0994        
   switch-string-short                               10.9148+-0.0574     ?     11.0245+-0.2145        ? might be 1.0101x slower
   switch                                            10.7757+-0.1698     ?     11.1528+-0.6738        ? might be 1.0350x slower
   tear-off-arguments-simple                          2.8628+-0.1102            2.8470+-0.1315        
   tear-off-arguments                                 4.1085+-0.3602            3.8113+-0.0528          might be 1.0780x faster
   temporal-structure                                11.2295+-0.2660     ?     11.2422+-0.3417        ?
   to-int32-boolean                                  11.5236+-0.2324     ?     11.7186+-0.1727        ? might be 1.0169x slower
   try-catch-get-by-val-cloned-arguments             13.0929+-0.5567           12.8331+-0.2791          might be 1.0202x faster
   try-catch-get-by-val-direct-arguments              6.2526+-0.1947     ^      5.9146+-0.0845        ^ definitely 1.0571x faster
   try-catch-get-by-val-scoped-arguments              6.8518+-0.2032     ?      6.8911+-0.0858        ?
   typed-array-get-set-by-val-profiling              25.4507+-0.7346     ?     25.5025+-0.5316        ?
   undefined-property-access                        214.7244+-0.6866          214.2297+-0.7756        
   undefined-test                                     2.6466+-0.0795     ?      2.6562+-0.0444        ?
   unprofiled-licm                                   13.4975+-0.1479           13.4937+-0.4884        
   varargs-call                                      12.7442+-0.2104           12.6175+-0.2306          might be 1.0100x faster
   varargs-construct-inline                          23.6071+-0.5459           23.2943+-0.4000          might be 1.0134x faster
   varargs-construct                                 18.9167+-0.4187           18.6028+-0.1908          might be 1.0169x faster
   varargs-inline                                     7.9790+-0.2391            7.9091+-0.2478        
   varargs-strict-mode                                8.5623+-0.2645            8.4319+-0.1005          might be 1.0155x faster
   varargs                                            8.3916+-0.1661     ?      8.5083+-0.1507        ? might be 1.0139x slower
   weird-inlining-const-prop                          1.9417+-0.3623            1.8581+-0.2318          might be 1.0450x faster

   &lt;geometric&gt;                                        7.2156+-0.0342     ?      7.2175+-0.0184        ? might be 1.0003x slower

                                                          Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                                       428.4682+-19.3181    ?    441.5974+-7.1162        ? might be 1.0306x slower
   cray.c                                           380.6041+-5.0616          380.0106+-2.8254        
   dry.c                                            412.0317+-0.8239     ?    413.0728+-1.6410        ?
   FloatMM.c                                        662.6547+-1.9008     ?    664.0132+-7.1603        ?
   gcc-loops.cpp                                   3313.1998+-17.7356        3307.1614+-14.9700       
   n-body.c                                         797.1549+-3.0801          796.4428+-1.8092        
   Quicksort.c                                      390.0220+-8.5347     ?    393.8835+-2.7129        ?
   stepanov_container.cpp                          3323.7608+-25.7710    ?   3327.9243+-31.9163       ?
   Towers.c                                         225.1711+-1.4582     ?    226.7105+-4.7830        ?

   &lt;geometric&gt;                                      687.5052+-5.3035     ?    691.2275+-2.6753        ? might be 1.0054x slower

                                                          Conf#1                    Conf#2                                      
CompressionBench:
   huffman                                           48.0900+-2.0320     ?     49.3334+-0.9761        ? might be 1.0259x slower
   arithmetic-simple                                258.9332+-1.5666     !    261.6910+-1.1370        ! definitely 1.0107x slower
   arithmetic-precise                               235.0129+-3.4424     ?    238.8639+-3.4397        ? might be 1.0164x slower
   arithmetic-complex-precise                       238.1310+-1.2883          237.6783+-3.2221        
   arithmetic-precise-order-0                       272.4985+-1.4502     ?    272.5027+-3.3747        ?
   arithmetic-precise-order-1                       295.0438+-9.2247          293.7849+-9.3492        
   arithmetic-precise-order-2                       338.4001+-7.1616          336.4028+-6.3082        
   arithmetic-simple-order-1                        312.1372+-2.0283     ?    316.5311+-4.6955        ? might be 1.0141x slower
   arithmetic-simple-order-2                        362.0999+-6.9152     ?    369.4825+-13.2239       ? might be 1.0204x slower
   lz-string                                        288.0353+-8.2231     ?    288.4854+-15.1277       ?

   &lt;geometric&gt;                                      239.3404+-1.0202     ?    241.1609+-1.4670        ? might be 1.0076x slower

                                                          Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   48.5736+-0.1493     ?     48.7632+-0.0423        ? might be 1.0039x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118781</commentid>
    <comment_count>3</comment_count>
      <attachid>259342</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-18 19:23:51 -0700</bug_when>
    <thetext>Created attachment 259342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118782</commentid>
    <comment_count>4</comment_count>
      <attachid>259342</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-18 19:36:57 -0700</bug_when>
    <thetext>Comment on attachment 259342
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118784</commentid>
    <comment_count>5</comment_count>
      <attachid>259342</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-18 19:45:21 -0700</bug_when>
    <thetext>Comment on attachment 259342
Patch

Nice!  LGTM too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118801</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-18 21:05:53 -0700</bug_when>
    <thetext>*** Bug 148045 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118805</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-18 21:09:17 -0700</bug_when>
    <thetext>Committed r188624: &lt;http://trac.webkit.org/changeset/188624&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259341</attachid>
            <date>2015-08-18 19:04:00 -0700</date>
            <delta_ts>2015-08-18 19:23:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148157-20150818190357.patch</filename>
            <type>text/plain</type>
            <size>55759</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YjAyYWFhNzNlYTE3NTFiMGRlMDFhMDA5YzFlNDkyNzBkOTQzZmIxLi5iMDgyNTZmNGRiOGY1OWU2
YzZkZjA3YWMxODZhYTYxZTMzY2JiMzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDUgQEAKKzIwMTUtMDgtMTggIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gT3B0aW1pemUgbW9yZSBjYXNlcyBvZiBzb21ldGhpbmct
Y29tcGFyZWQtdG8tbnVsbC91bmRlZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODE1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvbXBhcmVFcSBpcyBmYWlybHkgdHJpdmlhbCBpZiB5b3UgYXNz
ZXJ0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgZWl0aGVyCisgICAgICAgIG51bGwgb3IgdW5kZWZp
bmVkLiBVbmRlciB0aG9zZSBjb25kaXRpb25zLCB0aGUgb25seSB3YXkgdG8gaGF2ZSAidHJ1ZSIK
KyAgICAgICAgaXMgdG8gaGF2ZSB0aGUgb3RoZXIgb3BlcmFuZCBiZSBudWxsL3VuZGVmaW5lZCBv
ciBoYXZlIGFuIG9iamVjdAorICAgICAgICB0aGF0IG1hc3F1ZXJhZGVzIHRvIHVuZGVmaW5lZC4K
KworICAgICAgICBKU0MgYWxyZWFkeSBoYWQgYSBmYXN0IHBhdGggaW4gQ29tcGFyZUVxQ29uc3Rh
bnQuCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgSSBnZW5lcmFsaXplIHRoaXMgZmFzdCBwYXRo
IHRvIG1vcmUgY2FzZXMgYW5kIHRyeQorICAgICAgICB0byBlbGltaW5hdGUgdGhlIGNoZWNrcyB3
aGVuZXZlciBwb3NzaWJsZS4KKworICAgICAgICBDb21wYXJlRXEgbm93IGRvZXMgdGhlIGpvYiBv
ZiBDb21wYXJlRXFDb25zdGFudC4gSWYgYW55IG9wZXJhbmQgY2FuCisgICAgICAgIGJlIHByb3Zl
ZCB0byBiZSB1bmRlZmluZWQvb3RoZXIsIGl0cyBlZGdlIGlzIHNldCB0byBPdGhlclVzZS4gV2hl
bmV2ZXIKKyAgICAgICAgYW55IGVkZ2UgaXMgT3RoZXJVc2UsIHdlIGdlbmVyYXRlIHRoZSBmYXN0
IGNvZGUgd2UgaGFkIGZvciBDb21wYXJlRXFDb25zdGFudC4KKworICAgICAgICBUaGUgQWJzdHJh
Y3RJbnRlcnByZXRlciBoYXMgYWRkaXRpb25hbCBjaGVja3MgdG8gcmVkdWNlIHRoZSBub2RlIHRv
IGEgY29uc3RhbnQKKyAgICAgICAgd2hlbmV2ZXIgcG9zc2libGUuCisKKyAgICAgICAgVGhlcmUg
YXJlIHR3byBhZGRpdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaDoKKyAgICAgICAgLVRoZSBG
aXh1cCBQaGFzZSB0cmllcyB0byBzZXQgZWRnZXMgdG8gT3RoZXJVc2UgZWFybHkuIFRoaXMgaXMg
ZG9uZSBjb3JyZWN0bHkKKyAgICAgICAgIGluIENvbnN0YW50Rm9sZGluZ1BoYXNlIGJ1dCBzZXR0
aW5nIGl0IHVwIGVhcmx5IGhlbHBzIHRoZSBwaGFzZXMgcmVseWluZworICAgICAgICAgb24gQ2xv
YmJlcml6ZS4KKyAgICAgICAgLVRoZSBjb2RlZ2VuIGZvciBDb21wYXJlRXFDb25zdGFudCB3YXMg
aW1wcm92ZWQuIFRoZSByZWFzb24gaXMgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgIGZvciBPYmpl
Y3RPck90aGVyIGNvdWxkIGJlIGZhc3RlciBqdXN0IGJlY2F1c2UgdGhlIGNvZGVnZW4gd2FzIGJl
dHRlci4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNVbmRlZmluZWRPck51bGxDb25zdGFudCk6CisgICAg
ICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0tub3duTm90T3RoZXIp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVO
dWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxs
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5l
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2hOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoTnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFs
aWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUVxKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVFcUNv
bnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1u
dWxsLWFuZC11bmRlZmluZWQtbm9uLXBlZXBob2xlLmpzOiBBZGRlZC4KKyAgICAgICAgKHN0cmlu
Z19hcHBlYXJlZF9oZXJlLnVzZUZvck1hdGgpOgorICAgICAgICAodGVzdFVzZUZvck1hdGgpOgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb21wYXJlLWVxLW9uLW51bGwtYW5kLXVuZGVmaW5lZC1v
cHRpbWl6ZWQtaW4tY29uc3RhbnQtZm9sZGluZy5qczogQWRkZWQuCisgICAgICAgIChzdHJpbmdf
YXBwZWFyZWRfaGVyZS51bnJlYWNoYWJsZUNvZGVUZXN0KToKKyAgICAgICAgKGlubGluZWRDb21w
YXJlVG9OdWxsKToKKyAgICAgICAgKGlubGluZWRDb21wYXJlZFRvVW5kZWZpbmVkKToKKyAgICAg
ICAgKHdhcm11cElubGluZUZ1bmN0aW9ucyk6CisgICAgICAgICh0ZXN0SW5saW5lRnVuY3Rpb25z
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1udWxsLWFuZC11bmRlZmlu
ZWQuanM6IEFkZGVkLgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29tcGFyZUNvbnN0
YW50cyk6CisgICAgICAgIChvcGFxdWVOdWxsKToKKyAgICAgICAgKG9wYXF1ZVVuZGVmaW5lZCk6
CisgICAgICAgIChjb21wYXJlQ29uc3RhbnRzQW5kRHluYW1pY1ZhbHVlcyk6CisgICAgICAgIChj
b21wYXJlRHluYW1pY1ZhbHVlcyk6CisgICAgICAgIChjb21wYXJlRHluYW1pY1ZhbHVlVG9JdHNl
bGYpOgorICAgICAgICAoYXJyYXlUZXN0aW5nKToKKyAgICAgICAgKG9wYXF1ZUNvbXBhcmUxKToK
KyAgICAgICAgKHRlc3ROdWxsQ29tcGFyYXRvclVwZGF0ZSk6CisgICAgICAgIChvcGFxdWVDb21w
YXJlMik6CisgICAgICAgICh0ZXN0VW5kZWZpbmVkQ29tcGFyYXRvclVwZGF0ZSk6CisgICAgICAg
IChvcGFxdWVDb21wYXJlMyk6CisgICAgICAgICh0ZXN0TnVsbEFuZFVuZGVmaW5lZENvbXBhcmF0
b3JVcGRhdGUpOgorCiAyMDE1LTA4LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGNvbnN0IHRvIGNvbnRlbnQgZXh0ZW5zaW9uIHBh
cnNlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCmluZGV4IDFiZDhmNjk0MGUyMGMzYzYyODU2NDc0NmI4MDA4
YzkyZTZlMzgzMjQuLjVlMmE2MGI1YzFmYTE0NmJlNzQ0Y2QzMTc1YjkzZGQyNmMxMDNiYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTExMzksOCArMTEzOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2Ji
ZXJMaW1pCiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6
CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgIGNhc2UgQ29tcGFyZUVxOgotICAgIGNh
c2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsKKyAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICBK
U1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAg
ICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7
CiAgICAgICAgIGlmIChsZWZ0Q29uc3QgJiYgcmlnaHRDb25zdCkgewpAQCAtMTE4MCwxMyArMTE3
OSw0MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCB8
fCBub2RlLT5vcCgpID09IENvbXBhcmVFcSkgeworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZXNDb3VsZEJlRXF1YWwobGVmdFR5cGUsIHJpZ2h0VHlwZSkpIHsKICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IFNw
ZWNPdGhlcikKKyAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobGVmdFR5cGUsIHJpZ2h0VHlwZSk7
CisgICAgICAgICAgICBpZiAocmlnaHRUeXBlID09IFNwZWNPdGhlcikgeworICAgICAgICAgICAg
ICAgIC8vIFVuZGVmaW5lZCBhbmQgTnVsbCBhcmUgYWx3YXlzIGVxdWFsIHdoZW4gY29tcGFyZWQg
dG8gZWFjaG90aGVyLgorICAgICAgICAgICAgICAgIGlmICghKGxlZnRUeXBlICYgflNwZWNPdGhl
cikpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gQW55IG90aGVyIHR5cGUgY29tcGFyZWQgdG8gTnVsbCBvciBVbmRl
ZmluZWQgaXMgYWx3YXlzIGZhbHNlCisgICAgICAgICAgICAgICAgLy8gYXMgbG9uZyBhcyB0aGUg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB3YXRjaHBvaW50IGlzIHZhbGlkLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBvbmx5IG1h
dHRlcnMgZm9yIFNwZWNPYmplY3RPdGhlciwgb3RoZXIKKyAgICAgICAgICAgICAgICAvLyBjYXNl
cyBhcmUgYWx3YXlzICJmYWxzZSIuCisgICAgICAgICAgICAgICAgaWYgKCEobGVmdFR5cGUgJiAo
U3BlY09iamVjdE90aGVyIHwgU3BlY090aGVyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghKGxlZnRUeXBl
ICYgU3BlY090aGVyKSAmJiBtX2dyYXBoLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
SXNTdGlsbFZhbGlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkoZ2xvYmFsT2JqZWN0LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IG5vZGUtPmNoaWxkMigpKSB7CkBAIC0xMjA2LDcgKzEyMzIsNiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NF
cToKICAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgICAgICAg
ICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFu
dDoKICAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRydWUp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5k
ZXggNTNlMWJlZmRiMTU5OTQ1MzU5ODc2NjAxNWZiMmNiZTlhNTMzM2VhYy4uOWRjYzc0Nzk3ZmQ5
MjRiMDM4ZGJmODJhZDg0ZjRhM2M4OTIwMDlkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTMzNTYsNyArMzM1Niw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAgICAgICAgY2Fz
ZSBvcF9lcV9udWxsOiB7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9H
cmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKG1fY29uc3RhbnROdWxsKSkpKTsKKyAgICAgICAgICAgIE5vZGUqIG51bGxDb25zdGFudCA9
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSk7CisgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIG51bGxDb25zdGFudCkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZXFfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtMzM3Niw3ICszMzc3
LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAog
ICAgICAgICBjYXNlIG9wX25lcV9udWxsOiB7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50
LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKSkp
KTsKKyAgICAgICAgICAgIE5vZGUqIG51bGxDb25zdGFudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFu
dCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxO
b3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KSkpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfbmVxX251bGwpOwogICAgICAgICB9CiAKQEAgLTM1MjMsNyAr
MzUyNSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9j
b25zdGFudE51bGwpKSk7CisgICAgICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQgPSBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpOworICAgICAgICAgICAgTm9k
ZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3Vy
cmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9qZXFfbnVsbCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2plcV9udWxsKTsKICAgICAgICAgfQpAQCAtMzUzMSw3ICszNTM0LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9qbmVx
X251bGw6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1
ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKSk7CisgICAg
ICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtX2NvbnN0YW50TnVsbCkpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9H
cmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQpOwogICAgICAgICAgICAgYWRkVG9H
cmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9qbmVxX251bGwpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX251bGwpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDc3Mjdh
OWVkMGFkMGMzOTJjMDdhZDM4ZTViODc3MmEyMmMyOTZhZDguLjc5MGQ2NTU2N2VhNTM0YjNiZDUy
M2NiMDljODMxYzY4NjI0M2NmYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCkBAIC0xNDMsNyArMTQzLDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICBjYXNlIFNraXBTY29wZToKICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CiAgICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6Ci0gICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29s
ZWFuOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAppbmRleCAzZDg1Y2FhYmQ2MTU3M2ZkZDU0OWQ1ZmU3NWJjNjRmM2U1NjRm
MWU1Li5kMzUxZTU3MmE2NzJkMzVkMjYyN2Y4OWJkZDU3ZmFhODQ0NDA4ZjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cApAQCAtOTcsNiArOTcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAgICAgICAg
ICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCks
IFNwZWNPdGhlcikpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoT3RoZXJVc2UpOworICAgICAgICAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5
cGVDaGVjayhub2RlLT5jaGlsZDIoKSwgU3BlY090aGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPdGhlclVzZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggMzU0NzMzMmYwYjQxYWNk
MmMzNGI0ZTVlYzE0NjVjYjAxYzkzOWMxMS4uZTFlNDA5ZjExNDQ5NTQwNmI4NTQ1YmQ4MzUzMTgz
NDdiNDI0NzUyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
MTE2LDcgKzExNiw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICBj
YXNlIENvbXBhcmVFcToKLSAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgogICAgIGNhc2UgQ29t
cGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDBhYjM5MzgzOTRm
MjY4NmE0NWFkMWY2MWQwODFmMmI1ZDhmMzc3Y2IuLjk4YjAwOWViMWVkMGIxMjJlNzU2YjRkNGRi
Njk4MTU4NTEwYjU3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcApAQCAtMzY4LDEwICszNjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZp
eEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDb21wYXJlRXE6
CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CkBAIC00MjQsNiArNDIwLDMyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
ZWl0aGVyIGNoaWxkIGNhbiBiZSBwcm92ZWQgdG8gYmUgTnVsbCBvciBVbmRlZmluZWQsIGNvbXBh
cmluZyB0aGVtIGlzIGdyZWF0bHkgc2ltcGxpZmllZC4KKyAgICAgICAgICAgIGJvb2wgb25lQXJn
dW1lbnRJc1VzZWRBc1NwZWNPdGhlciA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5pc1VuZGVmaW5lZE9yTnVsbENvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBm
aXhFZGdlPE90aGVyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgb25lQXJn
dW1lbnRJc1VzZWRBc1NwZWNPdGhlciA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPdGhlcigpKSB7CisgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNr
LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBPdGhlclVzZSkpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8T3RoZXJVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBvbmVBcmd1bWVudElzVXNlZEFzU3BlY090
aGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KS0+aXNVbmRlZmluZWRPck51bGxDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgZml4RWRn
ZTxPdGhlclVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIG9uZUFyZ3VtZW50
SXNVc2VkQXNTcGVjT3RoZXIgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVjaywgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSwgT3RoZXJVc2UpKTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE90aGVyVXNlPihub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICAgICAgb25lQXJndW1lbnRJc1VzZWRBc1NwZWNPdGhlciA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob25lQXJndW1lbnRJc1VzZWRB
c1NwZWNPdGhlcikgeworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RH
ZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewogICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8T2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgZml4RWRnZTxPYmplY3RPck90aGVyVXNlPihub2RlLT5jaGlsZDIoKSk7CkBAIC00MzYsNiAr
NDU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVN
dXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCmluZGV4IDMwNjMyN2E0ZDAwOTQxMmM5NzVkZTI5NjBkMGUyOTM0NzA2
ZGQ4NWMuLjgwMDMzYjAzNjJmMTUwNGQyY2IyNGI2OTZiYTk2MDlhM2IzNzg4YWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC02OTAsNyArNjkwLDEyIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICB7CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpLT52YWx1ZSgpLmFzQm9vbGVhbigp
OwogICAgIH0KLSAgICAgCisKKyAgICBib29sIGlzVW5kZWZpbmVkT3JOdWxsQ29uc3RhbnQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgp
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgfQorCiAgICAgYm9vbCBpc0NlbGxDb25zdGFudCgp
CiAgICAgewogICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVl
KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAppbmRleCA3NGFhOTg0NjgzMDljMmI0M2IyMTg3NDRhNmYzMDc0YjEx
M2EwZGE1Li4wNzc1YzY4ZmMzMGViZTMxMWU5YTJjN2E0NjM1Zjk3YzQ4NDA2MmI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC0yMzEsNyArMjMxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyLCBO
b2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDb21wYXJl
R3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAot
ICAgIG1hY3JvKENvbXBhcmVFcUNvbnN0YW50LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1h
Y3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgLyog
Q2FsbHMuICovXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCAzNTU3MzVmMDkyMjFmOTY1NTkz
Y2FiN2QxNGIyODA4MWNmNmE4YTFiLi4wMGU0ZTg2ZmZmN2RlZDNiZTc4ZTA3NzhjZDljZGY3MTI3
OTJkYzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMzcxLDcgKzM3MSw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVx
Q29uc3RhbnQ6CiAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgICAgICBjYXNlIElu
c3RhbmNlT2Y6CiAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IGY3Nzg3ZjQxYjYwNDBhMmY5NDZkZmFh
MzA3MTcxYzA4NTRlNTViMjYuLmIxZmM1ZmIwOWNiMTExMzUyOWE1ZGYwNWU5NjAxM2EzNzFjNTBi
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBA
IC0xOTgsNyArMTk4LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6
CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgogICAgIGNhc2UgQ29tcGFyZUVxOgotICAgIGNh
c2UgQ29tcGFyZUVxQ29uc3RhbnQ6CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2Fz
ZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBhY2E0ODIwNDVlYThlMTVjYTQyOWYyNDk4
MTFjZTA5M2E2YTU2YWM4Li43MWZhNjA1Yjg5NGZiOTU5ZWJiNDZkYmUwNjY0NmMyYzM5MGRmZDFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cApAQCAtMTM2OSw2ICsxMzY5LDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZUJyYW5jaChOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hCiAgICAgICAg
ICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RPck90aGVyVXNlLCBPYmplY3RVc2Up
KQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSwgYnJhbmNoTm9kZSk7CisgICAg
ICAgICAgICBlbHNlIGlmICghbmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNPdGhl
cikpCisgICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVu
ZGVmaW5lZChub2RlLT5jaGlsZDIoKSwgYnJhbmNoTm9kZSk7CisgICAgICAgICAgICBlbHNlIGlm
ICghbmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQyKCksIFNwZWNPdGhlcikpCisgICAgICAgICAg
ICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZChub2RlLT5j
aGlsZDEoKSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlv
biwgb3BlcmF0aW9uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5MDAsOCAr
MzkwNCwxOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbgogICAgICAgICAgICAgY29tcGlsZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKworICAgICAgICBpZiAo
IW5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIpKSB7CisgICAgICAgICAg
ICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMigpLCBTcGVjT3RoZXIpKSB7CisgICAg
ICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCisKICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBj
b25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IGIyYmJlNjJkOTg1ZTAz
ZTk2ZjUzYTM1ZWRiOTMwOTU2YWY4Njg0MTcuLmIyMDA4YTFlN2ViNjVhNWE5MDMyYzZlOWU3NDk4
NTQxYTA3ZjJlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKQEAgLTU1Niw2ICs1NTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0tub3duTm90
SW50ZWdlcihOb2RlKiBub2RlKSB7IHJldHVybiAhKG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5
cGUgJiBTcGVjSW50MzIpOyB9CiAgICAgYm9vbCBpc0tub3duTm90TnVtYmVyKE5vZGUqIG5vZGUp
IHsgcmV0dXJuICEobV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZSAmIFNwZWNGdWxsTnVtYmVy
KTsgfQogICAgIGJvb2wgaXNLbm93bk5vdENlbGwoTm9kZSogbm9kZSkgeyByZXR1cm4gIShtX3N0
YXRlLmZvck5vZGUobm9kZSkubV90eXBlICYgU3BlY0NlbGwpOyB9CisgICAgYm9vbCBpc0tub3du
Tm90T3RoZXIoTm9kZSogbm9kZSkgeyByZXR1cm4gIShtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlICYgU3BlY090aGVyKTsgfQogICAgIAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudGlm
aWVyVUlEKHVuc2lnbmVkIGluZGV4KQogICAgIHsKQEAgLTcwMSw5ICs3MDIsOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKEVkZ2UmIGJhc2VF
ZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpOwogCi0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKLSAgICB2
b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSog
YnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2
ZUNvbXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwor
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQo
RWRnZSBvcGVyYW5kKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
T3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkog
aGVscGVyRnVuY3Rpb24pOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBh
cmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggNzUxMjA5Njc5YWMyOWQ5MDY1
ZDBiMDAxYWM3YTI5YWQ5ODdiOTk4OS4uOWZmOTQ1YWUxMjY4MTIyMjNiNGRkZjk1OWEzMTFjMDRj
MTY3YzM4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMzQsOSArMjM0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9h
ZEdQUiwKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEY6Om1vdmUoc2xvd1BhdGgpKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVO
dWxsKEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQp
CiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQpOworICAgIEpTVmFsdWVP
cGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAg
IEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CiAgICAgR1BSUmVnIGFyZ1BheWxvYWRH
UFIgPSBhcmcucGF5bG9hZEdQUigpOwogCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKEVkZ2Ugb3BlcmFu
ZCwgYm9vbCBpbnYKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAg
ICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGFyZy5qc1ZhbHVlUmVn
cygpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMy
KDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKQEAgLTI2Myw3ICsyNjMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51
bGwoRWRnZSBvcGVyYW5kLCBib29sIGludgogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIoMSkg
OiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAKICAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsoJm1faml0KTsKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5k
LCBib29sIGludgogICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmUzMihp
bnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGxvY2Fs
R2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdFBheWxvYWRHUFIp
OworICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2Jh
bE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAg
ICB9CiAgCiAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpIHsKQEAgLTI4Miw3
ICsyODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGludgogICAgICAgICAvLyBudWxsIG9yIHVu
ZGVmaW5lZD8KICAgICAgICAgQ09NUElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8
IDEpID09IEpTVmFsdWU6Ok51bGxUYWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxsVGFn
KTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIGFyZ1RhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmUzMihpbnZlcnQgPyBKSVRDb21waWxl
cjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIG1f
aml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAKICAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgfQpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJh
bmQsIGJvb2wgaW52CiAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2N1cnJl
bnROb2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JV
bmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKQogewogICAgIEJhc2ljQmxv
Y2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKICAgICBC
YXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4u
YmxvY2s7CkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2gKICAgICAg
ICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMs
IG9wZXJhbmQpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7
CiAgICAgR1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOwogICAgIApAQCAt
MzUxLDI5ICszNTEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaAogICAgIGp1bXAobm90VGFr
ZW4pOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxs
KE5vZGUqIG5vZGUsIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCi17Ci0gICAgdW5zaWduZWQg
YnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKLSAgICBpZiAoYnJh
bmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5jaE5vZGUg
PSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwotCi0gICAgICAgIEFTU0VSVChub2Rl
LT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgIAotICAgICAgICBub25TcGVjdWxh
dGl2ZVBlZXBob2xlQnJhbmNoTnVsbChvcGVyYW5kLCBicmFuY2hOb2RlLCBpbnZlcnQpOwotICAg
IAotICAgICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICB1c2Uobm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBtX2luZGV4SW5CbG9jayA9IGJyYW5jaEluZGV4SW5CbG9jazsKLSAgICAg
ICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVO
dWxsKG9wZXJhbmQsIGludmVydCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUs
IE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBCYXNpY0Jsb2Nr
KiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CkBAIC0yMjc4
LDEyICsyMjU1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFs
LCBKSVRDb21waWxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBvcGVyYXRpb25Db21wYXJl
R3JlYXRlckVxKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IAotICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6Ci0gICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDIoKS0+YXNKU1ZhbHVlKCkuaXNOdWxsKCkpOwotICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVD
b21wYXJlTnVsbChub2RlLCBub2RlLT5jaGlsZDEoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDb21wYXJlRXE6CiAgICAgICAgIGlmIChjb21wYXJl
KG5vZGUsIEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkRvdWJsZUVxdWFsLCBvcGVy
YXRpb25Db21wYXJlRXEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggYWZmNzMxNDA3ZjcyYWU2ZTQxZjZkNjlhNGJhZWJiNzRm
N2UwOGRiZC4uMTM5OGM2MDY2NmE4N2U2YTVkODc5ZDc3OTM4ZWE1MmU2ODE3YjI0MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBA
IC0xOTIsMTQ2ICsxOTIsMTE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnCiAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoV1RGOjptb3ZlKHNsb3dQYXRoKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJhbmQs
IGJvb2wgaW52ZXJ0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kKQogewotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpIHx8ICFpc0tub3duQ2Vs
bChvcGVyYW5kLm5vZGUoKSksICJUaGUgQ29tcGFyZSBzaG91bGQgaGF2ZSBiZWVuIGVsaW1pbmF0
ZWQsIGl0IGlzIGtub3duIHRvIGJlIGFsd2F5cyBmYWxzZS4iKTsKKworICAgIEpTVmFsdWVPcGVy
YW5kIGFyZyh0aGlzLCBvcGVyYW5kLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQ
UlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CiAgICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgYXJnKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q2VsbDsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkOwotICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3Rp
bGxWYWxpZCgpKSB7Ci0gICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQot
ICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhh
cmdHUFIpKTsKIAotICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6
IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IG1faml0Lmp1bXAoKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0R1BSKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAg
IGlmICghaXNLbm93bk5vdENlbGwob3BlcmFuZC5ub2RlKCkpKQorICAgICAgICAgICAgZG9uZS5h
cHBlbmQobV9qaXQuYnJhbmNoSWZDZWxsKEpTVmFsdWVSZWdzKGFyZ0dQUikpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHUFJUZW1wb3JhcnkgbG9jYWxHbG9iYWxPYmplY3QodGhpcyk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZW1vdGVHbG9iYWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENl
bGw7CiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQogICAgICAgICAg
ICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsK
ICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblpl
cm8sIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpaZXJvLAog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgICAgIGRvbmUuYXBwZW5kKGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCk7CiAKLSAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVk
SW1tMzIoMSkgOiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2Jq
ZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZW1vdGVH
bG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgIG1faml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0
R1BSKTsKICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoYXJnR1BSLCByZXN1bHRHUFIs
IHNjcmF0Y2guZ3ByKCkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUds
b2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8gSklUQ29t
cGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQ
UiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5jb21w
YXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUds
b2JhbE9iamVjdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVt
cCgpKTsKKyAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCisgICAgICAg
ICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICB9CiAgCi0gICAgaWYgKCFpc0tub3duQ2Vs
bChvcGVyYW5kLm5vZGUoKSkpIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwotICAg
ICAgICAKKyAgICBpZiAoIWlzS25vd25Ob3RPdGhlcihvcGVyYW5kLm5vZGUoKSkpIHsKICAgICAg
ICAgbV9qaXQubW92ZShhcmdHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFuZDY0KEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0g
ICAgICAgIG1faml0LmNvbXBhcmU2NChpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBK
SVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihW
YWx1ZU51bGwpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQ
UiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwogICAg
IH0KLSAgIAotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOworCisg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgCiAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3Vy
cmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJy
YW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5j
aE5vZGUpCiB7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSB8fCAhaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkp
LCAiVGhlIENvbXBhcmUgc2hvdWxkIGhhdmUgYmVlbiBlbGltaW5hdGVkLCBpdCBpcyBrbm93biB0
byBiZSBhbHdheXMgZmFsc2UuIik7CisKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CiAgICAgQmFzaWNCbG9jayogbm90VGFrZW4g
PSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwotICAgIAotICAgIGlm
ICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewotICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAg
ICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKLSAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsK
LSAgICAgICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJn
KHRoaXMsIG9wZXJhbmQpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7
CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYXJnKTsKICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENlbGw7Ci0gICAgCisKKyAgICAvLyBGaXJzdCwgaGFuZGxlIHRoZSBjYXNlIHdoZXJl
ICJvcGVyYW5kIiBpcyBhIGNlbGwuCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50SXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5k
Lm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpT
VmFsdWVSZWdzKGFyZ0dQUikpOwotICAgICAgICAKLSAgICAgICAganVtcChpbnZlcnQgPyB0YWtl
biA6IG5vdFRha2VuLCBGb3JjZUp1bXApOworICAgICAgICBpZiAoIWlzS25vd25Ob3RDZWxsKG9w
ZXJhbmQubm9kZSgpKSkgeworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0g
bV9qaXQuYnJhbmNoSWZDZWxsKEpTVmFsdWVSZWdzKGFyZ0dQUikpOworICAgICAgICAgICAgYWRk
QnJhbmNoKGlzQ2VsbCwgbm90VGFrZW4pOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgICAg
ICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkKICAgICAgICAgICAgIG5vdENlbGwg
PSBtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoYXJnR1BSKSk7CiAgICAgICAgIAog
ICAgICAgICBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6QWRkcmVzcyhhcmdHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpLCAKLSAgICAgICAgICAgIGludmVydCA/IHRha2VuIDogbm90VGFrZW4pOworICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwg
bm90VGFrZW4pOwogCiAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2Fs
R2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BS
ID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQuZW1pdExv
YWRTdHJ1Y3R1cmUoYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2guZ3ByKCkpOwogICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIGJy
YW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVH
bG9iYWxPYmplY3RHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOworICAgICAgICBicmFu
Y2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xv
YmFsT2JqZWN0R1BSLCB0YWtlbik7CisKKyAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5k
Lm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7CisgICAg
ICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQogICAgIH0KLSAKLSAgICBp
ZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkgewotICAgICAgICBqdW1wKG5vdFRha2Vu
LCBGb3JjZUp1bXApOwotICAgICAgICAKLSAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0g
ICAgICAgIAorCisgICAgaWYgKGlzS25vd25Ob3RPdGhlcihvcGVyYW5kLm5vZGUoKSkpCisgICAg
ICAgIGp1bXAobm90VGFrZW4pOworICAgIGVsc2UgeworICAgICAgICBKSVRDb21waWxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24gPSBKSVRDb21waWxlcjo6RXF1YWw7CisgICAgICAg
IGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgeworICAgICAgICAgICAgY29uZGl0aW9uID0gSklU
Q29tcGlsZXI6Ok5vdEVxdWFsOworICAgICAgICAgICAgc3RkOjpzd2FwKHRha2VuLCBub3RUYWtl
bik7CisgICAgICAgIH0KICAgICAgICAgbV9qaXQubW92ZShhcmdHUFIsIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LmFuZDY0KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVm
aW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIGJyYW5jaDY0KGludmVydCA/IEpJVENvbXBpbGVy
OjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCksIHRha2VuKTsKLSAgICB9Ci0gICAgCi0gICAganVtcChu
b3RUYWtlbik7Ci19Ci0KLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFy
ZU51bGwoTm9kZSogbm9kZSwgRWRnZSBvcGVyYW5kLCBib29sIGludmVydCkKLXsKLSAgICB1bnNp
Z25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwotICAgIGlm
IChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNo
Tm9kZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7Ci0KLSAgICAgICAgREZHX0FT
U0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7
Ci0gICAgICAgIAotICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChvcGVy
YW5kLCBicmFuY2hOb2RlLCBpbnZlcnQpOwotICAgIAotICAgICAgICB1c2Uobm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBtX2luZGV4SW5CbG9j
ayA9IGJyYW5jaEluZGV4SW5CbG9jazsKLSAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5v
ZGU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJhbmNoNjQoY29u
ZGl0aW9uLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSwg
dGFrZW4pOworICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICB9Ci0gICAgCi0gICAgbm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKG9wZXJhbmQsIGludmVydCk7Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJG
dW5jdGlvbikKQEAgLTI0MTEsMTIgKzIzODMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChjb21wYXJlKG5vZGUsIEpJVENvbXBpbGVyOjpH
cmVhdGVyVGhhbk9yRXF1YWwsIEpJVENvbXBpbGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWws
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKLSAgICAgICAg
QVNTRVJUKG5vZGUtPmNoaWxkMigpLT5hc0pTVmFsdWUoKS5pc051bGwoKSk7Ci0gICAgICAgIGlm
IChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUtPmNoaWxkMSgpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENvbXBhcmVFcToKICAg
ICAgICAgaWYgKGNvbXBhcmUobm9kZSwgSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6
RG91YmxlRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVFcSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDZhMTM0ZDA0OGFmMDQ5MzgyMjMyNGE0NDI0YzI4NzRl
NTdiMTNkNzMuLmVjYTg0M2JiNDE5OTk2NTJjODI5YjAxYmI1YjU4ZTlkMmJkNjRjNDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC0yMzYsNyArMjM2LDYg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgogICAgICAgICAgICAgICAgIGNhc2UgQ29t
cGFyZUVxOgotICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CiAgICAgICAg
ICAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlKSwgISFub2RlLT5jaGlsZDIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAppbmRleCBm
OTI0ZTRhMmNlOTIxOWE4ODBjMmVjMjQxOGY5YTcwZmEzYjlmN2QyLi40MGNhYWM4YzdlYmFjOTNi
OTFiOWZhMGE2Yjg3YjZmMWZkMGNmMjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKQEAgLTczLDcg
KzczLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZSgpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgogICAg
ICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgICAgICAgICAgaGFuZGxlTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04MSw3ICs4MCw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxOgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKE9iamVjdFVzZSkKICAgICAgICAgICAgICAgICB8fCAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG1fbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09
IE9iamVjdE9yT3RoZXJVc2UpCi0gICAgICAgICAgICAgICAgfHwgKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbV9ub2RlLT5jaGlsZDIoKS51c2VLaW5k
KCkgPT0gT2JqZWN0VXNlKSkKKyAgICAgICAgICAgICAgICB8fCAobV9ub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSAmJiBtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQo
KSA9PSBPYmplY3RVc2UpCisgICAgICAgICAgICAgICAgfHwgKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE90aGVyVXNlIHx8IG1fbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE90aGVy
VXNlKSkKICAgICAgICAgICAgICAgICBoYW5kbGVNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDc3Mzc0MjFjZTA2YWRmNTFlOGE4MGU4ZDEz
ZjNjYTYyZTlhNWFmZDYuLmExMjRlNmExNWIzNzU4ZGRkYTA0OWVlZDkyMjBlOTY2YTFhMjg3Y2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAg
LTk2LDcgKzk2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoTmVnYXRlOgogICAgIGNh
c2UgVUludDMyVG9OdW1iZXI6Ci0gICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNl
IEp1bXA6CiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBQaGk6CkBAIC0zMjEsNiAr
MzIwLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmpl
Y3RPck90aGVyVXNlLCBPYmplY3RVc2UpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT3RoZXJVc2UgfHwgbm9kZS0+Y2hpbGQyKCku
dXNlS2luZCgpID09IE90aGVyVXNlKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJldHVy
biBDYW5ub3RDb21waWxlOwogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgICAgICBpZiAo
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKaW5kZXggOGE3ZDAwZGI0ZTY0MzM5NzBmOWEz
YmJiNGFlYTIwM2ZiNWMxNzdjZi4uMWZhYWNkYjAxMjc1OGMyODAwOTRlNTk4NjRmZTIzYzdlMzJk
OWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKQEAgLTcwMSw5ICs3MDEsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVF
cToKICAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlRXEoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICAgICAgY29tcGlsZUNvbXBh
cmVFcUNvbnN0YW50KCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6CiAgICAgICAgICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTQxNDYsMTggKzQxNDMsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG5vblNwZWN1bGF0aXZlQ29tcGFyZShMTFZNSW50RVEsIG9wZXJhdGlvbkNvbXBhcmVFcSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgaWYgKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE90aGVyVXNlKSB7CisgICAgICAgICAgICBBU1NF
UlQoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2RlLT5jaGlsZDEoKSwgU3BlY090
aGVyKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9k
ZS0+Y2hpbGQyKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+
Y2hpbGQyKCksIFNwZWNPdGhlcikpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51bGxP
clVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxP
clVuZGVmaW5lZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKwogICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kcyIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21wYXJlRXFDb25z
dGFudCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9ub2RlLT5jaGlsZDIoKS0+YXNKU1ZhbHVl
KCkuaXNOdWxsKCkpOwotICAgICAgICBzZXRCb29sZWFuKAotICAgICAgICAgICAgZXF1YWxOdWxs
T3JVbmRlZmluZWQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNB
cmVGYWxzZSwgRXF1YWxOdWxsT3JVbmRlZmluZWQpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBj
b21waWxlQ29tcGFyZVN0cmljdEVxKCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1udWxsLWFuZC11bmRlZmluZWQtbm9uLXBlZXBo
b2xlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb21wYXJlLWVxLW9u
LW51bGwtYW5kLXVuZGVmaW5lZC1ub24tcGVlcGhvbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBmZjk1ZmVi
N2YyMTgxYzBjNjhhMjNlMjQ5ZmZmYmE3NDdjMTRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1udWxsLWFuZC11bmRl
ZmluZWQtbm9uLXBlZXBob2xlLmpzCkBAIC0wLDAgKzEsNDUgQEAKKyJ1c2Ugc3RyaWN0IgorCitm
dW5jdGlvbiB1c2VGb3JNYXRoKHVuZGVmaW5lZEFyZ3VtZW50LCBudWxsQXJndW1lbnQsIHBvbHlt
b3JwaGljQXJndW1lbnQpIHsKKyAgICB2YXIgYSA9IChudWxsID09IHVuZGVmaW5lZEFyZ3VtZW50
KSArICh1bmRlZmluZWRBcmd1bWVudCA9PSBudWxsKSArICh1bmRlZmluZWQgPT0gdW5kZWZpbmVk
QXJndW1lbnQpICsgKHVuZGVmaW5lZEFyZ3VtZW50ID09IHVuZGVmaW5lZCk7CisgICAgdmFyIGIg
PSAobnVsbCA9PSBudWxsQXJndW1lbnQpICsgKG51bGxBcmd1bWVudCA9PSBudWxsKSArICh1bmRl
ZmluZWQgPT0gbnVsbEFyZ3VtZW50KSArIChudWxsQXJndW1lbnQgPT0gdW5kZWZpbmVkKTsKKyAg
ICB2YXIgYyA9IChudWxsID09IHBvbHltb3JwaGljQXJndW1lbnQpICsgKHBvbHltb3JwaGljQXJn
dW1lbnQgPT0gbnVsbCkgKyAodW5kZWZpbmVkID09IHBvbHltb3JwaGljQXJndW1lbnQpICsgKHBv
bHltb3JwaGljQXJndW1lbnQgPT0gdW5kZWZpbmVkKTsKKyAgICB2YXIgZCA9ICg1ID09IG51bGwp
ICsgKG51bGwgPT0gdHJ1ZSkgKyAodW5kZWZpbmVkID09IE1hdGguTE4yKSArICgiY29uc3QiID09
IHVuZGVmaW5lZCk7CisgICAgdmFyIGUgPSAoNSA9PSB1bmRlZmluZWRBcmd1bWVudCkgKyAobnVs
bEFyZ3VtZW50ID09IHRydWUpICsgKG51bGxBcmd1bWVudCA9PSBNYXRoLkxOMikgKyAoImNvbnN0
IiA9PSB1bmRlZmluZWRBcmd1bWVudCk7CisKKyAgICByZXR1cm4gYSArIGIgLSBjICsgZCAtIGU7
Cit9Citub0lubGluZSh1c2VGb3JNYXRoKTsKKworZnVuY3Rpb24gdGVzdFVzZUZvck1hdGgoKSB7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgdmFsdWUg
PSB1c2VGb3JNYXRoKHVuZGVmaW5lZCwgbnVsbCwgNSk7CisgICAgICAgIGlmICh2YWx1ZSAhPSA4
KQorICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB1c2VGb3JNYXRoKHVuZGVmaW5lZCwgbnVsbCwg
NSksIHZhbHVlID0gIiArIHZhbHVlICsgIiB3aXRoIGkgPSAiICsgaTsKKworICAgICAgICB2YXIg
dmFsdWUgPSB1c2VGb3JNYXRoKHVuZGVmaW5lZCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGlmICh2
YWx1ZSAhPSA0KQorICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB1c2VGb3JNYXRoKHVuZGVmaW5l
ZCwgbnVsbCwgbnVsbCksIHZhbHVlID0gIiArIHZhbHVlICsgIiB3aXRoIGkgPSAiICsgaTsKKwor
ICAgICAgICB2YXIgdmFsdWUgPSB1c2VGb3JNYXRoKHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVk
KTsKKyAgICAgICAgaWYgKHZhbHVlICE9IDQpCisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHVz
ZUZvck1hdGgodW5kZWZpbmVkLCBudWxsLCB1bmRlZmluZWQpLCB2YWx1ZSA9ICIgKyB2YWx1ZSAr
ICIgd2l0aCBpID0gIiArIGk7CisKKyAgICAgICAgdmFyIHZhbHVlID0gdXNlRm9yTWF0aCh1bmRl
ZmluZWQsIG51bGwsIHsgZm9vOiAiYmFyIiB9KTsKKyAgICAgICAgaWYgKHZhbHVlICE9IDgpCisg
ICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHVzZUZvck1hdGgodW5kZWZpbmVkLCBudWxsLCB7IGZv
bzogXCJiYXJcIiB9KSwgdmFsdWUgPSAiICsgdmFsdWUgKyAiIHdpdGggaSA9ICIgKyBpOworCisg
ICAgICAgIHZhciB2YWx1ZSA9IHVzZUZvck1hdGgodW5kZWZpbmVkLCBudWxsLCB0cnVlKTsKKyAg
ICAgICAgaWYgKHZhbHVlICE9IDgpCisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHVzZUZvck1h
dGgodW5kZWZpbmVkLCBudWxsLCB0cnVlKSwgdmFsdWUgPSAiICsgdmFsdWUgKyAiIHdpdGggaSA9
ICIgKyBpOworCisgICAgICAgIHZhciB2YWx1ZSA9IHVzZUZvck1hdGgodW5kZWZpbmVkLCBudWxs
LCBbMSwgMiwgM10pOworICAgICAgICBpZiAodmFsdWUgIT0gOCkKKyAgICAgICAgICAgIHRocm93
ICJGYWlsZWQgdXNlRm9yTWF0aCh1bmRlZmluZWQsIG51bGwsIHRydWUpLCB2YWx1ZSA9ICIgKyB2
YWx1ZSArICIgd2l0aCBpID0gIiArIGk7CisKKyAgICAgICAgdmFyIHZhbHVlID0gdXNlRm9yTWF0
aCh1bmRlZmluZWQsIG51bGwsICJXZWJLaXQhIik7CisgICAgICAgIGlmICh2YWx1ZSAhPSA4KQor
ICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB1c2VGb3JNYXRoKHVuZGVmaW5lZCwgbnVsbCwgdHJ1
ZSksIHZhbHVlID0gIiArIHZhbHVlICsgIiB3aXRoIGkgPSAiICsgaTsKKyAgICB9Cit9Cit0ZXN0
VXNlRm9yTWF0aCgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1udWxsLWFuZC11
bmRlZmluZWQtb3B0aW1pemVkLWluLWNvbnN0YW50LWZvbGRpbmcuanMgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbXBhcmUtZXEtb24tbnVsbC1hbmQtdW5kZWZpbmVkLW9w
dGltaXplZC1pbi1jb25zdGFudC1mb2xkaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MTRlMGM3OTZiMTNj
YjNiODBkZGJmNWNjMjJkYTM1NDBkM2YxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbXBhcmUtZXEtb24tbnVsbC1hbmQtdW5kZWZpbmVk
LW9wdGltaXplZC1pbi1jb25zdGFudC1mb2xkaW5nLmpzCkBAIC0wLDAgKzEsNzAgQEAKKyJ1c2Ug
c3RyaWN0IgorCitmdW5jdGlvbiB1bnJlYWNoYWJsZUNvZGVUZXN0KCkgeworICAgIHZhciBhOwor
CisgICAgdmFyIGIgPSBudWxsOworICAgIGlmIChiKSB7CisgICAgICAgIGEgPSA1OworICAgIH0K
KyAgICByZXR1cm4gYSA9PSBiOworfQorbm9JbmxpbmUodW5yZWFjaGFibGVDb2RlVGVzdCk7CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICBpZiAoIXVucmVhY2hhYmxlQ29k
ZVRlc3QoKSkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCB1bnJlYWNoYWJsZUNvZGVUZXN0KCkgd2l0
aCBpID0gIiArIGk7Cit9CisKKworZnVuY3Rpb24gaW5saW5lZENvbXBhcmVUb051bGwoYSkgewor
ICAgIHJldHVybiBhID09IG51bGw7Cit9CisKK2Z1bmN0aW9uIGlubGluZWRDb21wYXJlZFRvVW5k
ZWZpbmVkKGEpIHsKKyAgICByZXR1cm4gYSA9PSB1bmRlZmluZWQ7Cit9CisKKy8vIFdhcm11cC4g
TGl0dGVyIHRoZSBwcm9maWxlIHdpdGggZXZlcnkgdHlwZXMuCitmdW5jdGlvbiB3YXJtdXBJbmxp
bmVGdW5jdGlvbnMoKSB7CisgICAgbGV0IHJldHVyblZhbHVlID0gMDsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHJldHVyblZhbHVlICs9IGlubGluZWRDb21w
YXJlVG9OdWxsKCJmb28iKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgKz0gaW5saW5lZENvbXBhcmVU
b051bGwobnVsbCk7CisgICAgICAgIHJldHVyblZhbHVlICs9IGlubGluZWRDb21wYXJlVG9OdWxs
KE1hdGgpOworICAgICAgICByZXR1cm5WYWx1ZSArPSBpbmxpbmVkQ29tcGFyZVRvTnVsbCg1KTsK
KyAgICAgICAgcmV0dXJuVmFsdWUgKz0gaW5saW5lZENvbXBhcmVUb051bGwoNS41KTsKKworICAg
ICAgICByZXR1cm5WYWx1ZSArPSBpbmxpbmVkQ29tcGFyZWRUb1VuZGVmaW5lZCgiZm9vIik7Cisg
ICAgICAgIHJldHVyblZhbHVlICs9IGlubGluZWRDb21wYXJlZFRvVW5kZWZpbmVkKG51bGwpOwor
ICAgICAgICByZXR1cm5WYWx1ZSArPSBpbmxpbmVkQ29tcGFyZWRUb1VuZGVmaW5lZChNYXRoKTsK
KyAgICAgICAgcmV0dXJuVmFsdWUgKz0gaW5saW5lZENvbXBhcmVkVG9VbmRlZmluZWQoNSk7Cisg
ICAgICAgIHJldHVyblZhbHVlICs9IGlubGluZWRDb21wYXJlZFRvVW5kZWZpbmVkKDUuNSk7Cisg
ICAgfQorICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KK25vSW5saW5lKHdhcm11cElubGluZUZ1
bmN0aW9ucyk7Cit3YXJtdXBJbmxpbmVGdW5jdGlvbnMoKTsKKworZnVuY3Rpb24gdGVzdElubGlu
ZUZ1bmN0aW9ucyh1bmRlZmluZWRBcmcsIG51bGxBcmcpIHsKKyAgICBpZiAoaW5saW5lZENvbXBh
cmVUb051bGwoImZvbyIpKQorICAgICAgICB0aHJvdyAiRmFpbGVkIGlubGluZWRDb21wYXJlVG9O
dWxsKFwiZm9vXCIpIjsKKworICAgIGlmICghaW5saW5lZENvbXBhcmVUb051bGwobnVsbCkpCisg
ICAgICAgIHRocm93ICJGYWlsZWQgIWlubGluZWRDb21wYXJlVG9OdWxsKG51bGwpIjsKKworICAg
IGlmICghaW5saW5lZENvbXBhcmVUb051bGwodW5kZWZpbmVkKSkKKyAgICAgICAgdGhyb3cgIkZh
aWxlZCAhaW5saW5lZENvbXBhcmVUb051bGwodW5kZWZpbmVkKSI7CisKKyAgICBpZiAoIWlubGlu
ZWRDb21wYXJlVG9OdWxsKHVuZGVmaW5lZEFyZykpCisgICAgICAgIHRocm93ICJGYWlsZWQgIWlu
bGluZWRDb21wYXJlVG9OdWxsKHVuZGVmaW5lZEFyZykiOworCisgICAgaWYgKCFpbmxpbmVkQ29t
cGFyZVRvTnVsbChudWxsQXJnKSkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCAhaW5saW5lZENvbXBh
cmVUb051bGwobnVsbEFyZykiOworCit9Citub0lubGluZSh0ZXN0SW5saW5lRnVuY3Rpb25zKTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIHRlc3RJbmxpbmVGdW5jdGlv
bnModW5kZWZpbmVkLCBudWxsKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbXBhcmUtZXEtb24t
bnVsbC1hbmQtdW5kZWZpbmVkLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9jb21wYXJlLWVxLW9uLW51bGwtYW5kLXVuZGVmaW5lZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGU5MmM0
OWQ0N2ZhZTY3MmUxN2U5ZjllZjRmMTcyNDI0MjJmMTdhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb21wYXJlLWVxLW9uLW51bGwtYW5kLXVu
ZGVmaW5lZC5qcwpAQCAtMCwwICsxLDE3NCBAQAorInVzZSBzdHJpY3QiCisKKy8vIFRyaXZpYWwg
Y2FzZXM6IGV2ZXJ5dGhpbmcgaXMgbW9ub21vcnBoaWMgYW5kIHN1cGVyIHByZWRpY3RhYmxlLgor
ZnVuY3Rpb24gY29tcGFyZUNvbnN0YW50cygpCit7CisgICAgcmV0dXJuIChudWxsID09IG51bGwp
ICYmIChudWxsID09IHVuZGVmaW5lZCkgJiYgKHVuZGVmaW5lZCA9PSBudWxsKTsKK30KK25vSW5s
aW5lKGNvbXBhcmVDb25zdGFudHMpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7
CisgICAgaWYgKCFjb21wYXJlQ29uc3RhbnRzKCkpCisgICAgICAgIHRocm93ICJGYWlsZWQgdG8g
Y29tcGFyZUNvbnN0YW50cygpLiI7Cit9CisKKworZnVuY3Rpb24gb3BhcXVlTnVsbCgpIHsKKyAg
ICByZXR1cm4gbnVsbDsKK30KK25vSW5saW5lKG9wYXF1ZU51bGwpOworCitmdW5jdGlvbiBvcGFx
dWVVbmRlZmluZWQoKSB7CisgICAgcmV0dXJuIHVuZGVmaW5lZDsKK30KK25vSW5saW5lKG9wYXF1
ZVVuZGVmaW5lZCk7CisKK2Z1bmN0aW9uIGNvbXBhcmVDb25zdGFudHNBbmREeW5hbWljVmFsdWVz
KCkKK3sKKyAgICByZXR1cm4gKChudWxsID09IG9wYXF1ZU51bGwoKSkKKyAgICAgICAgJiYgKG9w
YXF1ZU51bGwoKSA9PSBudWxsKQorICAgICAgICAmJiAodW5kZWZpbmVkID09IG9wYXF1ZU51bGwo
KSkKKyAgICAgICAgJiYgKG9wYXF1ZU51bGwoKSA9PSB1bmRlZmluZWQpCisgICAgICAgICYmIChu
dWxsID09IG9wYXF1ZVVuZGVmaW5lZCgpKQorICAgICAgICAmJiAob3BhcXVlVW5kZWZpbmVkKCkg
PT0gbnVsbCkKKyAgICAgICAgJiYgKHVuZGVmaW5lZCA9PSBvcGFxdWVVbmRlZmluZWQoKSkKKyAg
ICAgICAgJiYgKG9wYXF1ZVVuZGVmaW5lZCgpID09IHVuZGVmaW5lZCkpOworfQorbm9JbmxpbmUo
Y29tcGFyZUNvbnN0YW50c0FuZER5bmFtaWNWYWx1ZXMpOworCitmb3IgKGxldCBpID0gMWU0OyBp
LS07KSB7CisgICAgaWYgKCFjb21wYXJlQ29uc3RhbnRzQW5kRHluYW1pY1ZhbHVlcygpKQorICAg
ICAgICB0aHJvdyAiRmFpbGVkIGNvbXBhcmVDb25zdGFudHNBbmREeW5hbWljVmFsdWVzKCkiOwor
fQorCisKK2Z1bmN0aW9uIGNvbXBhcmVEeW5hbWljVmFsdWVzKCkKK3sKKyAgICByZXR1cm4gKChv
cGFxdWVOdWxsKCkgPT0gb3BhcXVlTnVsbCgpKQorICAgICAgICAgICAgJiYgKG9wYXF1ZVVuZGVm
aW5lZCgpID09IG9wYXF1ZVVuZGVmaW5lZCgpKQorICAgICAgICAgICAgJiYgKG9wYXF1ZU51bGwo
KSA9PSBvcGFxdWVVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICYmIChvcGFxdWVVbmRlZmluZWQo
KSA9PSBvcGFxdWVOdWxsKCkpKTsKK30KK25vSW5saW5lKGNvbXBhcmVEeW5hbWljVmFsdWVzKTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIGlmICghY29tcGFyZUR5bmFt
aWNWYWx1ZXMoKSkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCBjb21wYXJlRHluYW1pY1ZhbHVlcygp
IjsKK30KKworCitmdW5jdGlvbiBjb21wYXJlRHluYW1pY1ZhbHVlVG9JdHNlbGYoKQoreworICAg
IGNvbnN0IHZhbHVlMSA9IG9wYXF1ZU51bGwoKTsKKyAgICBjb25zdCB2YWx1ZTIgPSBvcGFxdWVV
bmRlZmluZWQoKTsKKyAgICByZXR1cm4gdmFsdWUxID09IHZhbHVlMSAmJiB2YWx1ZTIgPT0gdmFs
dWUyOworfQorbm9JbmxpbmUoY29tcGFyZUR5bmFtaWNWYWx1ZVRvSXRzZWxmKTsKKworZm9yIChs
ZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIGlmICghY29tcGFyZUR5bmFtaWNWYWx1ZVRv
SXRzZWxmKCkpCisgICAgICAgIHRocm93ICJGYWlsZWQgY29tcGFyZUR5bmFtaWNWYWx1ZVRvSXRz
ZWxmKCkiOworfQorCisKKy8vIFRoZSBjYXNlIHRoYXQgaW50ZXJlc3RlZCB1cyBpbiB0aGUgZmly
c3QgcGxhY2UuCisvLyBBY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCB1bmRlY2lkZWQgc2hhcGUgYWx3
YXlzIHJldHVybiB1bmRlZmluZWQuCisKK2Z1bmN0aW9uIGFycmF5VGVzdGluZygpCit7CisgICAg
bGV0IHJldHVyblZhbHVlID0gdHJ1ZTsKKworICAgIGNvbnN0IGFycmF5MSA9IG5ldyBBcnJheSgy
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICByZXR1cm5WYWx1
ZSA9IHJldHVyblZhbHVlICYmIChhcnJheTFbaV0gPT0gbnVsbCk7CisgICAgICAgIHJldHVyblZh
bHVlID0gcmV0dXJuVmFsdWUgJiYgKG51bGwgPT0gYXJyYXkxW2ldKTsKKyAgICAgICAgcmV0dXJu
VmFsdWUgPSByZXR1cm5WYWx1ZSAmJiAoYXJyYXkxW2ldID09IHVuZGVmaW5lZCk7CisgICAgICAg
IHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUgJiYgKHVuZGVmaW5lZCA9PSBhcnJheTFbaV0pOwor
ICAgIH0KKworICAgIGNvbnN0IGFycmF5MiA9IG5ldyBBcnJheSgyKTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYm
IChhcnJheTJbaV0gPT0gb3BhcXVlTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSByZXR1
cm5WYWx1ZSAmJiAob3BhcXVlTnVsbCgpID09IGFycmF5MltpXSk7CisgICAgICAgIHJldHVyblZh
bHVlID0gcmV0dXJuVmFsdWUgJiYgKGFycmF5MltpXSA9PSBvcGFxdWVVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUgJiYgKG9wYXF1ZVVuZGVmaW5lZCgpID09
IGFycmF5MltpXSk7CisgICAgfQorCisgICAgY29uc3QgYXJyYXkzID0gbmV3IEFycmF5KDIpOwor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgIHJldHVyblZhbHVlID0g
cmV0dXJuVmFsdWUgJiYgKGFycmF5M1tpXSA9PSBhcnJheTNbaV0pOworICAgICAgICByZXR1cm5W
YWx1ZSA9IHJldHVyblZhbHVlICYmIChhcnJheTFbaV0gPT0gYXJyYXkzW2ldKTsKKyAgICAgICAg
cmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZSAmJiAoYXJyYXkzW2ldID09IGFycmF5MVtpXSk7Cisg
ICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUgJiYgKGFycmF5MltpXSA9PSBhcnJheTNb
aV0pOworICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYmIChhcnJheTNbaV0gPT0g
YXJyYXkyW2ldKTsKKworICAgIH0KKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KK25vSW5s
aW5lKGFycmF5VGVzdGluZyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICBpZiAoIWFycmF5VGVzdGluZygpKQorICAgICAgICB0aHJvdyAiRmFpbGVkIGFycmF5VGVzdGlu
ZygpIjsKK30KKworCisvLyBMZXQncyBtYWtlIGl0IHBvbHltb3JwaGljIGFmdGVyIG9wdGltaXph
dGlvbi4gV2Ugc2hvdWxkIGZhbGxiYWNrIHRvIGEgZ2VuZXJpYyBjb21wYXJlIG9wZXJhdGlvbi4K
KworZnVuY3Rpb24gb3BhcXVlQ29tcGFyZTEoYSwgYikgeworICAgIHJldHVybiBhID09IGI7Cit9
Citub0lubGluZShvcGFxdWVDb21wYXJlMSk7CisKK2Z1bmN0aW9uIHRlc3ROdWxsQ29tcGFyYXRv
clVwZGF0ZSgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IGlmICghb3BhcXVlQ29tcGFyZTEobnVsbCwgbnVsbCkpCisgICAgICAgICAgICB0aHJvdyAiRmFp
bGVkIG9wYXF1ZUNvbXBhcmUxKG51bGwsIG51bGwpIgorICAgIH0KKworICAgIC8vIExldCdzIGNo
YW5nZSB0eXBlcworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
aWYgKG9wYXF1ZUNvbXBhcmUxKCJmb28iLCBudWxsKSkKKyAgICAgICAgICAgIHRocm93ICJGYWls
ZWQgb3BhcXVlQ29tcGFyZTEoXCJmb29cIiwgbnVsbCkiCisgICAgfQorfQordGVzdE51bGxDb21w
YXJhdG9yVXBkYXRlKCk7CisKK2Z1bmN0aW9uIG9wYXF1ZUNvbXBhcmUyKGEsIGIpIHsKKyAgICBy
ZXR1cm4gYSA9PSBiOworfQorbm9JbmxpbmUob3BhcXVlQ29tcGFyZTIpOworCitmdW5jdGlvbiB0
ZXN0VW5kZWZpbmVkQ29tcGFyYXRvclVwZGF0ZSgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDFlNDsgKytpKSB7CisgICAgICAgIGlmICghb3BhcXVlQ29tcGFyZTIodW5kZWZpbmVkLCB1bmRl
ZmluZWQpKQorICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVDb21wYXJlMih1bmRlZmlu
ZWQsIHVuZGVmaW5lZCkiCisgICAgfQorCisgICAgLy8gTGV0J3MgY2hhbmdlIHR5cGVzCisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoIW9wYXF1ZUNvbXBh
cmUyKCJiYXIiLCAiYmFyIikpCisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIG9wYXF1ZUNvbXBh
cmUyKFwiYmFyXCIsIFwiYmFyXCIpIgorICAgIH0KK30KK3Rlc3RVbmRlZmluZWRDb21wYXJhdG9y
VXBkYXRlKCk7CisKK2Z1bmN0aW9uIG9wYXF1ZUNvbXBhcmUzKGEsIGIpIHsKKyAgICByZXR1cm4g
YSA9PSBiOworfQorbm9JbmxpbmUob3BhcXVlQ29tcGFyZTMpOworCitmdW5jdGlvbiB0ZXN0TnVs
bEFuZFVuZGVmaW5lZENvbXBhcmF0b3JVcGRhdGUoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoIW9wYXF1ZUNvbXBhcmUzKHVuZGVmaW5lZCwgbnVs
bCkgfHwgIW9wYXF1ZUNvbXBhcmUyKG51bGwsIHVuZGVmaW5lZCkpCisgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIG9wYXF1ZUNvbXBhcmUyKHVuZGVmaW5lZC9udWxsLCB1bmRlZmluZWQvbnVsbCki
CisgICAgfQorCisgICAgLy8gTGV0J3MgY2hhbmdlIHR5cGVzCisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlQ29tcGFyZTModW5kZWZpbmVkLCAi
YmFyIikpCisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIG9wYXF1ZUNvbXBhcmUzKHVuZGVmaW5l
ZCwgXCJiYXJcIikiCisgICAgfQorfQordGVzdE51bGxBbmRVbmRlZmluZWRDb21wYXJhdG9yVXBk
YXRlKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNmJiN2JiNmI0N2ZhNGVjZTc5MGRmOGExZmY3ZTE5ODkzM2E3MWJkYi4u
MzJjMmE5MTUwY2Q4MGIzMmNhOGJhMGUzMGExODQyZGVmYTg4Y2FhYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDE1LTA4LTE4ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIE9wdGltaXplIG1vcmUgY2FzZXMgb2Ygc29tZXRoaW5nLWNvbXBh
cmVkLXRvLW51bGwvdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDgxNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGpzL2RvbS9kb2N1bWVudC1hbGwtd2F0Y2hwb2ludC1jb3ZlcnMtZWxp
bWluYXRlZC1jb21wYXJlLWVxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9t
L2RvY3VtZW50LWFsbC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5hdGVkLWNvbXBhcmUtZXEuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvZG9tL3NjcmlwdC10ZXN0cy9kb2N1bWVudC1hbGwtd2F0
Y2hwb2ludC1jb3ZlcnMtZWxpbWluYXRlZC1jb21wYXJlLWVxLmpzOiBBZGRlZC4KKyAgICAgICAg
KGNvbXBhcmVGdW5jdGlvbik6CisKIDIwMTUtMDgtMTcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1h
eGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbT1MgWF0gUmVtb3ZlIHN1cHBvcnQgZm9yIGNv
bXBvc2l0ZSBmb250cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL2RvY3VtZW50LWFs
bC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5hdGVkLWNvbXBhcmUtZXEtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvanMvZG9tL2RvY3VtZW50LWFsbC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5h
dGVkLWNvbXBhcmUtZXEtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiOTVjOTgzM2RhMjI1OWJk
MTQyN2Y5YTU3ZjQ2MWFkOTIyNzYyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9q
cy9kb20vZG9jdW1lbnQtYWxsLXdhdGNocG9pbnQtY292ZXJzLWVsaW1pbmF0ZWQtY29tcGFyZS1l
cS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBk
b2N1bWVudC5hbGwgd29ya3MgY29ycmVjdGx5IHdpdGggZWxtaW5hdGVkIENvbXBhcmVFcSBpbiBE
RkcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50QWxsQ29t
cGFyZS5pc051bGwgaXMgdHJ1ZQorUEFTUyBkb2N1bWVudEFsbENvbXBhcmUuaXNVbmRlZmluZWQg
aXMgdHJ1ZQorUEFTUyBkb2N1bWVudEFsbENvbXBhcmUubGVuZ3RoIGlzIDEzCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvZG9tL2RvY3VtZW50LWFsbC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5hdGVk
LWNvbXBhcmUtZXEuaHRtbCBiL0xheW91dFRlc3RzL2pzL2RvbS9kb2N1bWVudC1hbGwtd2F0Y2hw
b2ludC1jb3ZlcnMtZWxpbWluYXRlZC1jb21wYXJlLWVxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2M0Mzcx
YTY4YmI4MTQwMGJjM2MyNjlmZTg5NWRkZWJjOTY4OGIwZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2pzL2RvbS9kb2N1bWVudC1hbGwtd2F0Y2hwb2ludC1jb3ZlcnMtZWxpbWluYXRl
ZC1jb21wYXJlLWVxLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZG9j
dW1lbnQtYWxsLXdhdGNocG9pbnQtY292ZXJzLWVsaW1pbmF0ZWQtY29tcGFyZS1lcS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20v
c2NyaXB0LXRlc3RzL2RvY3VtZW50LWFsbC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5hdGVkLWNv
bXBhcmUtZXEuanMgYi9MYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL2RvY3VtZW50LWFs
bC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5hdGVkLWNvbXBhcmUtZXEuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjVkYjZmMjZhZDA4MTdkYTQ0ZjAyMGQxZTRkNDBiNmZhMzM2NDg0YQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtYWxsLXdhdGNocG9p
bnQtY292ZXJzLWVsaW1pbmF0ZWQtY29tcGFyZS1lcS5qcwpAQCAtMCwwICsxLDQ5IEBACitkZXNj
cmlwdGlvbigiVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBkb2N1bWVudC5hbGwgd29ya3MgY29ycmVj
dGx5IHdpdGggZWxtaW5hdGVkIENvbXBhcmVFcSBpbiBERkcuIik7CisKK2Z1bmN0aW9uIGNvbXBh
cmVGdW5jdGlvbihhKQoreworICAgIHZhciBsZW5ndGggPSBhLmxlbmd0aDsKKworICAgIHZhciBh
SXNOdWxsID0gKGEgPT0gbnVsbCkgfHwgKG51bGwgPT0gYSk7CisgICAgdmFyIGFJc1VuZGVmaW5l
ZCA9IChhID09IHVuZGVmaW5lZCkgfHwgKHVuZGVmaW5lZCA9PSBhKTsKKworICAgIGlmIChhID09
IG51bGwgfHwgdW5kZWZpbmVkID09IGEpCisgICAgICAgIHJldHVybiB7IGlzTnVsbDogYUlzTnVs
bCwgaXNVbmRlZmluZWQ6IGFJc1VuZGVmaW5lZCwgbGVuZ3RoOiBsZW5ndGggfTsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiB7IGlzTnVsbDogYUlzTnVsbCwgaXNVbmRlZmluZWQ6IGFJc1VuZGVm
aW5lZCB9OworfQorCisvLyBXYXJtdXAgd2l0aCBzYW5lIG9iamVjdHMuCitmb3IgKGxldCBpID0g
MDsgaSA8IDFlNDsgKytpKSB7CisgICAgbGV0IHJlc3VsdCA9IGNvbXBhcmVGdW5jdGlvbih7IGxl
bmd0aDogNX0pOworICAgIGlmIChyZXN1bHQuaXNOdWxsIHx8IHJlc3VsdC5pc1VuZGVmaW5lZCkK
KyAgICAgICAgZGVidWcoIkZhaWxlZCB3YXJtdXAgd2l0aCBjb21wYXJlRnVuY3Rpb24oeyBsZW5n
dGg6IDV9KS4iKTsKKworICAgIGxldCBvYmplY3QgPSBuZXcgT2JqZWN0OworICAgIG9iamVjdC5s
ZW5ndGggPSAxOworICAgIHJlc3VsdCA9IGNvbXBhcmVGdW5jdGlvbihvYmplY3QpOworICAgIGlm
IChyZXN1bHQuaXNOdWxsIHx8IHJlc3VsdC5pc1VuZGVmaW5lZCkKKyAgICAgICAgZGVidWcoIkZh
aWxlZCB3YXJtdXAgd2l0aCBjb21wYXJlRnVuY3Rpb24ob2JqZWN0KS4iKTsKK30KKworbGV0IGRv
Y3VtZW50QWxsID0gZG9jdW1lbnQuYWxsOwordmFyIGRvY3VtZW50QWxsQ29tcGFyZSA9IGNvbXBh
cmVGdW5jdGlvbihkb2N1bWVudEFsbCk7CitzaG91bGRCZVRydWUoImRvY3VtZW50QWxsQ29tcGFy
ZS5pc051bGwiKTsKK3Nob3VsZEJlVHJ1ZSgiZG9jdW1lbnRBbGxDb21wYXJlLmlzVW5kZWZpbmVk
Iik7CitzaG91bGRCZSgiZG9jdW1lbnRBbGxDb21wYXJlLmxlbmd0aCIsICIxMyIpOworCitmb3Ig
KGxldCBpID0gMDsgaSA8IDFlMzsgKytpKSB7CisgICAgbGV0IHJlc3VsdCA9IGNvbXBhcmVGdW5j
dGlvbih7IGxlbmd0aDogNX0pOworICAgIGlmIChyZXN1bHQuaXNOdWxsIHx8IHJlc3VsdC5pc1Vu
ZGVmaW5lZCkKKyAgICAgICAgZGVidWcoIkZhaWxlZCB0YWlsIHdpdGggY29tcGFyZUZ1bmN0aW9u
KHsgbGVuZ3RoOiA1fSkuIik7CisKKyAgICByZXN1bHQgPSBjb21wYXJlRnVuY3Rpb24oZG9jdW1l
bnRBbGwpOworICAgIGlmICghcmVzdWx0LmlzTnVsbCB8fCAhcmVzdWx0LmlzVW5kZWZpbmVkKQor
ICAgICAgICBkZWJ1ZygiRmFpbGVkIHRhaWwgd2l0aCBjb21wYXJlRnVuY3Rpb24oZG9jdW1lbnRB
bGwpLiIpOworCisgICAgbGV0IG9iamVjdCA9IG5ldyBPYmplY3Q7CisgICAgb2JqZWN0Lmxlbmd0
aCA9IDE7CisgICAgcmVzdWx0ID0gY29tcGFyZUZ1bmN0aW9uKG9iamVjdCk7CisgICAgaWYgKHJl
c3VsdC5pc051bGwgfHwgcmVzdWx0LmlzVW5kZWZpbmVkKQorICAgICAgICBkZWJ1ZygiRmFpbGVk
IHRhaWwgd2l0aCBjb21wYXJlRnVuY3Rpb24ob2JqZWN0KS4iKTsKK30KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259342</attachid>
            <date>2015-08-18 19:23:51 -0700</date>
            <delta_ts>2015-08-18 19:36:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148157-20150818192348.patch</filename>
            <type>text/plain</type>
            <size>55889</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YjAyYWFhNzNlYTE3NTFiMGRlMDFhMDA5YzFlNDkyNzBkOTQzZmIxLi5iMDgyNTZmNGRiOGY1OWU2
YzZkZjA3YWMxODZhYTYxZTMzY2JiMzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDUgQEAKKzIwMTUtMDgtMTggIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gT3B0aW1pemUgbW9yZSBjYXNlcyBvZiBzb21ldGhpbmct
Y29tcGFyZWQtdG8tbnVsbC91bmRlZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODE1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvbXBhcmVFcSBpcyBmYWlybHkgdHJpdmlhbCBpZiB5b3UgYXNz
ZXJ0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgZWl0aGVyCisgICAgICAgIG51bGwgb3IgdW5kZWZp
bmVkLiBVbmRlciB0aG9zZSBjb25kaXRpb25zLCB0aGUgb25seSB3YXkgdG8gaGF2ZSAidHJ1ZSIK
KyAgICAgICAgaXMgdG8gaGF2ZSB0aGUgb3RoZXIgb3BlcmFuZCBiZSBudWxsL3VuZGVmaW5lZCBv
ciBoYXZlIGFuIG9iamVjdAorICAgICAgICB0aGF0IG1hc3F1ZXJhZGVzIHRvIHVuZGVmaW5lZC4K
KworICAgICAgICBKU0MgYWxyZWFkeSBoYWQgYSBmYXN0IHBhdGggaW4gQ29tcGFyZUVxQ29uc3Rh
bnQuCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgSSBnZW5lcmFsaXplIHRoaXMgZmFzdCBwYXRo
IHRvIG1vcmUgY2FzZXMgYW5kIHRyeQorICAgICAgICB0byBlbGltaW5hdGUgdGhlIGNoZWNrcyB3
aGVuZXZlciBwb3NzaWJsZS4KKworICAgICAgICBDb21wYXJlRXEgbm93IGRvZXMgdGhlIGpvYiBv
ZiBDb21wYXJlRXFDb25zdGFudC4gSWYgYW55IG9wZXJhbmQgY2FuCisgICAgICAgIGJlIHByb3Zl
ZCB0byBiZSB1bmRlZmluZWQvb3RoZXIsIGl0cyBlZGdlIGlzIHNldCB0byBPdGhlclVzZS4gV2hl
bmV2ZXIKKyAgICAgICAgYW55IGVkZ2UgaXMgT3RoZXJVc2UsIHdlIGdlbmVyYXRlIHRoZSBmYXN0
IGNvZGUgd2UgaGFkIGZvciBDb21wYXJlRXFDb25zdGFudC4KKworICAgICAgICBUaGUgQWJzdHJh
Y3RJbnRlcnByZXRlciBoYXMgYWRkaXRpb25hbCBjaGVja3MgdG8gcmVkdWNlIHRoZSBub2RlIHRv
IGEgY29uc3RhbnQKKyAgICAgICAgd2hlbmV2ZXIgcG9zc2libGUuCisKKyAgICAgICAgVGhlcmUg
YXJlIHR3byBhZGRpdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaDoKKyAgICAgICAgLVRoZSBG
aXh1cCBQaGFzZSB0cmllcyB0byBzZXQgZWRnZXMgdG8gT3RoZXJVc2UgZWFybHkuIFRoaXMgaXMg
ZG9uZSBjb3JyZWN0bHkKKyAgICAgICAgIGluIENvbnN0YW50Rm9sZGluZ1BoYXNlIGJ1dCBzZXR0
aW5nIGl0IHVwIGVhcmx5IGhlbHBzIHRoZSBwaGFzZXMgcmVseWluZworICAgICAgICAgb24gQ2xv
YmJlcml6ZS4KKyAgICAgICAgLVRoZSBjb2RlZ2VuIGZvciBDb21wYXJlRXFDb25zdGFudCB3YXMg
aW1wcm92ZWQuIFRoZSByZWFzb24gaXMgdGhlIGNvbXBhcmlzb24KKyAgICAgICAgIGZvciBPYmpl
Y3RPck90aGVyIGNvdWxkIGJlIGZhc3RlciBqdXN0IGJlY2F1c2UgdGhlIGNvZGVnZW4gd2FzIGJl
dHRlci4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNVbmRlZmluZWRPck51bGxDb25zdGFudCk6CisgICAg
ICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0tub3duTm90T3RoZXIp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVO
dWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxs
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5l
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2hOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoTnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFs
aWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUVxKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVFcUNv
bnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1u
dWxsLWFuZC11bmRlZmluZWQtbm9uLXBlZXBob2xlLmpzOiBBZGRlZC4KKyAgICAgICAgKHN0cmlu
Z19hcHBlYXJlZF9oZXJlLnVzZUZvck1hdGgpOgorICAgICAgICAodGVzdFVzZUZvck1hdGgpOgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb21wYXJlLWVxLW9uLW51bGwtYW5kLXVuZGVmaW5lZC1v
cHRpbWl6ZWQtaW4tY29uc3RhbnQtZm9sZGluZy5qczogQWRkZWQuCisgICAgICAgIChzdHJpbmdf
YXBwZWFyZWRfaGVyZS51bnJlYWNoYWJsZUNvZGVUZXN0KToKKyAgICAgICAgKGlubGluZWRDb21w
YXJlVG9OdWxsKToKKyAgICAgICAgKGlubGluZWRDb21wYXJlZFRvVW5kZWZpbmVkKToKKyAgICAg
ICAgKHdhcm11cElubGluZUZ1bmN0aW9ucyk6CisgICAgICAgICh0ZXN0SW5saW5lRnVuY3Rpb25z
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1udWxsLWFuZC11bmRlZmlu
ZWQuanM6IEFkZGVkLgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29tcGFyZUNvbnN0
YW50cyk6CisgICAgICAgIChvcGFxdWVOdWxsKToKKyAgICAgICAgKG9wYXF1ZVVuZGVmaW5lZCk6
CisgICAgICAgIChjb21wYXJlQ29uc3RhbnRzQW5kRHluYW1pY1ZhbHVlcyk6CisgICAgICAgIChj
b21wYXJlRHluYW1pY1ZhbHVlcyk6CisgICAgICAgIChjb21wYXJlRHluYW1pY1ZhbHVlVG9JdHNl
bGYpOgorICAgICAgICAoYXJyYXlUZXN0aW5nKToKKyAgICAgICAgKG9wYXF1ZUNvbXBhcmUxKToK
KyAgICAgICAgKHRlc3ROdWxsQ29tcGFyYXRvclVwZGF0ZSk6CisgICAgICAgIChvcGFxdWVDb21w
YXJlMik6CisgICAgICAgICh0ZXN0VW5kZWZpbmVkQ29tcGFyYXRvclVwZGF0ZSk6CisgICAgICAg
IChvcGFxdWVDb21wYXJlMyk6CisgICAgICAgICh0ZXN0TnVsbEFuZFVuZGVmaW5lZENvbXBhcmF0
b3JVcGRhdGUpOgorCiAyMDE1LTA4LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGNvbnN0IHRvIGNvbnRlbnQgZXh0ZW5zaW9uIHBh
cnNlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCmluZGV4IDFiZDhmNjk0MGUyMGMzYzYyODU2NDc0NmI4MDA4
YzkyZTZlMzgzMjQuLjVlMmE2MGI1YzFmYTE0NmJlNzQ0Y2QzMTc1YjkzZGQyNmMxMDNiYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTExMzksOCArMTEzOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2Ji
ZXJMaW1pCiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6
CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgIGNhc2UgQ29tcGFyZUVxOgotICAgIGNh
c2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsKKyAgICBjYXNlIENvbXBhcmVFcTogewogICAgICAgICBK
U1ZhbHVlIGxlZnRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAg
ICAgIEpTVmFsdWUgcmlnaHRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7
CiAgICAgICAgIGlmIChsZWZ0Q29uc3QgJiYgcmlnaHRDb25zdCkgewpAQCAtMTE4MCwxMyArMTE3
OSw0MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCB8
fCBub2RlLT5vcCgpID09IENvbXBhcmVFcSkgeworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZXNDb3VsZEJlRXF1YWwobGVmdFR5cGUsIHJpZ2h0VHlwZSkpIHsKICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IFNw
ZWNPdGhlcikKKyAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobGVmdFR5cGUsIHJpZ2h0VHlwZSk7
CisgICAgICAgICAgICBpZiAocmlnaHRUeXBlID09IFNwZWNPdGhlcikgeworICAgICAgICAgICAg
ICAgIC8vIFVuZGVmaW5lZCBhbmQgTnVsbCBhcmUgYWx3YXlzIGVxdWFsIHdoZW4gY29tcGFyZWQg
dG8gZWFjaG90aGVyLgorICAgICAgICAgICAgICAgIGlmICghKGxlZnRUeXBlICYgflNwZWNPdGhl
cikpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRy
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gQW55IG90aGVyIHR5cGUgY29tcGFyZWQgdG8gTnVsbCBvciBVbmRl
ZmluZWQgaXMgYWx3YXlzIGZhbHNlCisgICAgICAgICAgICAgICAgLy8gYXMgbG9uZyBhcyB0aGUg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB3YXRjaHBvaW50IGlzIHZhbGlkLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgLy8gTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBvbmx5IG1h
dHRlcnMgZm9yIFNwZWNPYmplY3RPdGhlciwgb3RoZXIKKyAgICAgICAgICAgICAgICAvLyBjYXNl
cyBhcmUgYWx3YXlzICJmYWxzZSIuCisgICAgICAgICAgICAgICAgaWYgKCEobGVmdFR5cGUgJiAo
U3BlY09iamVjdE90aGVyIHwgU3BlY090aGVyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghKGxlZnRUeXBl
ICYgU3BlY090aGVyKSAmJiBtX2dyYXBoLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
SXNTdGlsbFZhbGlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkoZ2xvYmFsT2JqZWN0LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpID09IG5vZGUtPmNoaWxkMigpKSB7CkBAIC0xMjA2LDcgKzEyMzIsNiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NF
cToKICAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgICAgICAg
ICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFu
dDoKICAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRydWUp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5k
ZXggNTNlMWJlZmRiMTU5OTQ1MzU5ODc2NjAxNWZiMmNiZTlhNTMzM2VhYy4uOWRjYzc0Nzk3ZmQ5
MjRiMDM4ZGJmODJhZDg0ZjRhM2M4OTIwMDlkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTMzNTYsNyArMzM1Niw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAgICAgICAgY2Fz
ZSBvcF9lcV9udWxsOiB7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9H
cmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKG1fY29uc3RhbnROdWxsKSkpKTsKKyAgICAgICAgICAgIE5vZGUqIG51bGxDb25zdGFudCA9
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSk7CisgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIG51bGxDb25zdGFudCkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZXFfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtMzM3Niw3ICszMzc3
LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIAog
ICAgICAgICBjYXNlIG9wX25lcV9udWxsOiB7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50
LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKSkp
KTsKKyAgICAgICAgICAgIE5vZGUqIG51bGxDb25zdGFudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFu
dCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxO
b3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KSkpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfbmVxX251bGwpOwogICAgICAgICB9CiAKQEAgLTM1MjMsNyAr
MzUyNSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9j
b25zdGFudE51bGwpKSk7CisgICAgICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQgPSBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpOworICAgICAgICAgICAgTm9k
ZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3Vy
cmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9qZXFfbnVsbCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2plcV9udWxsKTsKICAgICAgICAgfQpAQCAtMzUzMSw3ICszNTM0LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9qbmVx
X251bGw6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1
ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKSk7CisgICAg
ICAgICAgICBOb2RlKiBudWxsQ29uc3RhbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtX2NvbnN0YW50TnVsbCkpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9H
cmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQpOwogICAgICAgICAgICAgYWRkVG9H
cmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9qbmVxX251bGwpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX251bGwpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDc3Mjdh
OWVkMGFkMGMzOTJjMDdhZDM4ZTViODc3MmEyMmMyOTZhZDguLjc5MGQ2NTU2N2VhNTM0YjNiZDUy
M2NiMDljODMxYzY4NjI0M2NmYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCkBAIC0xNDMsNyArMTQzLDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICBjYXNlIFNraXBTY29wZToKICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CiAgICAgY2FzZSBT
dHJpbmdGcm9tQ2hhckNvZGU6Ci0gICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29s
ZWFuOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAppbmRleCAzZDg1Y2FhYmQ2MTU3M2ZkZDU0OWQ1ZmU3NWJjNjRmM2U1NjRm
MWU1Li5kMzUxZTU3MmE2NzJkMzVkMjYyN2Y4OWJkZDU3ZmFhODQ0NDA4ZjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cApAQCAtOTcsNiArOTcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAgICAgICAg
ICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCks
IFNwZWNPdGhlcikpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoT3RoZXJVc2UpOworICAgICAgICAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5
cGVDaGVjayhub2RlLT5jaGlsZDIoKSwgU3BlY090aGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPdGhlclVzZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggMzU0NzMzMmYwYjQxYWNk
MmMzNGI0ZTVlYzE0NjVjYjAxYzkzOWMxMS4uZTFlNDA5ZjExNDQ5NTQwNmI4NTQ1YmQ4MzUzMTgz
NDdiNDI0NzUyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
MTE2LDcgKzExNiw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICBj
YXNlIENvbXBhcmVFcToKLSAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgogICAgIGNhc2UgQ29t
cGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDBhYjM5MzgzOTRm
MjY4NmE0NWFkMWY2MWQwODFmMmI1ZDhmMzc3Y2IuLjk4YjAwOWViMWVkMGIxMjJlNzU2YjRkNGRi
Njk4MTU4NTEwYjU3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcApAQCAtMzY4LDEwICszNjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZp
eEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDb21wYXJlRXE6
CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CkBAIC00MjQsNiArNDIwLDMyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
ZWl0aGVyIGNoaWxkIGNhbiBiZSBwcm92ZWQgdG8gYmUgTnVsbCBvciBVbmRlZmluZWQsIGNvbXBh
cmluZyB0aGVtIGlzIGdyZWF0bHkgc2ltcGxpZmllZC4KKyAgICAgICAgICAgIGJvb2wgb25lQXJn
dW1lbnRJc1VzZWRBc1NwZWNPdGhlciA9IGZhbHNlOworICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5pc1VuZGVmaW5lZE9yTnVsbENvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBm
aXhFZGdlPE90aGVyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgb25lQXJn
dW1lbnRJc1VzZWRBc1NwZWNPdGhlciA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPdGhlcigpKSB7CisgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNr
LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBPdGhlclVzZSkpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8T3RoZXJVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBvbmVBcmd1bWVudElzVXNlZEFzU3BlY090
aGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KS0+aXNVbmRlZmluZWRPck51bGxDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgZml4RWRn
ZTxPdGhlclVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIG9uZUFyZ3VtZW50
SXNVc2VkQXNTcGVjT3RoZXIgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVjaywgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSwgT3RoZXJVc2UpKTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE90aGVyVXNlPihub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICAgICAgb25lQXJndW1lbnRJc1VzZWRBc1NwZWNPdGhlciA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob25lQXJndW1lbnRJc1VzZWRB
c1NwZWNPdGhlcikgeworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RH
ZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewogICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8T2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgZml4RWRnZTxPYmplY3RPck90aGVyVXNlPihub2RlLT5jaGlsZDIoKSk7CkBAIC00MzYsNiAr
NDU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVN
dXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCmluZGV4IDMwNjMyN2E0ZDAwOTQxMmM5NzVkZTI5NjBkMGUyOTM0NzA2
ZGQ4NWMuLjgwMDMzYjAzNjJmMTUwNGQyY2IyNGI2OTZiYTk2MDlhM2IzNzg4YWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC02OTAsNyArNjkwLDEyIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICB7CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpLT52YWx1ZSgpLmFzQm9vbGVhbigp
OwogICAgIH0KLSAgICAgCisKKyAgICBib29sIGlzVW5kZWZpbmVkT3JOdWxsQ29uc3RhbnQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgp
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgfQorCiAgICAgYm9vbCBpc0NlbGxDb25zdGFudCgp
CiAgICAgewogICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVl
KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0NlbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAppbmRleCA3NGFhOTg0NjgzMDljMmI0M2IyMTg3NDRhNmYzMDc0YjEx
M2EwZGE1Li4wNzc1YzY4ZmMzMGViZTMxMWU5YTJjN2E0NjM1Zjk3YzQ4NDA2MmI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC0yMzEsNyArMjMxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyLCBO
b2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDb21wYXJl
R3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAot
ICAgIG1hY3JvKENvbXBhcmVFcUNvbnN0YW50LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1h
Y3JvKENvbXBhcmVTdHJpY3RFcSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgLyog
Q2FsbHMuICovXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCAzNTU3MzVmMDkyMjFmOTY1NTkz
Y2FiN2QxNGIyODA4MWNmNmE4YTFiLi4wMGU0ZTg2ZmZmN2RlZDNiZTc4ZTA3NzhjZDljZGY3MTI3
OTJkYzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMzcxLDcgKzM3MSw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVx
Q29uc3RhbnQ6CiAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgICAgICBjYXNlIElu
c3RhbmNlT2Y6CiAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IGY3Nzg3ZjQxYjYwNDBhMmY5NDZkZmFh
MzA3MTcxYzA4NTRlNTViMjYuLmIxZmM1ZmIwOWNiMTExMzUyOWE1ZGYwNWU5NjAxM2EzNzFjNTBi
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBA
IC0xOTgsNyArMTk4LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6
CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgogICAgIGNhc2UgQ29tcGFyZUVxOgotICAgIGNh
c2UgQ29tcGFyZUVxQ29uc3RhbnQ6CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2Fz
ZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBhY2E0ODIwNDVlYThlMTVjYTQyOWYyNDk4
MTFjZTA5M2E2YTU2YWM4Li43MWZhNjA1Yjg5NGZiOTU5ZWJiNDZkYmUwNjY0NmMyYzM5MGRmZDFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cApAQCAtMTM2OSw2ICsxMzY5LDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZUJyYW5jaChOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hCiAgICAgICAg
ICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RPck90aGVyVXNlLCBPYmplY3RVc2Up
KQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSwgYnJhbmNoTm9kZSk7CisgICAg
ICAgICAgICBlbHNlIGlmICghbmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNPdGhl
cikpCisgICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVu
ZGVmaW5lZChub2RlLT5jaGlsZDIoKSwgYnJhbmNoTm9kZSk7CisgICAgICAgICAgICBlbHNlIGlm
ICghbmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQyKCksIFNwZWNPdGhlcikpCisgICAgICAgICAg
ICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZChub2RlLT5j
aGlsZDEoKSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlv
biwgb3BlcmF0aW9uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5MDAsOCAr
MzkwNCwxOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbgogICAgICAgICAgICAgY29tcGlsZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKworICAgICAgICBpZiAo
IW5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIpKSB7CisgICAgICAgICAg
ICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMigpLCBTcGVjT3RoZXIpKSB7CisgICAg
ICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCisKICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBj
b25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IGIyYmJlNjJkOTg1ZTAz
ZTk2ZjUzYTM1ZWRiOTMwOTU2YWY4Njg0MTcuLmIyMDA4YTFlN2ViNjVhNWE5MDMyYzZlOWU3NDk4
NTQxYTA3ZjJlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKQEAgLTU1Niw2ICs1NTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0tub3duTm90
SW50ZWdlcihOb2RlKiBub2RlKSB7IHJldHVybiAhKG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5
cGUgJiBTcGVjSW50MzIpOyB9CiAgICAgYm9vbCBpc0tub3duTm90TnVtYmVyKE5vZGUqIG5vZGUp
IHsgcmV0dXJuICEobV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZSAmIFNwZWNGdWxsTnVtYmVy
KTsgfQogICAgIGJvb2wgaXNLbm93bk5vdENlbGwoTm9kZSogbm9kZSkgeyByZXR1cm4gIShtX3N0
YXRlLmZvck5vZGUobm9kZSkubV90eXBlICYgU3BlY0NlbGwpOyB9CisgICAgYm9vbCBpc0tub3du
Tm90T3RoZXIoTm9kZSogbm9kZSkgeyByZXR1cm4gIShtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlICYgU3BlY090aGVyKTsgfQogICAgIAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudGlm
aWVyVUlEKHVuc2lnbmVkIGluZGV4KQogICAgIHsKQEAgLTcwMSw5ICs3MDIsOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKEVkZ2UmIGJhc2VF
ZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpOwogCi0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKLSAgICB2
b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSog
YnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2
ZUNvbXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwor
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQo
RWRnZSBvcGVyYW5kKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
T3JVbmRlZmluZWQoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlKTsKICAgICAKICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSosIE5vZGUqIGJyYW5jaE5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJhdGlvbl9FSkog
aGVscGVyRnVuY3Rpb24pOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBh
cmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0pJVE9wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggNzUxMjA5Njc5YWMyOWQ5MDY1
ZDBiMDAxYWM3YTI5YWQ5ODdiOTk4OS4uYmJhNzZjNTljYjkxM2IwZmYxOGZmMjRjZjg2NTg5NTM1
NmEyYWFlZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMzQsOSArMjM0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9h
ZEdQUiwKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEY6Om1vdmUoc2xvd1BhdGgpKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVO
dWxsKEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQp
CiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQpOworICAgIEpTVmFsdWVP
cGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAg
IEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CiAgICAgR1BSUmVnIGFyZ1BheWxvYWRH
UFIgPSBhcmcucGF5bG9hZEdQUigpOwogCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKEVkZ2Ugb3BlcmFu
ZCwgYm9vbCBpbnYKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAg
ICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGFyZy5qc1ZhbHVlUmVn
cygpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMy
KDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKQEAgLTI2Myw3ICsyNjMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51
bGwoRWRnZSBvcGVyYW5kLCBib29sIGludgogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIoMSkg
OiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAKICAgICAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsoJm1faml0KTsKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5k
LCBib29sIGludgogICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmUzMihp
bnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGxvY2Fs
R2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdFBheWxvYWRHUFIp
OworICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2Jh
bE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAg
ICB9CiAgCiAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpIHsKQEAgLTI4Miw3
ICsyODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGludgogICAgICAgICAvLyBudWxsIG9yIHVu
ZGVmaW5lZD8KICAgICAgICAgQ09NUElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8
IDEpID09IEpTVmFsdWU6Ok51bGxUYWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxsVGFn
KTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIGFyZ1RhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmUzMihpbnZlcnQgPyBKSVRDb21waWxl
cjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIG1f
aml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAKICAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgfQpAQCAtMjkyLDExICsyOTIsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKEVkZ2Ugb3Bl
cmFuZCwgYm9vbCBpbnYKICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY3Vy
cmVudE5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxP
clVuZGVmaW5lZChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUpCiB7CiAgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOwogICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtl
bi5ibG9jazsKLSAgICAKKworICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgaWYgKHRha2Vu
ID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CiAgICAgICAgIEJh
c2ljQmxvY2sqIHRtcCA9IHRha2VuOwpAQCAtMzA0LDcgKzMwNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9k
ZSogYnJhbmNoCiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywg
b3BlcmFuZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJSZWcgYXJnVGFnR1BS
ID0gYXJnLnRhZ0dQUigpOwogICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRH
UFIoKTsKICAgICAKQEAgLTM1MSwyOSArMzUyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2gK
ICAgICBqdW1wKG5vdFRha2VuKTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVDb21wYXJlTnVsbChOb2RlKiBub2RlLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQot
ewotICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNo
KCk7Ci0gICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAgICAgICBO
b2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKLQotICAg
ICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwotICAgICAgICAKLSAg
ICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwob3BlcmFuZCwgYnJhbmNoTm9k
ZSwgaW52ZXJ0KTsKLSAgICAKLSAgICAgICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
dXNlKG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRl
eEluQmxvY2s7Ci0gICAgICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlTnVsbChvcGVyYW5kLCBpbnZlcnQpOwotICAgIAotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7
CiAgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2Vu
LmJsb2NrOwpAQCAtMjI3OCwxMiArMjI1Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGNvbXBhcmUobm9kZSwgSklUQ29tcGlsZXI6Okdy
ZWF0ZXJUaGFuT3JFcXVhbCwgSklUQ29tcGlsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwg
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBB
U1NFUlQobm9kZS0+Y2hpbGQyKCktPmFzSlNWYWx1ZSgpLmlzTnVsbCgpKTsKLSAgICAgICAgaWYg
KG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS0+Y2hpbGQxKCkpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ29tcGFyZUVxOgogICAg
ICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpE
b3VibGVFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUVxKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGFmZjczMTQwN2Y3MmFlNmU0
MWY2ZDY5YTRiYWViYjc0ZjdlMDhkYmQuLjEzOThjNjA2NjZhODdlNmE1ZDg3OWQ3NzkzOGVhNTJl
NjgxN2IyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcApAQCAtMTkyLDE0NiArMTkyLDExOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQ
UlJlZwogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURjo6bW92ZShzbG93UGF0aCkpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51
bGwoRWRnZSBvcGVyYW5kLCBib29sIGludmVydCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCkK
IHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCk7CisgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQo
KSB8fCAhaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpLCAiVGhlIENvbXBhcmUgc2hvdWxkIGhh
dmUgYmVlbiBlbGltaW5hdGVkLCBpdCBpcyBrbm93biB0byBiZSBhbHdheXMgZmFsc2UuIik7CisK
KyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwogICAgIAotICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFyZyk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsKLSAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgewotICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9w
ZXJhbmQubm9kZSgpKSkKLSAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENl
bGwoSlNWYWx1ZVJlZ3MoYXJnR1BSKSk7CiAKLSAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBU
cnVzdGVkSW1tMzIoMSkgOiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CisgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
ZG9uZTsKKyAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFs
aWQoKSkgeworICAgICAgICBpZiAoIWlzS25vd25Ob3RDZWxsKG9wZXJhbmQubm9kZSgpKSkKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaElmQ2VsbChKU1ZhbHVlUmVncyhhcmdH
UFIpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2Jq
ZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMp
OwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAorICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RDZWxsOwogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9k
ZSgpKSkKICAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1
ZVJlZ3MoYXJnR1BSKSk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpOb25aZXJvLCAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICBKSVRD
b21waWxlcjo6WmVybywKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ0dQUiwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgICAgICBkb25lLmFw
cGVuZChpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOwogCi0gICAgICAgIG1faml0Lm1vdmUo
aW52ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOwot
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgpOwotCi0gICAg
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAgICAgIEdQUlJl
ZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAg
ICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0Lmdwcigp
OwogICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBs
b2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKGFy
Z0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5jb21wYXJlUHRy
KGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgbG9j
YWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2Jq
ZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5u
b2RlKCkpKQorICAgICAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgfQogIAotICAg
IGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKSB7Ci0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBub3RDZWxsLmxp
bmsoJm1faml0KTsKLSAgICAgICAgCisgICAgaWYgKCFpc0tub3duTm90T3RoZXIob3BlcmFuZC5u
b2RlKCkpKSB7CiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCByZXN1bHRHUFIpOwogICAgICAg
ICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8gSklUQ29tcGls
ZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6
OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKICAgICB9Ci0gICAKLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsoJm1faml0KTsKKworICAgIGRvbmUubGluaygmbV9qaXQpOwogIAogICAgIG1faml0Lm9yMzIo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBv
cGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVy
YW5kLCBOb2RlKiBicmFuY2hOb2RlKQogeworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkgfHwgIWlzS25vd25DZWxs
KG9wZXJhbmQubm9kZSgpKSwgIlRoZSBDb21wYXJlIHNob3VsZCBoYXZlIGJlZW4gZWxpbWluYXRl
ZCwgaXQgaXMga25vd24gdG8gYmUgYWx3YXlzIGZhbHNlLiIpOworCiAgICAgQmFzaWNCbG9jayog
dGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOwogICAgIEJhc2lj
QmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9j
azsKLSAgICAKLSAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAgICAgaW52ZXJ0
ID0gIWludmVydDsKLSAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47Ci0gICAgICAgIHRh
a2VuID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KIAotICAgIEpT
VmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmco
dGhpcywgb3BlcmFuZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJSZWcgYXJn
R1BSID0gYXJnLmdwcigpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIGFyZyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwotICAgIAorCisgICAgLy8gRmlyc3QsIGhhbmRs
ZSB0aGUgY2FzZSB3aGVyZSAib3BlcmFuZCIgaXMgYSBjZWxsLgogICAgIGlmIChtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIGlmICghaXNL
bm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJy
YW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsKLSAgICAgICAgCi0gICAgICAgIGp1
bXAoaW52ZXJ0ID8gdGFrZW4gOiBub3RUYWtlbiwgRm9yY2VKdW1wKTsKKyAgICAgICAgaWYgKCFp
c0tub3duTm90Q2VsbChvcGVyYW5kLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsK
KyAgICAgICAgICAgIGFkZEJyYW5jaChpc0NlbGwsIG5vdFRha2VuKTsKKyAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlbW90ZUdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90Q2VsbDsKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAg
ICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGFyZ0dQ
UikpOwogICAgICAgICAKICAgICAgICAgYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Olplcm8sIAog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgCi0gICAgICAgICAgICBpbnZlcnQgPyB0YWtlbiA6IG5v
dFRha2VuKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCksIG5vdFRha2VuKTsKIAogICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxP
YmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlbW90
ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAg
ICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdw
cigpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RH
UFIpOwotICAgICAgICBicmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9i
amVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2Vu
KTsKKyAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmpl
Y3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgdGFrZW4pOworCisgICAgICAgIGlmICghaXNL
bm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKSB7CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuLCBG
b3JjZUp1bXApOworICAgICAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIH0K
ICAgICB9Ci0gCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpIHsKLSAgICAg
ICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKLSAgICAgICAgCi0gICAgICAgIG5vdENlbGwu
bGluaygmbV9qaXQpOwotICAgICAgICAKKworICAgIGlmIChpc0tub3duTm90T3RoZXIob3BlcmFu
ZC5ub2RlKCkpKQorICAgICAgICBqdW1wKG5vdFRha2VuKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
SklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uID0gSklUQ29tcGlsZXI6
OkVxdWFsOworICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKKyAgICAgICAgICAg
IGNvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb3RFcXVhbDsKKyAgICAgICAgICAgIHN0ZDo6c3dh
cCh0YWtlbiwgbm90VGFrZW4pOworICAgICAgICB9CiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BS
LCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICBicmFuY2g2NChpbnZl
cnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQ
UiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpLCB0YWtlbik7Ci0gICAgfQot
ICAgIAotICAgIGp1bXAobm90VGFrZW4pOwotfQotCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUqIG5vZGUsIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZl
cnQpCi17Ci0gICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVC
cmFuY2goKTsKLSAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAg
ICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwot
Ci0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+YWRqdXN0ZWRS
ZWZDb3VudCgpID09IDEpOwotICAgICAgICAKLSAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaE51bGwob3BlcmFuZCwgYnJhbmNoTm9kZSwgaW52ZXJ0KTsKLSAgICAKLSAgICAgICAg
dXNlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKLSAgICAg
ICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7Ci0gICAgICAgIG1fY3VycmVu
dE5vZGUgPSBicmFuY2hOb2RlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGJyYW5jaDY0KGNvbmRpdGlvbiwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCksIHRha2VuKTsKKyAgICAgICAganVtcChub3RUYWtlbik7CiAgICAgfQot
ICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChvcGVyYW5kLCBp
bnZlcnQpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hO
b2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJh
dGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCkBAIC0yNDExLDEyICsyMzgzLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBpZiAoY29tcGFyZShub2Rl
LCBKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBKSVRDb21waWxlcjo6RG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgQ29tcGFyZUVxQ29u
c3RhbnQ6Ci0gICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS0+YXNKU1ZhbHVlKCkuaXNOdWxs
KCkpOwotICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2RlLCBub2RlLT5j
aGlsZDEoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBDb21wYXJlRXE6CiAgICAgICAgIGlmIChjb21wYXJlKG5vZGUsIEpJVENvbXBpbGVyOjpFcXVh
bCwgSklUQ29tcGlsZXI6OkRvdWJsZUVxdWFsLCBvcGVyYXRpb25Db21wYXJlRXEpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCA2YTEzNGQwNDhhZjA0OTM4
MjIzMjRhNDQyNGMyODc0ZTU3YjEzZDczLi5lY2E4NDNiYjQxOTk5NjUyYzgyOWIwMWJiNWI1OGU5
ZDJiZDY0YzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApA
QCAtMjM2LDcgKzIzNiw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVH
cmVhdGVyOgogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAgICAg
ICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcUNv
bnN0YW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQyKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25Q
aGFzZS5jcHAKaW5kZXggZjkyNGU0YTJjZTkyMTlhODgwYzJlYzI0MThmOWE3MGZhM2I5ZjdkMi4u
NDBjYWFjOGM3ZWJhYzkzYjkxYjlmYTBhNmI4N2I2ZjFmZDBjZjI2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UuY3BwCkBAIC03Myw3ICs3Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGUoKQogICAg
IHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBDb21wYXJl
RXFDb25zdGFudDoKICAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICAgICAgICAgIGhhbmRs
ZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODEsNyAr
ODAsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVFcToKICAgICAgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpCiAgICAgICAgICAgICAgICAgfHwg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBtX25vZGUtPmNoaWxk
MigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQotICAgICAgICAgICAgICAgIHx8ICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG1fbm9kZS0+
Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkpCisgICAgICAgICAgICAgICAgfHwgKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbV9ub2RlLT5j
aGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKQorICAgICAgICAgICAgICAgIHx8IChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSB8fCBtX25vZGUtPmNoaWxkMigpLnVz
ZUtpbmQoKSA9PSBPdGhlclVzZSkpCiAgICAgICAgICAgICAgICAgaGFuZGxlTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA3NzM3NDIxY2Uw
NmFkZjUxZThhODBlOGQxM2YzY2E2MmU5YTVhZmQ2Li5hMTI0ZTZhMTViMzc1OGRkZGEwNDllZWQ5
MjIwZTk2NmExYTI4N2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCkBAIC05Niw3ICs5Niw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBBcml0
aE5lZ2F0ZToKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgIGNhc2UgQ29tcGFyZUVxQ29u
c3RhbnQ6CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2Ug
UGhpOgpAQCAtMzIxLDYgKzMyMCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSwgT2JqZWN0VXNlKSkKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE90aGVyVXNlIHx8
IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIENvbXBhcmVTdHJpY3RF
cToKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCmluZGV4IDhhN2Qw
MGRiNGU2NDMzOTcwZjlhM2JiYjRhZWEyMDNmYjVjMTc3Y2YuLjFmYWFjZGIwMTI3NThjMjgwMDk0
ZTU5ODY0ZmUyM2M3ZTMyZDlkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCkBAIC03MDEsOSArNzAxLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBDb21wYXJlRXE6CiAgICAgICAgICAgICBjb21waWxlQ29tcGFyZUVxKCk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKLSAgICAgICAg
ICAgIGNvbXBpbGVDb21wYXJlRXFDb25zdGFudCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVTdHJp
Y3RFcSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MTQ2LDE4ICs0MTQzLDIyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTExWTUludEVRLCBvcGVyYXRp
b25Db21wYXJlRXEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAor
CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+
Y2hpbGQxKCksIFNwZWNPdGhlcikpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51bGxP
clVuZGVmaW5lZChtX25vZGUtPmNoaWxkMigpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxP
clVuZGVmaW5lZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkg
PT0gT3RoZXJVc2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5
cGVDaGVjayhtX25vZGUtPmNoaWxkMigpLCBTcGVjT3RoZXIpKTsKKyAgICAgICAgICAgIHNldEJv
b2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVG
YWxzZSwgRXF1YWxOdWxsT3JVbmRlZmluZWQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21w
aWxlQ29tcGFyZUVxQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hp
bGQyKCktPmFzSlNWYWx1ZSgpLmlzTnVsbCgpKTsKLSAgICAgICAgc2V0Qm9vbGVhbigKLSAgICAg
ICAgICAgIGVxdWFsTnVsbE9yVW5kZWZpbmVkKAotICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hp
bGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkKSk7Ci0gICAgfQot
ICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpCiAgICAgewogICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbXBhcmUtZXEtb24tbnVsbC1hbmQtdW5k
ZWZpbmVkLW5vbi1wZWVwaG9sZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvY29tcGFyZS1lcS1vbi1udWxsLWFuZC11bmRlZmluZWQtbm9uLXBlZXBob2xlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjIwZmY5NWZlYjdmMjE4MWMwYzY4YTIzZTI0OWZmZmJhNzQ3YzE0YTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbXBhcmUtZXEt
b24tbnVsbC1hbmQtdW5kZWZpbmVkLW5vbi1wZWVwaG9sZS5qcwpAQCAtMCwwICsxLDQ1IEBACisi
dXNlIHN0cmljdCIKKworZnVuY3Rpb24gdXNlRm9yTWF0aCh1bmRlZmluZWRBcmd1bWVudCwgbnVs
bEFyZ3VtZW50LCBwb2x5bW9ycGhpY0FyZ3VtZW50KSB7CisgICAgdmFyIGEgPSAobnVsbCA9PSB1
bmRlZmluZWRBcmd1bWVudCkgKyAodW5kZWZpbmVkQXJndW1lbnQgPT0gbnVsbCkgKyAodW5kZWZp
bmVkID09IHVuZGVmaW5lZEFyZ3VtZW50KSArICh1bmRlZmluZWRBcmd1bWVudCA9PSB1bmRlZmlu
ZWQpOworICAgIHZhciBiID0gKG51bGwgPT0gbnVsbEFyZ3VtZW50KSArIChudWxsQXJndW1lbnQg
PT0gbnVsbCkgKyAodW5kZWZpbmVkID09IG51bGxBcmd1bWVudCkgKyAobnVsbEFyZ3VtZW50ID09
IHVuZGVmaW5lZCk7CisgICAgdmFyIGMgPSAobnVsbCA9PSBwb2x5bW9ycGhpY0FyZ3VtZW50KSAr
IChwb2x5bW9ycGhpY0FyZ3VtZW50ID09IG51bGwpICsgKHVuZGVmaW5lZCA9PSBwb2x5bW9ycGhp
Y0FyZ3VtZW50KSArIChwb2x5bW9ycGhpY0FyZ3VtZW50ID09IHVuZGVmaW5lZCk7CisgICAgdmFy
IGQgPSAoNSA9PSBudWxsKSArIChudWxsID09IHRydWUpICsgKHVuZGVmaW5lZCA9PSBNYXRoLkxO
MikgKyAoImNvbnN0IiA9PSB1bmRlZmluZWQpOworICAgIHZhciBlID0gKDUgPT0gdW5kZWZpbmVk
QXJndW1lbnQpICsgKG51bGxBcmd1bWVudCA9PSB0cnVlKSArIChudWxsQXJndW1lbnQgPT0gTWF0
aC5MTjIpICsgKCJjb25zdCIgPT0gdW5kZWZpbmVkQXJndW1lbnQpOworCisgICAgcmV0dXJuIGEg
KyBiIC0gYyArIGQgLSBlOworfQorbm9JbmxpbmUodXNlRm9yTWF0aCk7CisKK2Z1bmN0aW9uIHRl
c3RVc2VGb3JNYXRoKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICAgICAgdmFyIHZhbHVlID0gdXNlRm9yTWF0aCh1bmRlZmluZWQsIG51bGwsIDUpOworICAgICAg
ICBpZiAodmFsdWUgIT0gOCkKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdXNlRm9yTWF0aCh1
bmRlZmluZWQsIG51bGwsIDUpLCB2YWx1ZSA9ICIgKyB2YWx1ZSArICIgd2l0aCBpID0gIiArIGk7
CisKKyAgICAgICAgdmFyIHZhbHVlID0gdXNlRm9yTWF0aCh1bmRlZmluZWQsIG51bGwsIG51bGwp
OworICAgICAgICBpZiAodmFsdWUgIT0gNCkKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdXNl
Rm9yTWF0aCh1bmRlZmluZWQsIG51bGwsIG51bGwpLCB2YWx1ZSA9ICIgKyB2YWx1ZSArICIgd2l0
aCBpID0gIiArIGk7CisKKyAgICAgICAgdmFyIHZhbHVlID0gdXNlRm9yTWF0aCh1bmRlZmluZWQs
IG51bGwsIHVuZGVmaW5lZCk7CisgICAgICAgIGlmICh2YWx1ZSAhPSA0KQorICAgICAgICAgICAg
dGhyb3cgIkZhaWxlZCB1c2VGb3JNYXRoKHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkKSwgdmFs
dWUgPSAiICsgdmFsdWUgKyAiIHdpdGggaSA9ICIgKyBpOworCisgICAgICAgIHZhciB2YWx1ZSA9
IHVzZUZvck1hdGgodW5kZWZpbmVkLCBudWxsLCB7IGZvbzogImJhciIgfSk7CisgICAgICAgIGlm
ICh2YWx1ZSAhPSA4KQorICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB1c2VGb3JNYXRoKHVuZGVm
aW5lZCwgbnVsbCwgeyBmb286IFwiYmFyXCIgfSksIHZhbHVlID0gIiArIHZhbHVlICsgIiB3aXRo
IGkgPSAiICsgaTsKKworICAgICAgICB2YXIgdmFsdWUgPSB1c2VGb3JNYXRoKHVuZGVmaW5lZCwg
bnVsbCwgdHJ1ZSk7CisgICAgICAgIGlmICh2YWx1ZSAhPSA4KQorICAgICAgICAgICAgdGhyb3cg
IkZhaWxlZCB1c2VGb3JNYXRoKHVuZGVmaW5lZCwgbnVsbCwgdHJ1ZSksIHZhbHVlID0gIiArIHZh
bHVlICsgIiB3aXRoIGkgPSAiICsgaTsKKworICAgICAgICB2YXIgdmFsdWUgPSB1c2VGb3JNYXRo
KHVuZGVmaW5lZCwgbnVsbCwgWzEsIDIsIDNdKTsKKyAgICAgICAgaWYgKHZhbHVlICE9IDgpCisg
ICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHVzZUZvck1hdGgodW5kZWZpbmVkLCBudWxsLCB0cnVl
KSwgdmFsdWUgPSAiICsgdmFsdWUgKyAiIHdpdGggaSA9ICIgKyBpOworCisgICAgICAgIHZhciB2
YWx1ZSA9IHVzZUZvck1hdGgodW5kZWZpbmVkLCBudWxsLCAiV2ViS2l0ISIpOworICAgICAgICBp
ZiAodmFsdWUgIT0gOCkKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdXNlRm9yTWF0aCh1bmRl
ZmluZWQsIG51bGwsIHRydWUpLCB2YWx1ZSA9ICIgKyB2YWx1ZSArICIgd2l0aCBpID0gIiArIGk7
CisgICAgfQorfQordGVzdFVzZUZvck1hdGgoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbXBhcmUt
ZXEtb24tbnVsbC1hbmQtdW5kZWZpbmVkLW9wdGltaXplZC1pbi1jb25zdGFudC1mb2xkaW5nLmpz
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb21wYXJlLWVxLW9uLW51bGwt
YW5kLXVuZGVmaW5lZC1vcHRpbWl6ZWQtaW4tY29uc3RhbnQtZm9sZGluZy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNzE0ZTBjNzk2YjEzY2IzYjgwZGRiZjVjYzIyZGEzNTQwZDNmMTViCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb21wYXJlLWVxLW9uLW51
bGwtYW5kLXVuZGVmaW5lZC1vcHRpbWl6ZWQtaW4tY29uc3RhbnQtZm9sZGluZy5qcwpAQCAtMCww
ICsxLDcwIEBACisidXNlIHN0cmljdCIKKworZnVuY3Rpb24gdW5yZWFjaGFibGVDb2RlVGVzdCgp
IHsKKyAgICB2YXIgYTsKKworICAgIHZhciBiID0gbnVsbDsKKyAgICBpZiAoYikgeworICAgICAg
ICBhID0gNTsKKyAgICB9CisgICAgcmV0dXJuIGEgPT0gYjsKK30KK25vSW5saW5lKHVucmVhY2hh
YmxlQ29kZVRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgaWYg
KCF1bnJlYWNoYWJsZUNvZGVUZXN0KCkpCisgICAgICAgIHRocm93ICJGYWlsZWQgdW5yZWFjaGFi
bGVDb2RlVGVzdCgpIHdpdGggaSA9ICIgKyBpOworfQorCisKK2Z1bmN0aW9uIGlubGluZWRDb21w
YXJlVG9OdWxsKGEpIHsKKyAgICByZXR1cm4gYSA9PSBudWxsOworfQorCitmdW5jdGlvbiBpbmxp
bmVkQ29tcGFyZWRUb1VuZGVmaW5lZChhKSB7CisgICAgcmV0dXJuIGEgPT0gdW5kZWZpbmVkOwor
fQorCisvLyBXYXJtdXAuIExpdHRlciB0aGUgcHJvZmlsZSB3aXRoIGV2ZXJ5IHR5cGVzLgorZnVu
Y3Rpb24gd2FybXVwSW5saW5lRnVuY3Rpb25zKCkgeworICAgIGxldCByZXR1cm5WYWx1ZSA9IDA7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICByZXR1cm5WYWx1
ZSArPSBpbmxpbmVkQ29tcGFyZVRvTnVsbCgiZm9vIik7CisgICAgICAgIHJldHVyblZhbHVlICs9
IGlubGluZWRDb21wYXJlVG9OdWxsKG51bGwpOworICAgICAgICByZXR1cm5WYWx1ZSArPSBpbmxp
bmVkQ29tcGFyZVRvTnVsbChNYXRoKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgKz0gaW5saW5lZENv
bXBhcmVUb051bGwoNSk7CisgICAgICAgIHJldHVyblZhbHVlICs9IGlubGluZWRDb21wYXJlVG9O
dWxsKDUuNSk7CisKKyAgICAgICAgcmV0dXJuVmFsdWUgKz0gaW5saW5lZENvbXBhcmVkVG9VbmRl
ZmluZWQoImZvbyIpOworICAgICAgICByZXR1cm5WYWx1ZSArPSBpbmxpbmVkQ29tcGFyZWRUb1Vu
ZGVmaW5lZChudWxsKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgKz0gaW5saW5lZENvbXBhcmVkVG9V
bmRlZmluZWQoTWF0aCk7CisgICAgICAgIHJldHVyblZhbHVlICs9IGlubGluZWRDb21wYXJlZFRv
VW5kZWZpbmVkKDUpOworICAgICAgICByZXR1cm5WYWx1ZSArPSBpbmxpbmVkQ29tcGFyZWRUb1Vu
ZGVmaW5lZCg1LjUpOworICAgIH0KKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9Citub0lubGlu
ZSh3YXJtdXBJbmxpbmVGdW5jdGlvbnMpOword2FybXVwSW5saW5lRnVuY3Rpb25zKCk7CisKK2Z1
bmN0aW9uIHRlc3RJbmxpbmVGdW5jdGlvbnModW5kZWZpbmVkQXJnLCBudWxsQXJnKSB7CisgICAg
aWYgKGlubGluZWRDb21wYXJlVG9OdWxsKCJmb28iKSkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCBp
bmxpbmVkQ29tcGFyZVRvTnVsbChcImZvb1wiKSI7CisKKyAgICBpZiAoIWlubGluZWRDb21wYXJl
VG9OdWxsKG51bGwpKQorICAgICAgICB0aHJvdyAiRmFpbGVkICFpbmxpbmVkQ29tcGFyZVRvTnVs
bChudWxsKSI7CisKKyAgICBpZiAoIWlubGluZWRDb21wYXJlVG9OdWxsKHVuZGVmaW5lZCkpCisg
ICAgICAgIHRocm93ICJGYWlsZWQgIWlubGluZWRDb21wYXJlVG9OdWxsKHVuZGVmaW5lZCkiOwor
CisgICAgaWYgKCFpbmxpbmVkQ29tcGFyZVRvTnVsbCh1bmRlZmluZWRBcmcpKQorICAgICAgICB0
aHJvdyAiRmFpbGVkICFpbmxpbmVkQ29tcGFyZVRvTnVsbCh1bmRlZmluZWRBcmcpIjsKKworICAg
IGlmICghaW5saW5lZENvbXBhcmVUb051bGwobnVsbEFyZykpCisgICAgICAgIHRocm93ICJGYWls
ZWQgIWlubGluZWRDb21wYXJlVG9OdWxsKG51bGxBcmcpIjsKKworfQorbm9JbmxpbmUodGVzdElu
bGluZUZ1bmN0aW9ucyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICB0
ZXN0SW5saW5lRnVuY3Rpb25zKHVuZGVmaW5lZCwgbnVsbCk7Cit9ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9jb21wYXJlLWVxLW9uLW51bGwtYW5kLXVuZGVmaW5lZC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvY29tcGFyZS1lcS1vbi1udWxsLWFuZC11bmRlZmluZWQuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTRlOTJjNDlkNDdmYWU2NzJlMTdlOWY5ZWY0ZjE3MjQyNDIyZjE3YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29tcGFyZS1l
cS1vbi1udWxsLWFuZC11bmRlZmluZWQuanMKQEAgLTAsMCArMSwxNzQgQEAKKyJ1c2Ugc3RyaWN0
IgorCisvLyBUcml2aWFsIGNhc2VzOiBldmVyeXRoaW5nIGlzIG1vbm9tb3JwaGljIGFuZCBzdXBl
ciBwcmVkaWN0YWJsZS4KK2Z1bmN0aW9uIGNvbXBhcmVDb25zdGFudHMoKQoreworICAgIHJldHVy
biAobnVsbCA9PSBudWxsKSAmJiAobnVsbCA9PSB1bmRlZmluZWQpICYmICh1bmRlZmluZWQgPT0g
bnVsbCk7Cit9Citub0lubGluZShjb21wYXJlQ29uc3RhbnRzKTsKKworZm9yIChsZXQgaSA9IDA7
IGkgPCAxZTQ7ICsraSkgeworICAgIGlmICghY29tcGFyZUNvbnN0YW50cygpKQorICAgICAgICB0
aHJvdyAiRmFpbGVkIHRvIGNvbXBhcmVDb25zdGFudHMoKS4iOworfQorCisKK2Z1bmN0aW9uIG9w
YXF1ZU51bGwoKSB7CisgICAgcmV0dXJuIG51bGw7Cit9Citub0lubGluZShvcGFxdWVOdWxsKTsK
KworZnVuY3Rpb24gb3BhcXVlVW5kZWZpbmVkKCkgeworICAgIHJldHVybiB1bmRlZmluZWQ7Cit9
Citub0lubGluZShvcGFxdWVVbmRlZmluZWQpOworCitmdW5jdGlvbiBjb21wYXJlQ29uc3RhbnRz
QW5kRHluYW1pY1ZhbHVlcygpCit7CisgICAgcmV0dXJuICgobnVsbCA9PSBvcGFxdWVOdWxsKCkp
CisgICAgICAgICYmIChvcGFxdWVOdWxsKCkgPT0gbnVsbCkKKyAgICAgICAgJiYgKHVuZGVmaW5l
ZCA9PSBvcGFxdWVOdWxsKCkpCisgICAgICAgICYmIChvcGFxdWVOdWxsKCkgPT0gdW5kZWZpbmVk
KQorICAgICAgICAmJiAobnVsbCA9PSBvcGFxdWVVbmRlZmluZWQoKSkKKyAgICAgICAgJiYgKG9w
YXF1ZVVuZGVmaW5lZCgpID09IG51bGwpCisgICAgICAgICYmICh1bmRlZmluZWQgPT0gb3BhcXVl
VW5kZWZpbmVkKCkpCisgICAgICAgICYmIChvcGFxdWVVbmRlZmluZWQoKSA9PSB1bmRlZmluZWQp
KTsKK30KK25vSW5saW5lKGNvbXBhcmVDb25zdGFudHNBbmREeW5hbWljVmFsdWVzKTsKKworZm9y
IChsZXQgaSA9IDFlNDsgaS0tOykgeworICAgIGlmICghY29tcGFyZUNvbnN0YW50c0FuZER5bmFt
aWNWYWx1ZXMoKSkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCBjb21wYXJlQ29uc3RhbnRzQW5kRHlu
YW1pY1ZhbHVlcygpIjsKK30KKworCitmdW5jdGlvbiBjb21wYXJlRHluYW1pY1ZhbHVlcygpCit7
CisgICAgcmV0dXJuICgob3BhcXVlTnVsbCgpID09IG9wYXF1ZU51bGwoKSkKKyAgICAgICAgICAg
ICYmIChvcGFxdWVVbmRlZmluZWQoKSA9PSBvcGFxdWVVbmRlZmluZWQoKSkKKyAgICAgICAgICAg
ICYmIChvcGFxdWVOdWxsKCkgPT0gb3BhcXVlVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAmJiAo
b3BhcXVlVW5kZWZpbmVkKCkgPT0gb3BhcXVlTnVsbCgpKSk7Cit9Citub0lubGluZShjb21wYXJl
RHluYW1pY1ZhbHVlcyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICBp
ZiAoIWNvbXBhcmVEeW5hbWljVmFsdWVzKCkpCisgICAgICAgIHRocm93ICJGYWlsZWQgY29tcGFy
ZUR5bmFtaWNWYWx1ZXMoKSI7Cit9CisKKworZnVuY3Rpb24gY29tcGFyZUR5bmFtaWNWYWx1ZVRv
SXRzZWxmKCkKK3sKKyAgICBjb25zdCB2YWx1ZTEgPSBvcGFxdWVOdWxsKCk7CisgICAgY29uc3Qg
dmFsdWUyID0gb3BhcXVlVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHZhbHVlMSA9PSB2YWx1ZTEg
JiYgdmFsdWUyID09IHZhbHVlMjsKK30KK25vSW5saW5lKGNvbXBhcmVEeW5hbWljVmFsdWVUb0l0
c2VsZik7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICBpZiAoIWNvbXBh
cmVEeW5hbWljVmFsdWVUb0l0c2VsZigpKQorICAgICAgICB0aHJvdyAiRmFpbGVkIGNvbXBhcmVE
eW5hbWljVmFsdWVUb0l0c2VsZigpIjsKK30KKworCisvLyBUaGUgY2FzZSB0aGF0IGludGVyZXN0
ZWQgdXMgaW4gdGhlIGZpcnN0IHBsYWNlLgorLy8gQWNjZXNzaW5nIGFuIGFycmF5IHdpdGggdW5k
ZWNpZGVkIHNoYXBlIGFsd2F5cyByZXR1cm4gdW5kZWZpbmVkLgorCitmdW5jdGlvbiBhcnJheVRl
c3RpbmcoKQoreworICAgIGxldCByZXR1cm5WYWx1ZSA9IHRydWU7CisKKyAgICBjb25zdCBhcnJh
eTEgPSBuZXcgQXJyYXkoMik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAg
ICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZSAmJiAoYXJyYXkxW2ldID09IG51bGwpOwor
ICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYmIChudWxsID09IGFycmF5MVtpXSk7
CisgICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUgJiYgKGFycmF5MVtpXSA9PSB1bmRl
ZmluZWQpOworICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYmICh1bmRlZmluZWQg
PT0gYXJyYXkxW2ldKTsKKyAgICB9CisKKyAgICBjb25zdCBhcnJheTIgPSBuZXcgQXJyYXkoMik7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgcmV0dXJuVmFsdWUg
PSByZXR1cm5WYWx1ZSAmJiAoYXJyYXkyW2ldID09IG9wYXF1ZU51bGwoKSk7CisgICAgICAgIHJl
dHVyblZhbHVlID0gcmV0dXJuVmFsdWUgJiYgKG9wYXF1ZU51bGwoKSA9PSBhcnJheTJbaV0pOwor
ICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYmIChhcnJheTJbaV0gPT0gb3BhcXVl
VW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYmIChvcGFx
dWVVbmRlZmluZWQoKSA9PSBhcnJheTJbaV0pOworICAgIH0KKworICAgIGNvbnN0IGFycmF5MyA9
IG5ldyBBcnJheSgyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAg
ICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYmIChhcnJheTNbaV0gPT0gYXJyYXkzW2ldKTsK
KyAgICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZSAmJiAoYXJyYXkxW2ldID09IGFycmF5
M1tpXSk7CisgICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUgJiYgKGFycmF5M1tpXSA9
PSBhcnJheTFbaV0pOworICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlICYmIChhcnJh
eTJbaV0gPT0gYXJyYXkzW2ldKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZSAm
JiAoYXJyYXkzW2ldID09IGFycmF5MltpXSk7CisKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJu
VmFsdWU7Cit9Citub0lubGluZShhcnJheVRlc3RpbmcpOworCitmb3IgKGxldCBpID0gMDsgaSA8
IDFlNDsgKytpKSB7CisgICAgaWYgKCFhcnJheVRlc3RpbmcoKSkKKyAgICAgICAgdGhyb3cgIkZh
aWxlZCBhcnJheVRlc3RpbmcoKSI7Cit9CisKKworLy8gTGV0J3MgbWFrZSBpdCBwb2x5bW9ycGhp
YyBhZnRlciBvcHRpbWl6YXRpb24uIFdlIHNob3VsZCBmYWxsYmFjayB0byBhIGdlbmVyaWMgY29t
cGFyZSBvcGVyYXRpb24uCisKK2Z1bmN0aW9uIG9wYXF1ZUNvbXBhcmUxKGEsIGIpIHsKKyAgICBy
ZXR1cm4gYSA9PSBiOworfQorbm9JbmxpbmUob3BhcXVlQ29tcGFyZTEpOworCitmdW5jdGlvbiB0
ZXN0TnVsbENvbXBhcmF0b3JVcGRhdGUoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7
ICsraSkgeworICAgICAgICBpZiAoIW9wYXF1ZUNvbXBhcmUxKG51bGwsIG51bGwpKQorICAgICAg
ICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVDb21wYXJlMShudWxsLCBudWxsKSIKKyAgICB9CisK
KyAgICAvLyBMZXQncyBjaGFuZ2UgdHlwZXMKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsg
KytpKSB7CisgICAgICAgIGlmIChvcGFxdWVDb21wYXJlMSgiZm9vIiwgbnVsbCkpCisgICAgICAg
ICAgICB0aHJvdyAiRmFpbGVkIG9wYXF1ZUNvbXBhcmUxKFwiZm9vXCIsIG51bGwpIgorICAgIH0K
K30KK3Rlc3ROdWxsQ29tcGFyYXRvclVwZGF0ZSgpOworCitmdW5jdGlvbiBvcGFxdWVDb21wYXJl
MihhLCBiKSB7CisgICAgcmV0dXJuIGEgPT0gYjsKK30KK25vSW5saW5lKG9wYXF1ZUNvbXBhcmUy
KTsKKworZnVuY3Rpb24gdGVzdFVuZGVmaW5lZENvbXBhcmF0b3JVcGRhdGUoKSB7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoIW9wYXF1ZUNvbXBhcmUy
KHVuZGVmaW5lZCwgdW5kZWZpbmVkKSkKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgb3BhcXVl
Q29tcGFyZTIodW5kZWZpbmVkLCB1bmRlZmluZWQpIgorICAgIH0KKworICAgIC8vIExldCdzIGNo
YW5nZSB0eXBlcworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
aWYgKCFvcGFxdWVDb21wYXJlMigiYmFyIiwgImJhciIpKQorICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCBvcGFxdWVDb21wYXJlMihcImJhclwiLCBcImJhclwiKSIKKyAgICB9Cit9Cit0ZXN0VW5k
ZWZpbmVkQ29tcGFyYXRvclVwZGF0ZSgpOworCitmdW5jdGlvbiBvcGFxdWVDb21wYXJlMyhhLCBi
KSB7CisgICAgcmV0dXJuIGEgPT0gYjsKK30KK25vSW5saW5lKG9wYXF1ZUNvbXBhcmUzKTsKKwor
ZnVuY3Rpb24gdGVzdE51bGxBbmRVbmRlZmluZWRDb21wYXJhdG9yVXBkYXRlKCkgeworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKCFvcGFxdWVDb21wYXJl
Myh1bmRlZmluZWQsIG51bGwpIHx8ICFvcGFxdWVDb21wYXJlMihudWxsLCB1bmRlZmluZWQpKQor
ICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVDb21wYXJlMih1bmRlZmluZWQvbnVsbCwg
dW5kZWZpbmVkL251bGwpIgorICAgIH0KKworICAgIC8vIExldCdzIGNoYW5nZSB0eXBlcworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUNvbXBh
cmUzKHVuZGVmaW5lZCwgImJhciIpKQorICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVD
b21wYXJlMyh1bmRlZmluZWQsIFwiYmFyXCIpIgorICAgIH0KK30KK3Rlc3ROdWxsQW5kVW5kZWZp
bmVkQ29tcGFyYXRvclVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZiYjdiYjZiNDdmYTRlY2U3OTBkZjhhMWZm
N2UxOTg5MzNhNzFiZGIuLjMyYzJhOTE1MGNkODBiMzJjYThiYTBlMzBhMTg0MmRlZmE4OGNhYWIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wOC0xOCAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBPcHRpbWl6ZSBtb3JlIGNhc2VzIG9m
IHNvbWV0aGluZy1jb21wYXJlZC10by1udWxsL3VuZGVmaW5lZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTU3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9kb20vZG9jdW1lbnQtYWxsLXdhdGNo
cG9pbnQtY292ZXJzLWVsaW1pbmF0ZWQtY29tcGFyZS1lcS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL2RvbS9kb2N1bWVudC1hbGwtd2F0Y2hwb2ludC1jb3ZlcnMtZWxpbWluYXRl
ZC1jb21wYXJlLWVxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtdGVzdHMv
ZG9jdW1lbnQtYWxsLXdhdGNocG9pbnQtY292ZXJzLWVsaW1pbmF0ZWQtY29tcGFyZS1lcS5qczog
QWRkZWQuCisgICAgICAgIChjb21wYXJlRnVuY3Rpb24pOgorCiAyMDE1LTA4LTE3ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW09TIFhdIFJlbW92
ZSBzdXBwb3J0IGZvciBjb21wb3NpdGUgZm9udHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L2RvbS9kb2N1bWVudC1hbGwtd2F0Y2hwb2ludC1jb3ZlcnMtZWxpbWluYXRlZC1jb21wYXJlLWVx
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2RvbS9kb2N1bWVudC1hbGwtd2F0Y2hwb2lu
dC1jb3ZlcnMtZWxpbWluYXRlZC1jb21wYXJlLWVxLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
Yjk1Yzk4MzNkYTIyNTliZDE0MjdmOWE1N2Y0NjFhZDkyMjc2MmJkCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvY3VtZW50LWFsbC13YXRjaHBvaW50LWNvdmVycy1lbGlt
aW5hdGVkLWNvbXBhcmUtZXEtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgdG8g
bWFrZSBzdXJlIHRoYXQgZG9jdW1lbnQuYWxsIHdvcmtzIGNvcnJlY3RseSB3aXRoIGVsbWluYXRl
ZCBDb21wYXJlRXEgaW4gREZHLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBkb2N1bWVudEFsbENvbXBhcmUuaXNOdWxsIGlzIHRydWUKK1BBU1MgZG9jdW1lbnRBbGxDb21w
YXJlLmlzVW5kZWZpbmVkIGlzIHRydWUKK1BBU1MgZG9jdW1lbnRBbGxDb21wYXJlLmxlbmd0aCBp
cyAxMworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2RvbS9kb2N1bWVudC1hbGwtd2F0Y2hwb2ludC1j
b3ZlcnMtZWxpbWluYXRlZC1jb21wYXJlLWVxLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9j
dW1lbnQtYWxsLXdhdGNocG9pbnQtY292ZXJzLWVsaW1pbmF0ZWQtY29tcGFyZS1lcS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdjNDM3MWE2OGJiODE0MDBiYzNjMjY5ZmU4OTVkZGViYzk2ODhiMGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9jdW1lbnQtYWxsLXdhdGNocG9pbnQt
Y292ZXJzLWVsaW1pbmF0ZWQtY29tcGFyZS1lcS5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2RvY3VtZW50LWFsbC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5hdGVkLWNv
bXBhcmUtZXEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9kb2N1bWVudC1hbGwtd2F0Y2hwb2ludC1jb3Zl
cnMtZWxpbWluYXRlZC1jb21wYXJlLWVxLmpzIGIvTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10
ZXN0cy9kb2N1bWVudC1hbGwtd2F0Y2hwb2ludC1jb3ZlcnMtZWxpbWluYXRlZC1jb21wYXJlLWVx
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY1ZGI2ZjI2YWQwODE3ZGE0NGYwMjBkMWU0ZDQwYjZmYTMzNjQ4NGEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL2RvY3Vt
ZW50LWFsbC13YXRjaHBvaW50LWNvdmVycy1lbGltaW5hdGVkLWNvbXBhcmUtZXEuanMKQEAgLTAs
MCArMSw0OSBAQAorZGVzY3JpcHRpb24oIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgZG9jdW1lbnQu
YWxsIHdvcmtzIGNvcnJlY3RseSB3aXRoIGVsbWluYXRlZCBDb21wYXJlRXEgaW4gREZHLiIpOwor
CitmdW5jdGlvbiBjb21wYXJlRnVuY3Rpb24oYSkKK3sKKyAgICB2YXIgbGVuZ3RoID0gYS5sZW5n
dGg7CisKKyAgICB2YXIgYUlzTnVsbCA9IChhID09IG51bGwpIHx8IChudWxsID09IGEpOworICAg
IHZhciBhSXNVbmRlZmluZWQgPSAoYSA9PSB1bmRlZmluZWQpIHx8ICh1bmRlZmluZWQgPT0gYSk7
CisKKyAgICBpZiAoYSA9PSBudWxsIHx8IHVuZGVmaW5lZCA9PSBhKQorICAgICAgICByZXR1cm4g
eyBpc051bGw6IGFJc051bGwsIGlzVW5kZWZpbmVkOiBhSXNVbmRlZmluZWQsIGxlbmd0aDogbGVu
Z3RoIH07CisgICAgZWxzZQorICAgICAgICByZXR1cm4geyBpc051bGw6IGFJc051bGwsIGlzVW5k
ZWZpbmVkOiBhSXNVbmRlZmluZWQgfTsKK30KKworLy8gV2FybXVwIHdpdGggc2FuZSBvYmplY3Rz
LgorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIGxldCByZXN1bHQgPSBjb21w
YXJlRnVuY3Rpb24oeyBsZW5ndGg6IDV9KTsKKyAgICBpZiAocmVzdWx0LmlzTnVsbCB8fCByZXN1
bHQuaXNVbmRlZmluZWQpCisgICAgICAgIGRlYnVnKCJGYWlsZWQgd2FybXVwIHdpdGggY29tcGFy
ZUZ1bmN0aW9uKHsgbGVuZ3RoOiA1fSkuIik7CisKKyAgICBsZXQgb2JqZWN0ID0gbmV3IE9iamVj
dDsKKyAgICBvYmplY3QubGVuZ3RoID0gMTsKKyAgICByZXN1bHQgPSBjb21wYXJlRnVuY3Rpb24o
b2JqZWN0KTsKKyAgICBpZiAocmVzdWx0LmlzTnVsbCB8fCByZXN1bHQuaXNVbmRlZmluZWQpCisg
ICAgICAgIGRlYnVnKCJGYWlsZWQgd2FybXVwIHdpdGggY29tcGFyZUZ1bmN0aW9uKG9iamVjdCku
Iik7Cit9CisKK2xldCBkb2N1bWVudEFsbCA9IGRvY3VtZW50LmFsbDsKK3ZhciBkb2N1bWVudEFs
bENvbXBhcmUgPSBjb21wYXJlRnVuY3Rpb24oZG9jdW1lbnRBbGwpOworc2hvdWxkQmVUcnVlKCJk
b2N1bWVudEFsbENvbXBhcmUuaXNOdWxsIik7CitzaG91bGRCZVRydWUoImRvY3VtZW50QWxsQ29t
cGFyZS5pc1VuZGVmaW5lZCIpOworc2hvdWxkQmUoImRvY3VtZW50QWxsQ29tcGFyZS5sZW5ndGgi
LCAiMTMiKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTM7ICsraSkgeworICAgIGxldCByZXN1
bHQgPSBjb21wYXJlRnVuY3Rpb24oeyBsZW5ndGg6IDV9KTsKKyAgICBpZiAocmVzdWx0LmlzTnVs
bCB8fCByZXN1bHQuaXNVbmRlZmluZWQpCisgICAgICAgIGRlYnVnKCJGYWlsZWQgdGFpbCB3aXRo
IGNvbXBhcmVGdW5jdGlvbih7IGxlbmd0aDogNX0pLiIpOworCisgICAgcmVzdWx0ID0gY29tcGFy
ZUZ1bmN0aW9uKGRvY3VtZW50QWxsKTsKKyAgICBpZiAoIXJlc3VsdC5pc051bGwgfHwgIXJlc3Vs
dC5pc1VuZGVmaW5lZCkKKyAgICAgICAgZGVidWcoIkZhaWxlZCB0YWlsIHdpdGggY29tcGFyZUZ1
bmN0aW9uKGRvY3VtZW50QWxsKS4iKTsKKworICAgIGxldCBvYmplY3QgPSBuZXcgT2JqZWN0Owor
ICAgIG9iamVjdC5sZW5ndGggPSAxOworICAgIHJlc3VsdCA9IGNvbXBhcmVGdW5jdGlvbihvYmpl
Y3QpOworICAgIGlmIChyZXN1bHQuaXNOdWxsIHx8IHJlc3VsdC5pc1VuZGVmaW5lZCkKKyAgICAg
ICAgZGVidWcoIkZhaWxlZCB0YWlsIHdpdGggY29tcGFyZUZ1bmN0aW9uKG9iamVjdCkuIik7Cit9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="284508"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>