<?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>144725</bug_id>
          
          <creation_ts>2015-05-06 20:53:21 -0700</creation_ts>
          <short_desc>[JSC] Add basic DFG/FTL support for Math.round</short_desc>
          <delta_ts>2015-05-08 09:27:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1092475</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-06 20:53:21 -0700</bug_when>
    <thetext>[JSC] Add basic DFG/FTL support for Math.round</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092480</commentid>
    <comment_count>1</comment_count>
      <attachid>252562</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-06 20:59:57 -0700</bug_when>
    <thetext>Created attachment 252562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092484</commentid>
    <comment_count>2</comment_count>
      <attachid>252562</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-06 21:09:37 -0700</bug_when>
    <thetext>Comment on attachment 252562
Patch

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

&gt; Source/JavaScriptCore/tests/stress/math-round-basics.js:21
&gt; +for (var i = 1; i &lt; 1e7; ++i) {

Note to self: change all the 1e7 to 1e4 before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092489</commentid>
    <comment_count>3</comment_count>
      <attachid>252562</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-06 21:12:55 -0700</bug_when>
    <thetext>Comment on attachment 252562
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:771
&gt; +        if (node-&gt;result() == NodeResultInt32)

Please use an OpInfo to convey this.  We currently don&apos;t use NodeResult for this purpose.  We probably could, but it&apos;s not how we do this elsewhere.  Look at the ArithMode that a lot of other Arith* ops use.  Maybe you can just adopt that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092524</commentid>
    <comment_count>4</comment_count>
      <attachid>252575</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-06 23:33:25 -0700</bug_when>
    <thetext>Created attachment 252575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092526</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-06 23:57:46 -0700</bug_when>
    <thetext>                                                          Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                            4.1408+-0.1538            4.0276+-0.1259          might be 1.0281x faster
   3d-morph                                           4.8290+-0.2785     ?      5.0485+-0.8525        ? might be 1.0455x slower
   3d-raytrace                                        4.7953+-0.0668     ?      5.0070+-0.1707        ? might be 1.0441x slower
   access-binary-trees                                1.8532+-0.0437            1.8175+-0.0575          might be 1.0196x faster
   access-fannkuch                                    4.8389+-0.0320     ?      4.8873+-0.2649        ?
   access-nbody                                       2.3209+-0.2143            2.2186+-0.0189          might be 1.0461x faster
   access-nsieve                                      2.9828+-0.2532            2.9258+-0.0861          might be 1.0195x faster
   bitops-3bit-bits-in-byte                           1.3005+-0.0642     ?      1.3358+-0.0813        ? might be 1.0271x slower
   bitops-bits-in-byte                                3.2125+-0.2960     ?      3.3729+-0.2112        ? might be 1.0499x slower
   bitops-bitwise-and                                 2.0087+-0.5399            1.7947+-0.0220          might be 1.1192x faster
   bitops-nsieve-bits                                 2.8845+-0.8473            2.6803+-0.1700          might be 1.0762x faster
   controlflow-recursive                              1.9271+-0.3576     ?      1.9525+-0.1982        ? might be 1.0132x slower
   crypto-aes                                         3.4355+-0.2600            3.4088+-0.1603        
   crypto-md5                                         2.3564+-0.4712            2.3140+-0.1180          might be 1.0184x faster
   crypto-sha1                                        2.3710+-0.3813            2.1962+-0.2614          might be 1.0796x faster
   date-format-tofte                                  6.3610+-0.2712     ?      6.9952+-0.8896        ? might be 1.0997x slower
   date-format-xparb                                  4.5204+-0.4078            4.3065+-0.1562          might be 1.0497x faster
   math-cordic                                        2.5794+-0.0978     ?      2.6075+-0.1006        ? might be 1.0109x slower
   math-partial-sums                                  3.9824+-0.0925     ?      4.2279+-0.7474        ? might be 1.0616x slower
   math-spectral-norm                                 1.6602+-0.0723     ?      1.7245+-0.2965        ? might be 1.0387x slower
   regexp-dna                                         5.7232+-0.2834     ?      6.0850+-0.6615        ? might be 1.0632x slower
   string-base64                                      3.8460+-0.4509            3.7258+-0.2409          might be 1.0323x faster
   string-fasta                                       5.2444+-0.1163     ?      5.3200+-0.2242        ? might be 1.0144x slower
   string-tagcloud                                    7.7955+-0.4066            7.5438+-0.1482          might be 1.0334x faster
   string-unpack-code                                18.3552+-2.2503           17.8423+-0.9125          might be 1.0287x faster
   string-validate-input                              4.0030+-0.1147            3.9822+-0.0517        

   &lt;arithmetic&gt;                                       4.2049+-0.0894     ?      4.2057+-0.0697        ? might be 1.0002x slower

                                                          Conf#1                    Conf#2                                      
LongSpider:
   3d-cube                                          742.0926+-6.2050     ?    748.6735+-1.4699        ?
   3d-morph                                        1441.7476+-1.2056     ?   1443.6202+-3.6666        ?
   3d-raytrace                                      625.7559+-0.8364     ?    626.2554+-1.3328        ?
   access-binary-trees                              910.2609+-22.9322    ?    918.5071+-10.6800       ?
   access-fannkuch                                  250.7925+-10.5322         247.9307+-6.3436          might be 1.0115x faster
   access-nbody                                     519.2402+-2.5508     ?    521.3293+-1.9713        ?
   access-nsieve                                    478.1918+-14.2554         473.7713+-4.5105        
   bitops-3bit-bits-in-byte                          38.9532+-1.5190           38.1597+-0.4094          might be 1.0208x faster
   bitops-bits-in-byte                               68.2141+-3.5217     ?     69.2349+-3.0288        ? might be 1.0150x slower
   bitops-nsieve-bits                               372.9376+-2.1016     ?    373.1197+-0.8348        ?
   controlflow-recursive                            438.1106+-1.6255          429.1138+-15.3511         might be 1.0210x faster
   crypto-aes                                       539.0515+-4.0504     ?    540.9770+-12.4616       ?
   crypto-md5                                       464.2847+-6.1039          455.7278+-14.1588         might be 1.0188x faster
   crypto-sha1                                      544.1443+-17.1713    ?    546.0656+-17.2581       ?
   date-format-tofte                                486.2997+-9.5814     ?    493.7668+-12.9947       ? might be 1.0154x slower
   date-format-xparb                                614.8380+-10.5116         604.2457+-5.0432          might be 1.0175x faster
   hash-map                                         147.1874+-4.6784     ?    165.6903+-49.0994       ? might be 1.1257x slower
   math-cordic                                      473.6155+-0.8228     ?    474.5190+-2.0292        ?
   math-partial-sums                                402.8023+-2.4723     ^    398.3118+-0.5093        ^ definitely 1.0113x faster
   math-spectral-norm                               529.7989+-2.0975          529.5065+-0.5446        
   string-base64                                    321.1147+-1.9659          320.8398+-3.8377        
   string-fasta                                     356.5018+-3.1154     ?    358.2148+-5.3363        ?
   string-tagcloud                                  169.4116+-2.0863          169.3607+-1.2258        

   &lt;geometric&gt;                                      378.1451+-2.0365     ?    379.2141+-4.9575        ? might be 1.0028x slower

                                                          Conf#1                    Conf#2                                      
V8Spider:
   crypto                                            48.5956+-0.7492           47.2966+-2.3150          might be 1.0275x faster
   deltablue                                         81.5040+-8.0517           78.2980+-9.4841          might be 1.0409x faster
   earley-boyer                                      37.7719+-1.8089           37.5505+-0.9757        
   raytrace                                          29.8913+-2.3763           29.0375+-1.5596          might be 1.0294x faster
   regexp                                            66.0854+-2.4834     ?     66.4735+-6.2305        ?
   richards                                          74.1684+-4.6052           67.4373+-4.0951          might be 1.0998x faster
   splay                                             36.6972+-3.1347     ?     36.7380+-2.6863        ?

   &lt;geometric&gt;                                       50.1832+-1.6333           48.8375+-2.1782          might be 1.0276x faster

                                                          Conf#1                    Conf#2                                      
Octane:
   encrypt                                           0.18806+-0.00181    ?     0.18836+-0.00155       ?
   decrypt                                           3.24250+-0.02470    ?     3.27323+-0.05516       ?
   deltablue                                x2       0.15486+-0.00602          0.15431+-0.00241       
   earley                                            0.44752+-0.00927          0.43919+-0.00905         might be 1.0190x faster
   boyer                                             5.68789+-0.07786          5.62806+-0.06387         might be 1.0106x faster
   navier-stokes                            x2       4.82803+-0.01536    ?     4.83638+-0.02194       ?
   raytrace                                 x2       1.10704+-0.02818          1.03943+-0.09239         might be 1.0651x faster
   richards                                 x2       0.08731+-0.00099    ?     0.08807+-0.00110       ?
   splay                                    x2       0.39588+-0.00676    ?     0.40022+-0.00880       ? might be 1.0110x slower
   regexp                                   x2      27.04717+-1.26738         26.96558+-0.57982       
   pdfjs                                    x2      37.08901+-0.90512         36.51697+-0.78912         might be 1.0157x faster
   mandreel                                 x2      42.85548+-0.82111         42.30857+-0.50992         might be 1.0129x faster
   gbemu                                    x2      31.27731+-0.43313         30.98388+-0.40018       
   closure                                           0.45630+-0.00151    ?     0.45999+-0.00713       ?
   jquery                                            5.64665+-0.04966    ?     5.65332+-0.01967       ?
   box2d                                    x2       9.80045+-0.22828          9.70455+-0.08865       
   zlib                                     x2     365.98088+-7.60072        355.77212+-26.12710        might be 1.0287x faster
   typescript                               x2     653.52350+-21.57603   ?   668.55707+-32.34518      ? might be 1.0230x slower

   &lt;geometric&gt;                                       5.62825+-0.04750          5.58802+-0.02906         might be 1.0072x faster

                                                          Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                          394.653+-18.956     ^     286.637+-9.304         ^ definitely 1.3768x faster
   audio-beat-detection                               93.189+-1.486             92.837+-0.733         
   audio-dft                                          99.570+-2.315      ?     101.089+-4.512         ? might be 1.0152x slower
   audio-fft                                          77.202+-0.354      ?      77.341+-0.292         ?
   audio-oscillator                                  171.940+-6.512      ^      61.136+-1.465         ^ definitely 2.8124x faster
   imaging-darkroom                                   89.956+-1.418      ?      90.223+-1.107         ?
   imaging-desaturate                                 53.181+-4.543             52.268+-2.165           might be 1.0175x faster
   imaging-gaussian-blur                              82.337+-2.067             81.076+-1.237           might be 1.0155x faster
   json-parse-financial                               36.527+-1.276             35.209+-0.493           might be 1.0374x faster
   json-stringify-tinderbox                           41.711+-0.986             41.298+-1.239         
   stanford-crypto-aes                                51.029+-1.578             50.444+-1.555           might be 1.0116x faster
   stanford-crypto-ccm                                46.250+-1.079      ?      47.291+-2.726         ? might be 1.0225x slower
   stanford-crypto-pbkdf2                            116.369+-1.113      ^     114.677+-0.443         ^ definitely 1.0148x faster
   stanford-crypto-sha256-iterative                   43.652+-0.443             43.093+-1.236           might be 1.0130x faster

   &lt;arithmetic&gt;                                       99.826+-1.340      ^      83.901+-1.001         ^ definitely 1.1898x faster

                                                          Conf#1                    Conf#2                                      
JSRegress:
   abs-boolean                                        2.1707+-0.0391     ?      2.2059+-0.0651        ? might be 1.0162x slower
   adapt-to-double-divide                            14.9608+-0.2445     ?     15.3970+-1.2129        ? might be 1.0292x slower
   aliased-arguments-getbyval                         0.9788+-0.0727            0.9706+-0.0899        
   allocate-big-object                                2.3665+-0.1130     ?      2.4035+-0.0896        ? might be 1.0157x slower
   arguments-named-and-reflective                     9.9796+-0.2786     ?     10.1203+-0.2851        ? might be 1.0141x slower
   arguments-out-of-bounds                            9.3035+-0.2992     ?      9.5052+-0.7641        ? might be 1.0217x slower
   arguments-strict-mode                              8.7437+-0.7168            8.5001+-0.0935          might be 1.0287x faster
   arguments                                          7.6077+-0.2753            7.4965+-0.2800          might be 1.0148x faster
   arity-mismatch-inlining                            0.7410+-0.0693     ?      0.7617+-0.1125        ? might be 1.0279x slower
   array-access-polymorphic-structure                 5.6805+-0.3525     ?      5.7295+-0.3969        ?
   array-nonarray-polymorhpic-access                 26.3643+-1.3444           26.2675+-2.1015        
   array-prototype-every                             74.4895+-2.3182           72.1460+-1.6974          might be 1.0325x faster
   array-prototype-forEach                           71.5989+-1.0636           71.1128+-1.6782        
   array-prototype-map                               81.1539+-4.6785           77.8512+-3.0128          might be 1.0424x faster
   array-prototype-some                              73.3917+-1.9823     ?     74.6633+-5.7543        ? might be 1.0173x slower
   array-splice-contiguous                           38.0793+-0.5818     ?     38.7025+-1.4564        ? might be 1.0164x slower
   array-with-double-add                              3.1910+-0.4039     ?      3.2274+-0.5017        ? might be 1.0114x slower
   array-with-double-increment                        2.7560+-0.1725            2.7161+-0.0231          might be 1.0147x faster
   array-with-double-mul-add                          3.7534+-0.0831     ?      3.8052+-0.2257        ? might be 1.0138x slower
   array-with-double-sum                              3.0185+-0.4226            2.8887+-0.0476          might be 1.0449x faster
   array-with-int32-add-sub                           5.3752+-0.0781            5.3067+-0.2354          might be 1.0129x faster
   array-with-int32-or-double-sum                     2.8518+-0.0311     ?      2.8998+-0.0419        ? might be 1.0168x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.9050+-1.1446     ?     30.0977+-1.8736        ?
   ArrayBuffer-DataView-alloc-long-lived             11.6537+-0.6909     ?     11.8667+-0.3449        ? might be 1.0183x slower
   ArrayBuffer-Int32Array-byteOffset                  3.3138+-0.0885     ?      3.4898+-0.3809        ? might be 1.0531x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.2892+-2.1806     ?     45.4797+-33.9094       ? might be 1.5015x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.8328+-1.0598           19.5480+-0.3432          might be 1.0146x faster
   ArrayBuffer-Int8Array-alloc-long-lived            10.9482+-0.2063     ?     11.3303+-0.9217        ? might be 1.0349x slower
   ArrayBuffer-Int8Array-alloc                        9.4655+-0.3181     ?      9.7499+-0.5644        ? might be 1.0301x slower
   asmjs_bool_bug                                     6.9682+-0.8248            6.7121+-0.2364          might be 1.0382x faster
   assign-custom-setter-polymorphic                   2.2917+-0.0479            2.2416+-0.0415          might be 1.0224x faster
   assign-custom-setter                               3.0968+-0.0925     ?      3.2080+-0.2058        ? might be 1.0359x slower
   basic-set                                          7.8178+-1.3821            7.3928+-0.9171          might be 1.0575x faster
   big-int-mul                                        3.2222+-0.1583            3.1298+-0.0234          might be 1.0295x faster
   boolean-test                                       2.5367+-0.1253            2.5140+-0.0452        
   branch-fold                                        3.3301+-0.1599            3.2914+-0.0469          might be 1.0118x faster
   branch-on-string-as-boolean                       13.7684+-0.4069     ?     13.8007+-0.7698        ?
   by-val-generic                                     6.9795+-0.8140            6.5595+-0.0893          might be 1.0640x faster
   call-spread-apply                                 26.6556+-3.1630           25.5533+-0.9641          might be 1.0431x faster
   call-spread-call                                  21.1185+-1.2235           20.4924+-0.6770          might be 1.0306x faster
   captured-assignments                               0.3192+-0.0156     ?      0.3246+-0.0201        ? might be 1.0172x slower
   cast-int-to-double                                 4.3957+-0.0992            4.3669+-0.2977        
   cell-argument                                      5.6570+-0.0544            5.6190+-0.3151        
   cfg-simplify                                       2.4593+-0.0234     ?      2.5029+-0.1319        ? might be 1.0177x slower
   chain-getter-access                                7.5379+-0.1469            7.5150+-0.1175        
   cmpeq-obj-to-obj-other                             9.6130+-1.9721     ?     12.0886+-3.4838        ? might be 1.2575x slower
   constant-test                                      4.0902+-0.0727     ?      4.2035+-0.1620        ? might be 1.0277x slower
   create-lots-of-functions                          10.7288+-0.2483           10.7117+-0.2308        
   DataView-custom-properties                        34.1357+-1.4443     ?     34.8354+-2.1948        ? might be 1.0205x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.3622+-0.0299     ?      0.3767+-0.0554        ? might be 1.0399x slower
   delay-tear-off-arguments-strictmode               11.7769+-0.3293           11.6714+-0.1642        
   deltablue-varargs                                149.9948+-5.8519          148.8525+-1.5563        
   destructuring-arguments                           14.7909+-0.2301           14.7690+-0.5764        
   destructuring-swap                                 4.4656+-0.3919     ?      4.4686+-0.5351        ?
   direct-arguments-getbyval                          0.9990+-0.0931            0.9937+-0.1043        
   div-boolean-double                                 5.1048+-0.3680            4.9713+-0.1325          might be 1.0269x faster
   div-boolean                                        7.6152+-0.1349     ?      7.6910+-0.1582        ?
   double-get-by-val-out-of-bounds                    3.8902+-0.1048     ?      4.0157+-0.1354        ? might be 1.0323x slower
   double-pollution-getbyval                          8.6411+-1.3076            8.2016+-0.2874          might be 1.0536x faster
   double-pollution-putbyoffset                       3.4963+-0.0562     ?      3.7742+-0.8879        ? might be 1.0795x slower
   double-to-int32-typed-array-no-inline              1.9650+-0.0984     ?      2.0133+-0.3036        ? might be 1.0246x slower
   double-to-int32-typed-array                        1.6549+-0.1376            1.5928+-0.0909          might be 1.0390x faster
   double-to-uint32-typed-array-no-inline             2.0097+-0.0780            1.9711+-0.1486          might be 1.0196x faster
   double-to-uint32-typed-array                       1.6829+-0.2157            1.6038+-0.0827          might be 1.0493x faster
   elidable-new-object-dag                           37.1661+-0.7730     ?     37.3814+-1.1081        ?
   elidable-new-object-roflcopter                    39.4862+-1.3082           39.1473+-1.7006        
   elidable-new-object-then-call                     31.8257+-4.7430           30.2048+-1.6187          might be 1.0537x faster
   elidable-new-object-tree                          40.7846+-1.0998           40.3422+-1.6529          might be 1.0110x faster
   empty-string-plus-int                              4.4610+-0.0841     ?      4.4715+-0.1468        ?
   emscripten-cube2hash                              24.1464+-2.3437     ?     25.1727+-2.4360        ? might be 1.0425x slower
   exit-length-on-plain-object                       11.5229+-0.0323     ?     11.5255+-0.2975        ?
   external-arguments-getbyval                        0.9725+-0.0575     ?      0.9900+-0.0734        ? might be 1.0180x slower
   external-arguments-putbyval                        1.9135+-0.1551     ?      1.9439+-0.1653        ? might be 1.0159x slower
   fixed-typed-array-storage-var-index                0.9724+-0.0145     ?      1.0333+-0.0627        ? might be 1.0627x slower
   fixed-typed-array-storage                          0.7640+-0.0812     ?      0.7833+-0.1327        ? might be 1.0252x slower
   Float32Array-matrix-mult                           3.5615+-0.1680            3.4761+-0.0939          might be 1.0245x faster
   Float32Array-to-Float64Array-set                  44.3898+-0.8819     ?     44.8405+-0.5586        ? might be 1.0102x slower
   Float64Array-alloc-long-lived                     63.2968+-2.1876           61.4168+-0.7875          might be 1.0306x faster
   Float64Array-to-Int16Array-set                    53.2209+-1.4505           52.5873+-1.4437          might be 1.0120x faster
   fold-double-to-int                                11.2084+-0.1455     ?     11.2532+-0.2173        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.7832+-0.7676     ?     10.0682+-0.5893        ? might be 1.0291x slower
   fold-get-by-id-to-multi-get-by-offset              8.4203+-0.5027            8.0818+-0.2958          might be 1.0419x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.2079+-1.2179            7.5118+-2.3483          might be 1.0927x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.2023+-0.5107            7.8900+-1.3132          might be 1.0396x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      6.6140+-2.2769     ?      7.1415+-1.4050        ? might be 1.0798x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      3.5494+-0.4411            3.5005+-0.3918          might be 1.0140x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.3168+-0.1272            8.1092+-0.3521          might be 1.0256x faster
   fold-put-by-id-to-multi-put-by-offset              8.4591+-0.1240            8.1842+-0.4866          might be 1.0336x faster
   fold-put-structure                                 4.3883+-0.8894            3.9022+-0.4871          might be 1.1246x faster
   for-of-iterate-array-entries                       4.1708+-0.8784            3.8546+-0.2674          might be 1.0820x faster
   for-of-iterate-array-keys                          2.9442+-0.1111     ?      3.0408+-0.2597        ? might be 1.0328x slower
   for-of-iterate-array-values                        2.9077+-0.1185     ?      3.0927+-0.5521        ? might be 1.0636x slower
   fround                                            17.0254+-0.5693           16.8832+-0.8294        
   ftl-library-inlining-dataview                     55.3542+-1.8304           54.8253+-1.2813        
   ftl-library-inlining                             104.3007+-1.9121          104.0242+-0.6178        
   function-dot-apply                                 1.5593+-0.1843            1.4932+-0.0665          might be 1.0442x faster
   function-test                                      2.6245+-0.5554            2.4208+-0.0417          might be 1.0842x faster
   function-with-eval                                89.4238+-1.5689     ?     90.6534+-9.3003        ? might be 1.0137x slower
   gcse-poly-get-less-obvious                        13.4318+-0.1460     ?     13.5419+-0.9975        ?
   gcse-poly-get                                     15.2101+-0.4316           13.5820+-1.4045          might be 1.1199x faster
   gcse                                               3.4615+-0.0867     ?      3.4977+-0.1152        ? might be 1.0105x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.3269+-0.0175     ?      2.3625+-0.1076        ? might be 1.0153x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.4736+-0.2125     ?      5.5251+-1.0522        ?
   get-by-id-chain-from-try-block                     6.0765+-0.5667     ?      6.1981+-0.6636        ? might be 1.0200x slower
   get-by-id-check-structure-elimination              4.0150+-0.2311     ?      4.0515+-0.2335        ?
   get-by-id-proto-or-self                           12.6577+-0.3821     ?     13.0318+-0.5290        ? might be 1.0296x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.7283+-0.2481            2.6121+-0.0292          might be 1.0445x faster
   get-by-id-self-or-proto                           13.4865+-0.5841     ?     13.6916+-0.4031        ? might be 1.0152x slower
   get-by-val-out-of-bounds                           3.7668+-0.0999     ?      3.8310+-0.0737        ? might be 1.0170x slower
   get_callee_monomorphic                             2.6112+-0.1780     ?      2.6520+-0.1272        ? might be 1.0156x slower
   get_callee_polymorphic                             3.1920+-0.3127            3.0980+-0.2279          might be 1.0303x faster
   getter-no-activation                               4.9032+-0.4013     ?      5.0738+-0.4276        ? might be 1.0348x slower
   getter-richards                                  113.4353+-5.2670          112.8447+-4.8488        
   getter                                             5.7241+-0.8872            5.1642+-0.5850          might be 1.1084x faster
   global-var-const-infer-fire-from-opt               0.8569+-0.1929            0.8132+-0.0774          might be 1.0538x faster
   global-var-const-infer                             0.6580+-0.0687     ?      0.7058+-0.0321        ? might be 1.0726x slower
   HashMap-put-get-iterate-keys                      25.5944+-1.7445     ?     26.8098+-3.5296        ? might be 1.0475x slower
   HashMap-put-get-iterate                           27.6923+-3.2380           26.1259+-1.3076          might be 1.0600x faster
   HashMap-string-put-get-iterate                    25.0150+-0.7988     ?     25.5265+-2.1316        ? might be 1.0204x slower
   hoist-make-rope                                    8.3896+-1.0298     ?      9.3361+-0.7858        ? might be 1.1128x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.8001+-0.1741            3.7828+-0.2115        
   hoist-poly-check-structure                         3.0587+-0.1156            2.9454+-0.0369          might be 1.0385x faster
   imul-double-only                                   6.1921+-0.1695     ?      6.7007+-0.6829        ? might be 1.0821x slower
   imul-int-only                                      7.3465+-0.6455     ?      7.3607+-0.3277        ?
   imul-mixed                                         5.8228+-0.6710            5.8026+-0.3281        
   in-four-cases                                     14.3038+-0.4504     ?     14.6633+-1.0914        ? might be 1.0251x slower
   in-one-case-false                                  8.0408+-0.4386     ?      8.0644+-0.7126        ?
   in-one-case-true                                   8.2823+-1.1438            8.2745+-1.7483        
   in-two-cases                                       8.2083+-0.4324     ?      8.3016+-0.4569        ? might be 1.0114x slower
   indexed-properties-in-objects                      2.6780+-0.5483            2.5317+-0.0947          might be 1.0578x faster
   infer-closure-const-then-mov-no-inline             2.9228+-0.0242            2.9077+-0.0437        
   infer-closure-const-then-mov                      15.2515+-0.3419     ?     15.5440+-0.5407        ? might be 1.0192x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.0257+-0.7936            9.7704+-0.2326          might be 1.0261x faster
   infer-closure-const-then-put-to-scope             20.9005+-2.0851           20.0665+-0.6853          might be 1.0416x faster
   infer-closure-const-then-reenter-no-inline   
                                                     45.6380+-1.5487     ?     45.6658+-1.5421        ?
   infer-closure-const-then-reenter                  20.3535+-0.1657           20.1694+-0.3476        
   infer-constant-global-property                    28.2578+-0.9717           28.1545+-0.6691        
   infer-constant-property                            2.3542+-0.1386            2.3322+-0.0355        
   infer-one-time-closure-ten-vars                    7.5142+-0.3343     ?      7.5958+-0.3031        ? might be 1.0109x slower
   infer-one-time-closure-two-vars                    7.1171+-0.0395     ?      7.3277+-0.5174        ? might be 1.0296x slower
   infer-one-time-closure                             7.2236+-0.2996            7.2191+-0.3326        
   infer-one-time-deep-closure                       11.9421+-0.8327     ?     12.3832+-1.1461        ? might be 1.0369x slower
   inline-arguments-access                            3.8728+-0.2725     ?      4.0796+-0.4238        ? might be 1.0534x slower
   inline-arguments-aliased-access                    3.7840+-0.1797            3.7528+-0.0785        
   inline-arguments-local-escape                      4.1345+-0.5682            3.9146+-0.2381          might be 1.0562x faster
   inline-get-scoped-var                              4.5453+-0.3100     ?      4.7855+-0.1326        ? might be 1.0529x slower
   inlined-put-by-id-transition                      10.8926+-0.5313     ?     10.9107+-0.4387        ?
   int-or-other-abs-then-get-by-val                   3.8561+-0.1046     ?      4.1108+-0.6229        ? might be 1.0661x slower
   int-or-other-abs-zero-then-get-by-val             15.0338+-0.7155           14.7530+-0.2031          might be 1.0190x faster
   int-or-other-add-then-get-by-val                   3.6936+-0.0981     ?      3.8492+-0.2109        ? might be 1.0421x slower
   int-or-other-add                                   4.5243+-0.0937     ?      4.5733+-0.0723        ? might be 1.0108x slower
   int-or-other-div-then-get-by-val                   3.4083+-0.1668     ?      3.5550+-0.2938        ? might be 1.0430x slower
   int-or-other-max-then-get-by-val                   3.5591+-0.0510            3.5114+-0.2419          might be 1.0136x faster
   int-or-other-min-then-get-by-val                   3.6993+-0.1471     ?      3.8854+-0.4623        ? might be 1.0503x slower
   int-or-other-mod-then-get-by-val                   3.4073+-0.3753            3.1743+-0.1261          might be 1.0734x faster
   int-or-other-mul-then-get-by-val                   3.3234+-0.2592            3.1547+-0.0675          might be 1.0535x faster
   int-or-other-neg-then-get-by-val                   3.6777+-0.2503     ?      3.7334+-0.2488        ? might be 1.0151x slower
   int-or-other-neg-zero-then-get-by-val             14.7737+-0.3340           14.7569+-0.4032        
   int-or-other-sub-then-get-by-val                   3.6284+-0.0425     ?      3.8123+-0.2697        ? might be 1.0507x slower
   int-or-other-sub                                   3.0503+-0.0891     ?      3.1030+-0.5057        ? might be 1.0173x slower
   int-overflow-local                                 3.5140+-0.1998            3.3987+-0.0697          might be 1.0339x faster
   Int16Array-alloc-long-lived                       44.7080+-1.0773           44.2729+-2.5796        
   Int16Array-bubble-sort-with-byteLength            16.5726+-0.8970     ?     16.5844+-1.5458        ?
   Int16Array-bubble-sort                            15.5959+-0.6807     ?     15.7161+-0.9000        ?
   Int16Array-load-int-mul                            1.2321+-0.0063     ?      1.2517+-0.0441        ? might be 1.0159x slower
   Int16Array-to-Int32Array-set                      41.2156+-3.5637           41.0414+-1.8321        
   Int32Array-alloc-large                            11.1010+-0.4580     ?     11.2252+-1.0276        ? might be 1.0112x slower
   Int32Array-alloc-long-lived                       48.6909+-1.2204     ?     49.6205+-1.5392        ? might be 1.0191x slower
   Int32Array-alloc                                   2.8950+-0.0689     ?      3.0235+-0.2435        ? might be 1.0444x slower
   Int32Array-Int8Array-view-alloc                    5.7628+-0.1169     ?      5.8920+-0.1278        ? might be 1.0224x slower
   int52-spill                                        5.4438+-0.2175     ?      5.6097+-0.4728        ? might be 1.0305x slower
   Int8Array-alloc-long-lived                        38.7594+-1.5162     ?     39.1125+-2.1541        ?
   Int8Array-load-with-byteLength                     3.0244+-0.0729     ?      3.0392+-0.1216        ?
   Int8Array-load                                     3.0805+-0.0764            3.0081+-0.0690          might be 1.0241x faster
   integer-divide                                     9.2883+-0.7360     ?      9.3298+-0.0706        ?
   integer-modulo                                     1.5623+-0.1488     ?      1.5735+-0.0722        ?
   is-boolean-fold-tricky                             3.4228+-0.1070            3.4085+-0.1086        
   is-boolean-fold                                    2.3828+-0.1037     ?      2.4297+-0.2425        ? might be 1.0197x slower
   is-function-fold-tricky-internal-function   
                                                      9.5034+-0.7941            9.0765+-0.2419          might be 1.0470x faster
   is-function-fold-tricky                            3.7399+-0.2312     ?      3.7572+-0.1078        ?
   is-function-fold                                   2.4930+-0.2062     ?      2.6176+-0.6188        ? might be 1.0500x slower
   is-number-fold-tricky                              3.7845+-0.4448            3.6795+-0.1799          might be 1.0285x faster
   is-number-fold                                     2.4998+-0.3696            2.3650+-0.0516          might be 1.0570x faster
   is-object-or-null-fold-functions                   2.5558+-0.5516            2.4266+-0.0672          might be 1.0532x faster
   is-object-or-null-fold-less-tricky                 3.6617+-0.0234     ?      3.9813+-0.4931        ? might be 1.0873x slower
   is-object-or-null-fold-tricky                      4.8658+-0.2274     ?      4.9384+-0.4873        ? might be 1.0149x slower
   is-object-or-null-fold                             2.3505+-0.0195     ?      2.3721+-0.0176        ?
   is-object-or-null-trickier-function                3.7864+-0.1979     ?      3.9188+-0.5193        ? might be 1.0350x slower
   is-object-or-null-trickier-internal-function   
                                                      9.6810+-0.3789     ?     10.0200+-1.3901        ? might be 1.0350x slower
   is-object-or-null-tricky-function                  3.7424+-0.2150     ?      3.7600+-0.1263        ?
   is-object-or-null-tricky-internal-function   
                                                      7.2961+-0.7081            7.1132+-0.1167          might be 1.0257x faster
   is-string-fold-tricky                              3.6204+-0.0661     ?      3.6423+-0.0676        ?
   is-string-fold                                     2.3476+-0.0220     ?      2.5370+-0.3832        ? might be 1.0807x slower
   is-undefined-fold-tricky                           2.9507+-0.0127     ?      2.9777+-0.0232        ?
   is-undefined-fold                                  2.4963+-0.4662     ?      2.5267+-0.2914        ? might be 1.0122x slower
   large-int-captured                                 4.0579+-0.2811            4.0442+-0.2365        
   large-int-neg                                     13.4100+-0.2363           13.3930+-0.2713        
   large-int                                         12.6317+-0.3122     ?     13.3435+-0.9117        ? might be 1.0563x slower
   logical-not                                        3.6992+-0.0812            3.6312+-0.1752          might be 1.0187x faster
   lots-of-fields                                     9.5557+-0.1845            9.3506+-0.2083          might be 1.0219x faster
   make-indexed-storage                               2.5885+-0.0849     ?      2.6447+-0.1465        ? might be 1.0217x slower
   make-rope-cse                                      4.3372+-0.0793     ?      4.8917+-1.2945        ? might be 1.1278x slower
   marsaglia-larger-ints                             30.6463+-2.0049     ?     30.7347+-1.3156        ?
   marsaglia-osr-entry                               19.5237+-0.4422     ?     20.2422+-1.3112        ? might be 1.0368x slower
   max-boolean                                        2.4637+-0.1338            2.4388+-0.0373          might be 1.0102x faster
   method-on-number                                  14.7213+-0.5013           14.5630+-0.4039          might be 1.0109x faster
   min-boolean                                        2.4130+-0.0537     ?      2.4326+-0.0939        ?
   minus-boolean-double                               2.7503+-0.0223     ?      2.7979+-0.0936        ? might be 1.0173x slower
   minus-boolean                                      2.3549+-0.4863            2.0927+-0.0829          might be 1.1253x faster
   misc-strict-eq                                    27.7948+-2.5275           26.6064+-1.1510          might be 1.0447x faster
   mod-boolean-double                                10.3531+-0.1636     ?     10.4375+-0.1610        ?
   mod-boolean                                        7.6772+-0.0308     ?      7.6798+-0.0617        ?
   mul-boolean-double                                 3.6855+-0.7669            3.2261+-0.0137          might be 1.1424x faster
   mul-boolean                                        2.5177+-0.0747     ?      2.8488+-0.6124        ? might be 1.1315x slower
   neg-boolean                                        2.8023+-0.1287            2.7727+-0.0392          might be 1.0107x faster
   negative-zero-divide                               0.2582+-0.0193     ?      0.2610+-0.0124        ? might be 1.0106x slower
   negative-zero-modulo                               0.2920+-0.1037            0.2905+-0.1217        
   negative-zero-negate                               0.2401+-0.0035     ?      0.2416+-0.0129        ?
   nested-function-parsing                           33.0396+-0.2871     ?     33.1509+-0.6180        ?
   new-array-buffer-dead                             96.2360+-1.0873     ?     98.0498+-6.0321        ? might be 1.0188x slower
   new-array-buffer-push                              6.3149+-0.3794            6.1479+-0.2788          might be 1.0272x faster
   new-array-dead                                    13.8781+-1.9851           13.2360+-1.1044          might be 1.0485x faster
   new-array-push                                     3.6558+-0.1577            3.6023+-0.3399          might be 1.0149x faster
   no-inline-constructor                            110.4818+-4.5973          105.9281+-1.1793          might be 1.0430x faster
   number-test                                        2.7247+-0.5615            2.5497+-0.0743          might be 1.0686x faster
   object-closure-call                                4.5638+-0.1317     ?      4.7870+-0.7263        ? might be 1.0489x slower
   object-test                                        2.3453+-0.0442     ?      2.5340+-0.5049        ? might be 1.0805x slower
   obvious-sink-pathology-taken                     118.2666+-2.2391     ?    120.0546+-5.2881        ? might be 1.0151x slower
   obvious-sink-pathology                           113.5497+-0.8640          113.5235+-1.8269        
   obviously-elidable-new-object                     29.2182+-2.6200           27.0430+-0.1487          might be 1.0804x faster
   plus-boolean-arith                                 2.1182+-0.0169     ?      2.2325+-0.1988        ? might be 1.0540x slower
   plus-boolean-double                                2.8306+-0.2716     ?      2.8593+-0.1440        ? might be 1.0101x slower
   plus-boolean                                       2.4205+-0.4506            2.3298+-0.0146          might be 1.0389x faster
   poly-chain-access-different-prototypes-simple   
                                                      2.4305+-0.0050     ?      2.5050+-0.2599        ? might be 1.0307x slower
   poly-chain-access-different-prototypes             2.2637+-0.0431     ?      2.3345+-0.1515        ? might be 1.0312x slower
   poly-chain-access-simpler                          2.4450+-0.0817     ?      2.4713+-0.0792        ? might be 1.0107x slower
   poly-chain-access                                  2.3954+-0.3330            2.2760+-0.0858          might be 1.0525x faster
   poly-stricteq                                     42.0096+-1.4723           41.7791+-1.5912        
   polymorphic-array-call                             0.9795+-0.0629     ?      1.0243+-0.0637        ? might be 1.0457x slower
   polymorphic-get-by-id                              2.5228+-0.0873     ?      2.5433+-0.0605        ?
   polymorphic-put-by-id                             23.1641+-1.7473           22.9447+-0.4531        
   polymorphic-structure                             11.6145+-0.1370           11.5432+-0.1030        
   polyvariant-monomorphic-get-by-id                  6.1240+-0.0724     ?      6.4543+-1.1397        ? might be 1.0539x slower
   proto-getter-access                                7.6945+-0.3600     ?      8.0447+-0.7053        ? might be 1.0455x slower
   put-by-id-replace-and-transition                   8.0762+-1.0025     ?      8.1398+-1.0559        ?
   put-by-id-slightly-polymorphic                     2.3002+-0.0329     ?      2.4075+-0.1524        ? might be 1.0466x slower
   put-by-id                                         12.2438+-0.2799     ^     11.8952+-0.0661        ^ definitely 1.0293x faster
   put-by-val-direct                                  0.3331+-0.0148            0.3265+-0.0116          might be 1.0202x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.3245+-0.3421     ?      5.3817+-0.5417        ? might be 1.0107x slower
   put-by-val-machine-int                             2.1646+-0.0443     ?      2.3138+-0.1457        ? might be 1.0689x slower
   rare-osr-exit-on-local                            13.6348+-0.4297     ?     13.6457+-0.4007        ?
   register-pressure-from-osr                        15.2329+-0.4038           14.9760+-0.3111          might be 1.0172x faster
   setter                                             5.3923+-0.2533     ?      5.5655+-0.3316        ? might be 1.0321x slower
   simple-activation-demo                            22.6383+-0.6282     ?     22.7936+-0.3713        ?
   simple-getter-access                               9.7494+-0.2171            9.6143+-0.1835          might be 1.0141x faster
   simple-poly-call-nested                            8.3760+-0.4468     ?      8.8411+-0.6401        ? might be 1.0555x slower
   simple-poly-call                                   1.1470+-0.0510     ?      1.1710+-0.1467        ? might be 1.0209x slower
   sin-boolean                                       16.6793+-1.6030           16.2102+-0.5963          might be 1.0289x faster
   singleton-scope                                   58.1704+-1.6125     ?     58.4650+-1.2252        ?
   sink-function                                      9.2067+-0.3572            9.1561+-0.3759        
   sink-huge-activation                              15.3687+-1.2797           14.9748+-0.3616          might be 1.0263x faster
   sinkable-new-object-dag                           56.9877+-3.8169           55.4910+-2.3970          might be 1.0270x faster
   sinkable-new-object-taken                         46.1378+-1.7054     ?     46.5231+-2.0160        ?
   sinkable-new-object                               32.1895+-1.7768     ?     32.4302+-1.1209        ?
   slow-array-profile-convergence                     2.4015+-0.7592            2.1943+-0.0853          might be 1.0944x faster
   slow-convergence                                   2.3362+-0.4279            2.1356+-0.0359          might be 1.0940x faster
   sorting-benchmark                                 17.3640+-0.2545           17.1731+-0.3448          might be 1.0111x faster
   sparse-conditional                                 0.9967+-0.0286            0.9579+-0.0316          might be 1.0405x faster
   splice-to-remove                                  12.4217+-0.2645           12.4190+-0.2155        
   string-char-code-at                               11.7400+-0.7929     ?     11.9744+-0.7138        ? might be 1.0200x slower
   string-concat-object                               2.2735+-0.2910            2.2472+-0.1128          might be 1.0117x faster
   string-concat-pair-object                          2.0671+-0.0470     ?      2.1863+-0.3453        ? might be 1.0577x slower
   string-concat-pair-simple                         10.4166+-0.2181     ?     10.8223+-0.2571        ? might be 1.0390x slower
   string-concat-simple                              10.6625+-0.2285     ?     10.7858+-0.8069        ? might be 1.0116x slower
   string-cons-repeat                                 7.6285+-0.5966            7.3878+-0.2928          might be 1.0326x faster
   string-cons-tower                                  7.7446+-0.3511     ?      7.7896+-0.3686        ?
   string-equality                                   14.0413+-1.1127     ?     14.5976+-1.1919        ? might be 1.0396x slower
   string-get-by-val-big-char                         6.0761+-0.0668     ?      6.2242+-0.2175        ? might be 1.0244x slower
   string-get-by-val-out-of-bounds-insane             3.2073+-0.3097            3.0142+-0.1232          might be 1.0640x faster
   string-get-by-val-out-of-bounds                    3.7384+-0.4442            3.7291+-0.2073        
   string-get-by-val                                  2.6218+-0.3024     ?      2.7733+-0.7391        ? might be 1.0578x slower
   string-hash                                        1.6666+-0.0145     ?      1.6974+-0.1064        ? might be 1.0185x slower
   string-long-ident-equality                        11.0800+-0.1088     ?     11.1030+-0.1014        ?
   string-out-of-bounds                               9.3950+-0.1560            9.3912+-0.2349        
   string-repeat-arith                               25.8444+-1.8103           24.7103+-0.2293          might be 1.0459x faster
   string-sub                                        48.2728+-1.4096           47.2511+-0.8146          might be 1.0216x faster
   string-test                                        2.3976+-0.0131     ?      2.4615+-0.1239        ? might be 1.0267x slower
   string-var-equality                               24.0847+-0.3989     ?     24.3770+-1.0953        ? might be 1.0121x slower
   structure-hoist-over-transitions                   2.1474+-0.1309     ?      2.1786+-0.0889        ? might be 1.0146x slower
   substring-concat-weird                            35.9947+-0.7102           35.4572+-1.7101          might be 1.0152x faster
   substring-concat                                  36.5112+-1.2844           36.0167+-0.4761          might be 1.0137x faster
   substring                                         41.2643+-0.8130           40.8342+-1.7899          might be 1.0105x faster
   switch-char-constant                               2.6982+-0.2274     ?      2.7703+-0.1284        ? might be 1.0267x slower
   switch-char                                        5.6874+-0.8582     ?      5.9475+-1.0229        ? might be 1.0457x slower
   switch-constant                                    8.1365+-0.1827            7.9464+-0.3308          might be 1.0239x faster
   switch-string-basic-big-var                       13.0591+-0.9093           12.4024+-0.1166          might be 1.0529x faster
   switch-string-basic-big                           13.0443+-0.1635           12.9399+-1.2147        
   switch-string-basic-var                           12.2295+-0.2097     ?     12.5209+-1.4352        ? might be 1.0238x slower
   switch-string-basic                               11.6801+-0.7866           11.2132+-0.2156          might be 1.0416x faster
   switch-string-big-length-tower-var                17.8444+-0.2779     ^     16.4628+-0.7524        ^ definitely 1.0839x faster
   switch-string-length-tower-var                    12.1469+-0.2548           11.7234+-0.2283          might be 1.0361x faster
   switch-string-length-tower                        10.7536+-1.0482           10.2365+-0.1534          might be 1.0505x faster
   switch-string-short                               10.2935+-0.2334           10.2232+-0.0671        
   switch                                            12.3239+-1.2827           11.5049+-0.3304          might be 1.0712x faster
   tear-off-arguments-simple                          3.1315+-0.5644            2.8785+-0.0493          might be 1.0879x faster
   tear-off-arguments                                 4.1161+-0.0596            4.0854+-0.3137        
   temporal-structure                                10.8801+-0.2433     ?     10.8967+-0.1949        ?
   to-int32-boolean                                  12.1490+-1.0787           12.0208+-0.4317          might be 1.0107x faster
   try-catch-get-by-val-cloned-arguments             13.0632+-1.3594           12.4051+-0.0912          might be 1.0531x faster
   try-catch-get-by-val-direct-arguments              5.4548+-0.2681     ?      5.5142+-0.2833        ? might be 1.0109x slower
   try-catch-get-by-val-scoped-arguments              6.7856+-0.6834            6.6713+-0.3479          might be 1.0171x faster
   typed-array-get-set-by-val-profiling              29.2254+-1.9634           28.8467+-2.3882          might be 1.0131x faster
   undefined-property-access                        201.9491+-0.3253     ?    202.2845+-0.5593        ?
   undefined-test                                     2.5217+-0.0458     ?      2.5873+-0.0649        ? might be 1.0260x slower
   unprofiled-licm                                   12.9734+-0.5255           12.8461+-0.7174        
   varargs-call                                      12.7744+-1.0065           11.8988+-0.0821          might be 1.0736x faster
   varargs-construct-inline                          18.9385+-0.3374     ?     18.9477+-0.7582        ?
   varargs-construct                                 26.8636+-0.3642     ?     27.1548+-1.1879        ? might be 1.0108x slower
   varargs-inline                                     7.6400+-0.4426     ?      7.8483+-1.0337        ? might be 1.0273x slower
   varargs-strict-mode                                8.3412+-0.3056            8.1160+-0.0829          might be 1.0277x faster
   varargs                                            8.1857+-0.2864            8.1345+-0.1240        
   weird-inlining-const-prop                          2.0535+-0.3187            1.9532+-0.3059          might be 1.0513x faster

   &lt;geometric&gt;                                        6.9995+-0.0432     ?      7.0024+-0.0500        ? might be 1.0004x slower

                                                          Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                                       430.0673+-5.3406          429.0679+-5.9068        
   cray.c                                           370.9434+-2.6266          370.7574+-3.4957        
   dry.c                                            391.3120+-28.1714    ?    400.3206+-28.4863       ? might be 1.0230x slower
   FloatMM.c                                        660.6706+-0.6043     ?    660.8911+-3.3617        ?
   gcc-loops.cpp                                   3379.4714+-42.2538        3365.6600+-24.2746       
   n-body.c                                         784.8190+-1.8584     ?    788.0121+-6.5370        ?
   Quicksort.c                                      394.7753+-6.9276          393.2552+-1.7536        
   stepanov_container.cpp                          3319.1298+-64.8832        3290.7164+-19.7912       
   Towers.c                                         224.2418+-0.3797     ?    224.3572+-1.1079        ?

   &lt;geometric&gt;                                      682.4591+-4.0381     ?    683.0945+-4.3673        ? might be 1.0009x slower

                                                          Conf#1                    Conf#2                                      
CompressionBench:
   huffman                                          283.3488+-4.0389          283.3203+-5.2277        
   arithmetic-simple                                326.0441+-1.0772     ?    326.1645+-1.5984        ?
   arithmetic-precise                               254.1752+-3.0214     ?    254.5490+-1.1787        ?
   arithmetic-complex-precise                       256.6270+-3.7170          256.3231+-5.2345        
   arithmetic-precise-order-0                       337.7275+-7.0976     ?    341.2655+-3.3992        ? might be 1.0105x slower
   arithmetic-precise-order-1                       284.0228+-2.2518          282.9955+-4.1211        
   arithmetic-precise-order-2                       316.1408+-2.9216     ?    322.2546+-10.5952       ? might be 1.0193x slower
   arithmetic-simple-order-1                        316.1196+-1.5161          315.2775+-4.2455        
   arithmetic-simple-order-2                        384.5463+-45.0267         363.9423+-10.0071         might be 1.0566x faster
   lz-string                                        292.8047+-6.6800     ?    293.0391+-5.9172        ?

   &lt;geometric&gt;                                      302.8536+-3.1452          301.9800+-1.3922          might be 1.0029x faster

                                                          Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   53.2699+-0.2365     ^     51.9108+-0.3804        ^ definitely 1.0262x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092654</commentid>
    <comment_count>6</comment_count>
      <attachid>252575</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-07 11:24:46 -0700</bug_when>
    <thetext>Comment on attachment 252575
Patch

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

Looks good to me. Probably needs review from Phil too.

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        Since ArithRound speculate it produces int32, the MacroAssembler assembler

speculate =&gt; speculates

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        but it is a good start known to be valid and inlining alone alread provides

alread =&gt; already</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092656</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-07 11:25:27 -0700</bug_when>
    <thetext>c:\cygwin\home\buildbot\webkit\webkitbuild\release\include\private\javascriptcore\X86Assembler.h(1811): error C2039: &apos;twoByteOp64&apos; : is not a member of &apos;JSC::X86Assembler::X86InstructionFormatter&apos; [C:\cygwin\home\buildbot\WebKit\Source\JavaScriptCore\JavaScriptCore.vcxproj\LLInt\LLIntOffsetsExtractor\LLIntOffsetsExtractor.vcxproj]
          c:\cygwin\home\buildbot\webkit\webkitbuild\release\include\private\javascriptcore\X86Assembler.h(2332) : see declaration of &apos;JSC::X86Assembler::X86InstructionFormatter&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092669</commentid>
    <comment_count>8</comment_count>
      <attachid>252575</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-07 11:34:31 -0700</bug_when>
    <thetext>Comment on attachment 252575
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:770
&gt; +        if (operand &amp;&amp; operand.isNumber()) {
&gt; +            setConstant(node, jsNumber(jsRound(operand.asNumber())));
&gt; +            break;
&gt; +        }

This constant folding should correctly consider what happens under all of the rounding modes.

- This is wrong for Int32, since it fails to convert -0 to 0.  It also fails to always produce an int32.  There is sort of another bug.  It also will remove the Int32: check, which is pretty catastrophic: you could have previously had code that assumed that the incoming value was checked for Int32, but now the check will be gone and you&apos;ll have a double constant instead.  That&apos;s not quite true since: (1) This code is reached only after the edge checks are executed.  But the guiding principle of the abstract interpreter is that anytime it sets an abstract value to be V, it could instead set it to W if W is a superset of V.  Therefore, it would be legal to change the Int32: check logic in the abstract interpreter to just do nothing for a double constant: the right result would be the clear value (i.e. the empty set of values), but you&apos;d be setting it to some value instead, and some value is a superset of no values. Also: (2) the constant folder will try keep the edge checks intact after removing a node. But that all gets weird, because you&apos;d then have an Int32: check on a double constant and a node that previously returned an int32 will now return a double.  Soooooper weird.
- This is wrong for Int32WithNegBlahBlah, since it will sort of remove the Int32:.  This would be catastrophic if it weren&apos;t for other mitigations, but we still want to avoid it.

Look at the pattern used for other arith nodes. Roughly, we do:

- Don&apos;t constant fold if we know that some check that this does would have failed.  Basically, this means that if you&apos;re in the Int32 modes, check that operand.isInt32().
- Make sure you correctly model the behavior of the node in the DFG and FTL backends.  In the Int32 rounding mode, then will not return the same result as jsRound() for -0.
- Make sure that when calling setConstant(), you set a constant that matches the type this would have otherwise returned.  In the Int32 rounding mode, this node will always return Int32, but you might return a double (due to -0).  A good idiom to follow is to make damn sure that when you construct a jsNumber() for an int32-returning node, you call the jsNumber() overload that takes an int32.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092812</commentid>
    <comment_count>9</comment_count>
      <attachid>252639</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-07 15:49:12 -0700</bug_when>
    <thetext>Created attachment 252639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092842</commentid>
    <comment_count>10</comment_count>
      <attachid>252639</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-07 16:37:23 -0700</bug_when>
    <thetext>Comment on attachment 252639
Patch

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

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:980
&gt; +    LValue convertDoubleToInt32(LValue value, bool shouldCheckNegativeZero)

Something I try to do is put all of the helpers below the compileNodeType methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092890</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-07 17:24:51 -0700</bug_when>
    <thetext>Committed r183963: &lt;http://trac.webkit.org/changeset/183963&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093201</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-05-08 09:27:53 -0700</bug_when>
    <thetext>Looks like a 9% progression on Kraken on the bots.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252562</attachid>
            <date>2015-05-06 20:59:57 -0700</date>
            <delta_ts>2015-05-06 23:33:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144725-20150506205840.patch</filename>
            <type>text/plain</type>
            <size>37706</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzODQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OTlkN2U3ZWZiOGM0OGUxZjlmZGUzYTY0YTI4NjkwOWVmNmE2MGQ4Li4zMDE4NTIzNzQyZmQzMDUx
MzRhZDBmYzgwMmRmNDBiNTE3NTYzNmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MCBAQAorMjAxNS0wNS0wNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgYmFzaWMgREZHL0ZUTCBzdXBwb3J0IGZvciBNYXRo
LnJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ3MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFkZHMgdHdvIG9wdGltaXphdGlvbnMgdGFyZ2V0aW5nIE1hdGgucm91bmQoKToK
KyAgICAgICAgLUFkZCBhIERGR05vZGUgQXJpdGhSb3VuZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBp
bnRyaW5zaWMgUm91bmRJbnRyaW5zaWMuCisgICAgICAgIC1DaGFuZ2UgdGhlIE1hY3JvQXNzZW1i
bGVyIHRvIGJlIHN0cmljdGVyIG9uIGhvdyB3ZSBmYWlsIHRvIGNvbnZlcnQgYSBkb3VibGUKKyAg
ICAgICAgIHRvIGluZ2V0ZXIuIFByZXZpb3VzbHksIGFueSBudW1iZXIgdmFsdWVkIHplcm8gd291
bGQgZmFpbCwgbm93IHdlIG9ubHkKKyAgICAgICAgIGZhaWwgZm9yIC0wLgorCisgICAgICAgIFNp
bmNlIEFyaXRoUm91bmQgc3BlY3VsYXRlIGl0IHByb2R1Y2VzIGludDMyLCB0aGUgTWFjcm9Bc3Nl
bWJsZXIgYXNzZW1ibGVyCisgICAgICAgIHBhcnQgYmVjYW1lIG5lY2Vzc2FyeSBiZWNhdXNlIHpl
cm8gaXMgYSBwcmV0dHkgY29tbW9uIG91dHB1dCBvZiBNYXRoLnJvdW5kKCkKKyAgICAgICAgYW5k
IHdlIHdvdWxkIE9TUiBleGl0IGEgbG90IChhbmQgZXZlbnR1YWxseSByZWNvbXBpbGUgZm9yIGRv
dWJsZXMpLgorCisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6Om1vdm1za3BkX3JyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZD
b21tb246OmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKToKKyAgICAgICAgV2hlbiB3ZSBoYXZl
IGEgemVybywgZ2V0IHRoZSBzaWduIGJpdCBvdXQgb2YgdGhlIGRvdWJsZSBhbmQgY2hlY2sgaWYg
aXMgb25lLgorCisgICAgICAgIEknbGwgbG9vayBpbnRvIGRvaW5nIHRoZSBzYW1lIGltcHJvdmVt
ZW50IGZvciBBUk0uCisKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OnR5cGVPZkRvdWJsZVJvdW5kaW5nKToKKyAgICAgICAgKEpTQzo6dHlwZU9m
RG91YmxlRlJvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAg
ICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUp
OgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNH
Qyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnJvdW5kU2hvdWxkU3BlY3VsYXRlSW50MzIpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpuZWdhdGVTaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OmFyaXRoTm9kZUZsYWdzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJlZGlj
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQXJpdGhNb2RlKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoUm91bmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21w
aWxlKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAq
IGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29udmVydERvdWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlRG91YmxlQXNJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVBcml0aFJvdW5kKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjZWlsNjQpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aENvbW1vbi5jcHA6CisgICAgICAgICog
cnVudGltZS9NYXRoQ29tbW9uLmg6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1JvdW5kKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvbWF0aC1yb3VuZC1iYXNpY3MuanM6IEFkZGVkLgorICAgICAgICAobWF0aFJvdW5kT25JbnRl
Z2Vycyk6CisgICAgICAgIChtYXRoUm91bmRPbkRvdWJsZXMpOgorICAgICAgICAobWF0aFJvdW5k
T25Cb29sZWFucyk6CisgICAgICAgICh1c2VsZXNzTWF0aFJvdW5kKToKKyAgICAgICAgKG1hdGhS
b3VuZFdpdGhPdmVyZmxvdyk6CisgICAgICAgIChtYXRoUm91bmRDb25zdW1lZEFzRG91YmxlKToK
KyAgICAgICAgKG1hdGhSb3VuZERvZXNOb3RDYXJlQWJvdXRNaW51c1plcm8pOgorICAgICAgICAo
bWF0aFJvdW5kTm9Bcmd1bWVudHMpOgorICAgICAgICAobWF0aFJvdW5kVG9vTWFueUFyZ3VtZW50
cyk6CisgICAgICAgICh0ZXN0TWF0aFJvdW5kT25Db25zdGFudHMpOgorICAgICAgICAobWF0aFJv
dW5kU3RydWN0VHJhbnNpdGlvbik6CisgICAgICAgIChNYXRoLnJvdW5kKToKKwogMjAxNS0wNS0w
NSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZUTCBTd2l0Y2hT
dHJpbmcgc2xvdyBjYXNlIGNyZWF0ZXMgZHVwbGljYXRlIHN3aXRjaCBjYXNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCmluZGV4IDRhOGJlNWFmMzQ4MTI4ZWYzYzQzMDZmNGZkY2MyODAwM2M0N2JiYzkuLmIz
YjUwNzQ4YTk2Yzk4YjNjNGU4NjJlNzA5NDY2YzVhYTA1NWQ1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmgKQEAgLTkyMSw4ICs5MjEsMTcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jdnR0
c2Qyc2lfcnIoc3JjLCBkZXN0KTsKIAogICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIHplcm8s
IGl0IG1pZ2h0IGhhdmUgYmVlbiAtMC4wLCBhbmQgdGhlIGRvdWJsZSBjb21wYXJpc29uIHdvbid0
IGNhdGNoIHRoaXMhCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaWYgKG5lZ1plcm9DaGVjaykg
eworICAgICAgICAgICAgSnVtcCB2YWx1ZUlzTm9uWmVybyA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdm1za3BkX3JyKHNyYywgc2NyYXRj
aFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHNjcmF0Y2hSZWdpc3RlciwgVHJ1c3RlZEltbTMyKDEpKSk7CisgICAgICAgICAg
ICB2YWx1ZUlzTm9uWmVyby5saW5rKHRoaXMpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBp
ZiAobmVnWmVyb0NoZWNrKQogICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hU
ZXN0MzIoWmVybywgZGVzdCkpOworI2VuZGlmCiAKICAgICAgICAgLy8gQ29udmVydCB0aGUgaW50
ZWdlciByZXN1bHQgYmFjayB0byBmbG9hdCAmIGNvbXBhcmUgdG8gdGhlIG9yaWdpbmFsIHZhbHVl
IC0gaWYgbm90IGVxdWFsIG9yIHVub3JkZXJlZCAoTmFOKSB0aGVuIGp1bXAuCiAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKGRlc3QsIGZwVGVtcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAppbmRleCBiODhlM2MzZmI3OGFlZGY2NTk1YTgw
MzEzMDFkZGZjZmU4NjgxYjUyLi5jZTA3MzA5OGE5NzhkMmIwODc3OTk5ZDUwNjFiYzgzNzc1MTY5
NDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgKQEAgLTI1Myw2ICsyNTMsNyBAQCBwcml2YXRlOgogICAgICAgICBPUDJfQ1ZUU1MyU0RfVnNk
V3NkID0gMHg1QSwKICAgICAgICAgT1AyX1NVQlNEX1ZzZFdzZCAgICA9IDB4NUMsCiAgICAgICAg
IE9QMl9ESVZTRF9Wc2RXc2QgICAgPSAweDVFLAorICAgICAgICBPUDJfTU9WTVNLUERfVmRFZCAg
ID0gMHg1MCwKICAgICAgICAgT1AyX1NRUlRTRF9Wc2RXc2QgICA9IDB4NTEsCiAgICAgICAgIE9Q
Ml9BTkROUERfVnBkV3BkICAgPSAweDU1LAogICAgICAgICBPUDJfWE9SUERfVnBkV3BkICAgID0g
MHg1NywKQEAgLTE4MDQsNiArMTgwNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVy
LnR3b0J5dGVPcChPUDJfTU9WRF9WZEVkLCAoUmVnaXN0ZXJJRClkc3QsIHNyYyk7CiAgICAgfQog
CisgICAgdm9pZCBtb3Ztc2twZF9ycihYTU1SZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX1NTRV82Nik7CisgICAgICAg
IG1fZm9ybWF0dGVyLnR3b0J5dGVPcDY0KE9QMl9NT1ZNU0tQRF9WZEVkLCBkc3QsIChSZWdpc3Rl
cklEKXNyYyk7CisgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIG1vdnFfcnIoWE1N
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCmluZGV4IDVmNDRmMTRjMTMz
ZWFhNTBjZjJjYjI1MzgxZDgzNzQ0MDdjOTBkYzQuLjY4YTVkOTVjYzE5NTgwOWFlMzFlNTA2NmNj
ZTQxMzg2OGE4Nzc1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmNwcApAQCAtNTA3LDcgKzUwNyw3IEBAIFNwZWN1bGF0ZWRUeXBlIHR5
cGVPZkRvdWJsZUFicyhTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKICAgICByZXR1cm4gdHlwZU9mRG91
YmxlTmVnYXRpb24odmFsdWUpOwogfQogCi1TcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVGUm91
bmQoU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitTcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVSb3Vu
ZGluZyhTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICAvLyBXZSBtaWdodCBsb3NlIGJpdHMs
IHdoaWNoIGxlYWRzIHRvIGEgTmFOIGJlaW5nIHB1cmlmaWVkLgogICAgIGlmICh2YWx1ZSAmIFNw
ZWNEb3VibGVJbXB1cmVOYU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCmluZGV4IGI2MGUzODI2MzdkNzFkZTE0MGM0MDFmNTFiZWYzOWUzZWY0
Y2IwOTIuLjI4ODIzMzc5ZGRkNDVjYmE0MDg1ODEzNzAwMGJmYTUzOTE4NzRlOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCkBAIC00MjIs
NyArNDIyLDcgQEAgU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUXVvdGllbnQoU3BlY3VsYXRl
ZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZU1pbk1h
eChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUpOwogU3BlY3VsYXRlZFR5cGUgdHlwZU9m
RG91YmxlTmVnYXRpb24oU3BlY3VsYXRlZFR5cGUpOwogU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91
YmxlQWJzKFNwZWN1bGF0ZWRUeXBlKTsKLVNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZUZSb3Vu
ZChTcGVjdWxhdGVkVHlwZSk7CitTcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVSb3VuZGluZyhT
cGVjdWxhdGVkVHlwZSk7CiBTcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVQb3coU3BlY3VsYXRl
ZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIAogLy8gVGhpcyBjb25zZXJ2YXRpdmVseSBtb2RlbHMg
dGhlIGJlaGF2aW9yIG9mIGFyYml0cmFyeSBkb3VibGUgb3BlcmF0aW9ucy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAppbmRleCA1M2M4NDVmNTZlYjQwNDA4NTNmNDE3MjEyMDBkNTU1NDAxOGE5NzkxLi5kNjQ4
ODhlYjdjMjdkMjc2OGI2ODllNWM2ZjkzNmU2OWY3OGE3YjY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CkBAIC03NjEsNiArNzYxLDE5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlT2ZEb3VibGVQb3coZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQorCisgICAgY2FzZSBBcml0aFJvdW5kOiB7CisgICAgICAgIEpTVmFsdWUgb3Bl
cmFuZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChvcGVy
YW5kICYmIG9wZXJhbmQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwganNOdW1iZXIoanNSb3VuZChvcGVyYW5kLmFzTnVtYmVyKCkpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobm9kZS0+cmVzdWx0KCkgPT0gTm9kZVJlc3Vs
dEludDMyKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlT2ZEb3Vi
bGVSb3VuZGluZyhmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFNxcnQ6IHsKICAgICAgICAg
SlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC03Nzgs
NyArNzkxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsIGpzRG91YmxlTnVtYmVyKHN0YXRpY19jYXN0PGZsb2F0PihjaGlsZC5hc051bWJl
cigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZUZSb3VuZChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZVJvdW5k
aW5nKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAppbmRleCA0YzZiYmRkMmZmNjNkZjBjNTBkODk4ODg2NTQ1Y2YxM2ZmN2FlZmMy
Li5hYmM1MWQ0NmEwNTE5N2RmNDEzYzNiMzZkZjE2OTZkMzliY2NhYTAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMjA0NCw3ICsy
MDQ0LDIxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0
T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0KKyAgICBjYXNlIFJvdW5kSW50cmluc2ljOiB7CisgICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7CisgICAgICAgICAgICBpbnNlcnRD
aGVja3MoKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCks
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPT0gMikgeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAg
ICAgICBOb2RlKiBvcGVyYW5kID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiByb3VuZE5vZGUgPSBhZGRUb0dyYXBo
KEFyaXRoUm91bmQsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBvcGVyYW5kKTsKKyAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJvdW5kTm9kZSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogICAgIGNhc2UgSU11bEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggNjBhODk5NDgzYjA1
YTg5M2ZkNmYzODViNDIzOTQ0Y2ExZDU2OWVkYy4uMzUwYjIwZGMyODZkYmY5NDFkZGEwNWQ3ODBi
YWQxMGU4Zjk0NWQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKQEAgLTEzNCw2ICsxMzQsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2Ug
QXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKKyAg
ICBjYXNlIEFyaXRoUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRoQ29z
OgogICAgIGNhc2UgQXJpdGhMb2c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKaW5kZXggYTllMzBhY2I0YjBhM2U0NmQxOWFjMjhjOTMxNjcxMGUwZGVhYzA0NS4uMTExN2U3
YWI0MzJiYTYwZWEwNzNmYTBhZmU5ODE5YTI2ZjgxMTM0OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtODMsNiArODMsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBcml0aE1heDoKICAgICBjYXNlIEFyaXRoUG93
OgogICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgIGNhc2UgQXJpdGhSb3VuZDoKICAgICBjYXNlIEFy
aXRoRlJvdW5kOgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDliZWE2YzhhOTc2
YWM2MmYzM2RmMjQ5MWNlZDQ2NDhmYzYzYTE1NGIuLjQ1NWE4OWE3MzQwNjUwNjA4YjdlOWQ0YTFm
NGI2NDNjNjU1NmMwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcApAQCAtMzIxLDYgKzMyMSwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZml4RG91
YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgQXJpdGhSb3VuZDogeworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnQzMk9yQm9vbGVhbkZvckFyaXRobWV0aWMo
KSAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnQzMihGaXh1cFBhc3MpKSB7CisgICAgICAgICAgICAg
ICAgZml4SW50T3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
aW5zZXJ0Q2hlY2s8SW50MzJVc2U+KG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVPckJv
b2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2Fu
SWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvdyk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092
ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsKKworICAgICAgICAgICAgaWYgKGlzSW50MzJPckJvb2xl
YW5TcGVjdWxhdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiBtX2dyYXBoLnJvdW5k
U2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgRml4dXBQYXNzKSkKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0
OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCmluZGV4IGQ5MmU3YzkyOTY1ZGVlODMwYjlhZWRkYjY3ZTM4NDFjM2ZlOTI5MmIuLjY1YTYz
ZTBiM2Q0NGRkZjFjZjMyZWRiZTI3MzQwNTU2NWM4MTM0YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKQEAgLTMxNCw2ICszMTQsMTIgQEAgcHVibGljOgogICAgICAgICAgICAg
JiYgIWhhc0V4aXRTaXRlKG5lZ2F0ZSwgSW50NTJPdmVyZmxvdykKICAgICAgICAgICAgICYmIG5l
Z2F0ZS0+Y2FuU3BlY3VsYXRlSW50NTIocGFzcyk7CiAgICAgfQorCisgICAgYm9vbCByb3VuZFNo
b3VsZFNwZWN1bGF0ZUludDMyKE5vZGUqIGFyaXRoUm91bmQsIFByZWRpY3Rpb25QYXNzIHBhc3Mp
CisgICAgeworICAgICAgICBBU1NFUlQoYXJpdGhSb3VuZC0+b3AoKSA9PSBBcml0aFJvdW5kKTsK
KyAgICAgICAgcmV0dXJuIGFyaXRoUm91bmQtPmNhblNwZWN1bGF0ZUludDMyKHBhc3MpICYmICFo
YXNFeGl0U2l0ZShhcml0aFJvdW5kLT5vcmlnaW4uc2VtYW50aWMsIE92ZXJmbG93KSAmJiAhaGFz
RXhpdFNpdGUoYXJpdGhSb3VuZC0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZVplcm8pOworICAg
IH0KICAgICAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggMmQ3NzVmNTFlNWQ1OWUyNzg1Mjc5
MTQ4MWQ0NzNkZTUwMzMyYmQwOS4uMGU2MTc0MDQyNTE3YjBmZTJhMDU1NzYxNTlmYzg3ZGIwYjNk
NjdkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTg3Miw3ICs4NzIsNyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgTm9kZUZsYWdzIGFyaXRoTm9kZUZsYWdzKCkKICAgICB7CiAg
ICAgICAgIE5vZGVGbGFncyByZXN1bHQgPSBtX2ZsYWdzICYgTm9kZUFyaXRoRmxhZ3NNYXNrOwot
ICAgICAgICBpZiAob3AoKSA9PSBBcml0aE11bCB8fCBvcCgpID09IEFyaXRoRGl2IHx8IG9wKCkg
PT0gQXJpdGhNb2QgfHwgb3AoKSA9PSBBcml0aE5lZ2F0ZSB8fCBvcCgpID09IEFyaXRoUG93IHx8
IG9wKCkgPT0gRG91YmxlQXNJbnQzMikKKyAgICAgICAgaWYgKG9wKCkgPT0gQXJpdGhNdWwgfHwg
b3AoKSA9PSBBcml0aERpdiB8fCBvcCgpID09IEFyaXRoTW9kIHx8IG9wKCkgPT0gQXJpdGhOZWdh
dGUgfHwgb3AoKSA9PSBBcml0aFBvdyB8fCBvcCgpID09IEFyaXRoUm91bmQgfHwgb3AoKSA9PSBE
b3VibGVBc0ludDMyKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgcmV0dXJu
IHJlc3VsdCAmIH5Ob2RlQnl0ZWNvZGVOZWVkc05lZ1plcm87CiAgICAgfQpAQCAtMTI0Miw2ICsx
MjQyLDcgQEAgc3RydWN0IE5vZGUgewogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQogICAg
IHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgQXJpdGhSb3VuZDoKICAg
ICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAg
ICBjYXNlIEdldEJ5SWRGbHVzaDoKQEAgLTE1NDUsNiArMTU0Niw3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgY2FzZSBBcml0aE11bDoKICAgICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAg
Y2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBBcml0aFJvdW5kOgogICAgICAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgogICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA3
NWM4ODQyMzdhMDBiMTZkODcwZDI0MDE0NTkzMThkZWRjMWFlOGZjLi4yY2U3NWJjZWFiNTVkM2Nl
M2Y2OGU1NTQwNTg3Y2I2ZWE1YzI2NmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCkBAIC0xNTAsNiArMTUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKEFyaXRoTWF4LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8o
QXJpdGhGUm91bmQsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aFBvdywgTm9k
ZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoUm91bmQsIE5vZGVSZXN1bHROdW1iZXIp
IFwKICAgICBtYWNybyhBcml0aFNxcnQsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhB
cml0aFNpbiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRoQ29zLCBOb2RlUmVz
dWx0TnVtYmVyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDMxZDY2YWJlNWM4YWM3NDcw
NmYxZDJkYWQ5Mjk4MTMzZjdjODU4NjUuLjBmZjVhMzYxMzM3NTg4YTFmOTFkOTFlNTk1OGFhM2M4
MmE0YmM0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0zNDcsNyArMzQ3LDE1IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2Rl
RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwor
ICAgICAgICBjYXNlIEFyaXRoUm91bmQ6IHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyT3JCb29s
ZWFuU3BlY3VsYXRpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkgJiYgbV9ncmFwaC5yb3Vu
ZFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUsIG1fcGFzcykpCisgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCeXRlY29kZURvdWJsZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgQXJpdGhBYnM6
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0ludDMyT3JCb29sZWFuU3BlY3VsYXRpb25G
b3JBcml0aG1ldGljKGNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAppbmRleCBmNGIwNzlmODdiMDE4YzAwNTczMjZlYjA5NTE0MjYwNzg1ZTMyZWM2
Li40ZDhkNzRiMDlhNTg5NjM5YzgyOWI2NDgzOGY3ZWUyYjBlZWJmMzg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMTU0LDYgKzE1NCw3IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEFyaXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0Ogog
ICAgIGNhc2UgQXJpdGhGUm91bmQ6CisgICAgY2FzZSBBcml0aFJvdW5kOgogICAgIGNhc2UgQXJp
dGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKICAgICBjYXNlIEFyaXRoTG9nOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBlMmEyMzY5
M2MwYzlmOTQ5ZDg2MTQ2Y2QxMGEzM2EzMjg0MjI1MzVjLi42YWQ5NmZiNDA3YWQzM2EwOWVmZmZj
MGNjZTgxZjgwZGExNDdhZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzUzNSw2ICszNTM1LDMzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2RlKiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoUm91bmQoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSk7CisKKyAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBGUFJSZWcg
dmFsdWVGUFIgPSB2YWx1ZS5mcHIoKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEZQUlJl
c3VsdCByb3VuZGVkUmVzdWx0QXNEb3VibGUodGhpcyk7CisgICAgRlBSUmVnIHJlc3VsdEZQUiA9
IHJvdW5kZWRSZXN1bHRBc0RvdWJsZS5mcHIoKTsKKyAgICBjYWxsT3BlcmF0aW9uKGpzUm91bmQs
IHJlc3VsdEZQUiwgdmFsdWVGUFIpOworCisgICAgaWYgKG5vZGUtPnJlc3VsdCgpID09IE5vZGVS
ZXN1bHRJbnQzMikgeworICAgICAgICBHUFJUZW1wb3Jhcnkgcm91bmRlZFJlc3VsdEFzSW50MzIo
dGhpcyk7CisgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBGUFJS
ZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByb3VuZGVkUmVzdWx0QXNJbnQzMi5ncHIoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50
MzIocmVzdWx0RlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEZQUiwgc2hvdWxk
Q2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwgZmFpbHVyZUNhc2VzKTsKKwor
ICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEFTU0VSVChub2RlLT5yZXN1bHQoKSA9PSBOb2RlUmVzdWx0RG91YmxlKTsKKyAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdEZQUiwgbm9kZSk7CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhTcXJ0KE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDY3ZTY3M2IxYzFiNmIyMWFlNzEw
MzgzNGM5YWZiMmMwNmU3MWQ5MWQuLmI5ZTZlMGRkMjRmZGViZjBjMWNkN2QyMTRiZmNlZWNkZmZl
NTc0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKQEAgLTIxOTksNiArMjE5OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERp
dihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUFyaXRoUG93KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVBcml0aFJvdW5kKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRo
TG9nKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDb25zdGFudFN0b3JhZ2VQb2ludGVyKE5vZGUq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCmluZGV4IDIzY2YyNDRiMGM4M2M5NzE1YmU3MTE1NGViNmMyNjdlZDVhMzM4NzQu
LjFkMGRkYTc1MjM2YjkwMDFiZDhhYmExOTlhYjczZWJlNzE4YmUwODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAt
MjE3MCw2ICsyMTcwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBBcml0aFJvdW5kOgorICAgICAg
ICBjb21waWxlQXJpdGhSb3VuZChub2RlKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEFy
aXRoU2luOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDNl
NTc0ZDRmNjliMDU5MzYxNGNjN2YyYmQzMWNlYjlkNThlZWNlMzAuLmI3NzBiNTA5OTk4YTNlMGRh
ZGFlNGJiNWZiZDYwODdkNTgxYjc3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjMxMyw2ICsyMzEzLDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCisgICAgY2FzZSBBcml0aFJvdW5kOgorICAgICAgICBjb21waWxlQXJpdGhSb3VuZChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEFyaXRoU2luOiB7CiAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgRlBS
UmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAppbmRleCAwYmZkZmNjYzZkMzJhZWRiNDgwYzczODlhZGNiZTE2NWI3
N2I0ZTIzLi4yNmVjYTdlMmMzYzkwYzk0MjRlZTU4MGY2YzU1OTVlYzI3ZTYxNDYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC02Myw2ICs2
Myw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CkBA
IC04OSw2ICs5MCw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBu
b2RlKQogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKICAgICBjYXNlIEFy
aXRoUG93OgorICAgIGNhc2UgQXJpdGhSb3VuZDoKICAgICBjYXNlIEFyaXRoU3FydDoKICAgICBj
YXNlIEFyaXRoTG9nOgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCmluZGV4IDNkNjZlY2E4OGQw
NDNiYjM1NmNiOTY2N2U5ZjZlMzVhZjk4NmI4ZDMuLjRiMjhkMzU2MjVhNzMyN2MxMjljNjFhMGI3
ODU3MzBiODI5NTI2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5oCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKICNkZWZpbmUgRk9SX0VBQ0hfRlRMX0lOVFJJTlNJQyhtYWNybykg
XAorICAgIG1hY3JvKGNlaWw2NCwgImxsdm0uY2VpbC5mNjQiLCBmdW5jdGlvblR5cGUoZG91Ymxl
VHlwZSwgZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhjdGx6MzIsICJsbHZtLmN0bHouaTMyIiwg
ZnVuY3Rpb25UeXBlKGludDMyLCBpbnQzMiwgYm9vbGVhbikpIFwKICAgICBtYWNybyhhZGRXaXRo
T3ZlcmZsb3czMiwgImxsdm0uc2FkZC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShz
dHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAg
ICAgbWFjcm8oYWRkV2l0aE92ZXJmbG93NjQsICJsbHZtLnNhZGQud2l0aC5vdmVyZmxvdy5pNjQi
LCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50
NjQsIGludDY0KSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAppbmRleCA5MTUwYTQ2MGNiNTUwN2I3Yzc1NzdkMjhlZDRhMjBlZDI3YzFmODZi
Li5mZWM3NzMzOTY4YmUyZmYwYjg1Nzg5MmI3NjEyMjcyNDViYzkwYjRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcApAQCAtNDQzLDYgKzQ0
Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwOgogICAgICAgICAgICAgY29t
cGlsZURvdWJsZVJlcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG91Ymxl
QXNJbnQzMjoKKyAgICAgICAgICAgIGNvbXBpbGVEb3VibGVBc0ludDMyKCk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBWYWx1ZVJlcDoKICAgICAgICAgICAgIGNvbXBpbGVWYWx1
ZVJlcCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDUsNiArNTA4LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBBcml0aFBvdzoKICAgICAgICAgICAgIGNvbXBpbGVBcml0aFBvdygpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhSb3VuZDoKKyAgICAgICAgICAg
IGNvbXBpbGVBcml0aFJvdW5kKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cml0aFNxcnQ6CiAgICAgICAgICAgICBjb21waWxlQXJpdGhTcXJ0KCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTk3MSw2ICs5NzcsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAg
ICAKKyAgICBMVmFsdWUgY29udmVydERvdWJsZVRvSW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmZwVG9JbnQzMih2YWx1ZSk7Cisg
ICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVDb252ZXJ0ZWRUb0RvdWJsZSA9IG1fb3V0LmludFRv
RG91YmxlKGludGVnZXJWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZU5vdENvbnZlcnRpYmxl
VG9JbnRlZ2VyID0gbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgaW50ZWdl
clZhbHVlQ29udmVydGVkVG9Eb3VibGUpOworICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIEZv
cm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1ZSksIG1fbm9kZSwgdmFsdWVOb3RD
b252ZXJ0aWJsZVRvSW50ZWdlcik7CisKKyAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVa
ZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayB2YWx1
ZUlzWmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIgb24g
emVybyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKGludGVnZXJWYWx1ZSksIHVuc3Vy
ZSh2YWx1ZUlzWmVybyksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh2YWx1ZUlzWmVybywgY29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgTFZhbHVlIGRvdWJsZUJpdGNhc3RUb0ludDY0ID0gbV9vdXQu
Yml0Q2FzdCh2YWx1ZSwgbV9vdXQuaW50NjQpOworICAgICAgICAgICAgTFZhbHVlIHNpZ25CaXRT
ZXQgPSBtX291dC5sZXNzVGhhbihkb3VibGVCaXRjYXN0VG9JbnQ2NCwgbV9vdXQuY29uc3RJbnQ2
NCgwKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIEZvcm1hdHRlZFZh
bHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1ZSksIG1fbm9kZSwgc2lnbkJpdFNldCk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aW50ZWdlclZhbHVlOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZURvdWJsZUFzSW50MzIoKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IGNvbnZlcnREb3VibGVUb0ludDMy
KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIHNldEludDMyKGludGVnZXJW
YWx1ZSk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVSZXAoKQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpAQCAtMTc2MSw2ICsxNzk3
LDM0IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVBcml0
aFJvdW5kKCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHJlYWxQYXJ0SXNNb3JlVGhhbkhh
bGYgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUm91bmQgc2hvdWxkIHJvdW5kIGRvd24i
KSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJpdGhSb3VuZCBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgaW50ZWdlclZh
bHVlID0gbV9vdXQuY2VpbDY0KHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdl
clZhbHVlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGludGVnZXJWYWx1ZSk7CisKKyAgICAgICAgTFZh
bHVlIHJlYWxQYXJ0ID0gbV9vdXQuZG91YmxlU3ViKGludGVnZXJWYWx1ZSwgdmFsdWUpOworCisg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKHJl
YWxQYXJ0LCBtX291dC5jb25zdERvdWJsZSgwLjUpKSwgdW5zdXJlKHJlYWxQYXJ0SXNNb3JlVGhh
bkhhbGYpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhyZWFsUGFydElzTW9yZVRoYW5IYWxmLCBjb250aW51YXRp
b24pOworICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlUm91bmRlZERvd24gPSBtX291dC5kb3Vi
bGVTdWIoaW50ZWdlclZhbHVlLCBtX291dC5jb25zdERvdWJsZSgxKSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGludGVnZXJWYWx1ZVJvdW5kZWREb3duUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGlu
dGVnZXJWYWx1ZVJvdW5kZWREb3duKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludGVnZXJW
YWx1ZVJlc3VsdCwgaW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQpOworCisgICAgICAgIGlm
IChtX25vZGUtPnJlc3VsdCgpID09IE5vZGVSZXN1bHRJbnQzMikgeworICAgICAgICAgICAgTFZh
bHVlIGludGVnZXJWYWx1ZSA9IGNvbnZlcnREb3VibGVUb0ludDMyKHJlc3VsdCk7CisgICAgICAg
ICAgICBzZXRJbnQzMihpbnRlZ2VyVmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHNldERvdWJsZShyZXN1bHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUFyaXRoU3FydCgp
IHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZVNxcnQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkp
KSk7IH0KIAogICAgIHZvaWQgY29tcGlsZUFyaXRoTG9nKCkgeyBzZXREb3VibGUobV9vdXQuZG91
YmxlTG9nKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAppbmRleCBjZDRiMjVhMTZlZDRmMzA2NTQ5Nzg5NzQxM2EwNjVlNDg1
MTYzYmJmLi5lMmQ5NzNkM2MyMzE1MDQxM2E5OTk2MzlhMDBmOTEzZmNjYzA2Y2M1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTEzOSw2ICsxMzksMTAgQEAgcHVibGlj
OgogICAgIAogICAgIExWYWx1ZSBpbnNlcnRFbGVtZW50KExWYWx1ZSB2ZWN0b3IsIExWYWx1ZSBl
bGVtZW50LCBMVmFsdWUgaW5kZXgpIHsgcmV0dXJuIGJ1aWxkSW5zZXJ0RWxlbWVudChtX2J1aWxk
ZXIsIHZlY3RvciwgZWxlbWVudCwgaW5kZXgpOyB9CiAKKyAgICBMVmFsdWUgY2VpbDY0KExWYWx1
ZSBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGwoY2VpbDY0SW50cmluc2ljKCks
IG9wZXJhbmQpOworICAgIH0KICAgICBMVmFsdWUgY3RsejMyKExWYWx1ZSB4T3BlcmFuZCwgTFZh
bHVlIHlPcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGwoY3RsejMySW50cmluc2lj
KCksIHhPcGVyYW5kLCB5T3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggZGY3ODY0YjBjOGQ1ZDQ1MjJjYmUzN2IwNjgxMGI2MTQy
NmZkNGFkZi4uYjlkNjE5ODgyYzk2YzZhNmQyYmZhMDdiMTJjZjJkNGJiNWM1MWU2NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0FycmF5SXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCisjaW5jbHVkZSAiTWF0aENvbW1vbi5oIgogI2luY2x1
ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIlNwZWNpYWxpemVkVGh1bmtKSVQuaCIKQEAgLTY4MywxNiArNjg0LDYg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihWTSogdm0pCiAjZGVm
aW5lIFVuYXJ5RG91YmxlT3BXcmFwcGVyKGZ1bmN0aW9uKSBmdW5jdGlvbiMjV3JhcHBlcgogZW51
bSBNYXRoVGh1bmtDYWxsaW5nQ29udmVudGlvbiB7IH07CiB0eXBlZGVmIE1hdGhUaHVua0NhbGxp
bmdDb252ZW50aW9uKCpNYXRoVGh1bmspKE1hdGhUaHVua0NhbGxpbmdDb252ZW50aW9uKTsKLWV4
dGVybiAiQyIgewotCi1kb3VibGUganNSb3VuZChkb3VibGUpIFJFRkVSRU5DRURfRlJPTV9BU007
Ci1kb3VibGUganNSb3VuZChkb3VibGUgZCkKLXsKLSAgICBkb3VibGUgaW50ZWdlciA9IGNlaWwo
ZCk7Ci0gICAgcmV0dXJuIGludGVnZXIgLSAoaW50ZWdlciAtIGQgPiAwLjUpOwotfQotCi19CiAK
ICNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihHQ0MpICYmIChPUyhEQVJXSU4pIHx8IE9TKExJ
TlVYKSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aENv
bW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoQ29tbW9uLmNwcApp
bmRleCAyMGMxM2Q2MmNjZDU1ZTQ3OWVlOTVkMDc5MWI4NzU4OTBkYjA4ZjMxLi41NDIwNDY2N2Yx
YmZiM2UxNTgyZGVmZDZmNTAyYTFiYzE0YjVmYjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXRoQ29tbW9uLmNwcApAQCAtNDIwLDQgKzQyMCwxMiBAQCBkb3VibGUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25NYXRoUG93KGRvdWJsZSB4LCBkb3VibGUgeSkKICAgICByZXR1
cm4gbWF0aFBvd0ludGVybmFsKHgsIHkpOwogfQogCitleHRlcm4gIkMiIHsKK2RvdWJsZSBqc1Jv
dW5kKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgaW50ZWdlciA9IGNlaWwodmFsdWUpOwor
ICAgIHJldHVybiBpbnRlZ2VyIC0gKGludGVnZXIgLSB2YWx1ZSA+IDAuNSk7Cit9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWF0aENvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aENvbW1v
bi5oCmluZGV4IGY3YjBhZmNiYzgzNzRiNTQ2ZWI5NGU1OWVlNzcwYTQ0MTJhNzAzMGYuLjg0MGQ4
NjM1ZmY1YTAwNGU1YTU5ZmZjZTQwNzdiYmExYTYwMmQ4NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXRoQ29tbW9uLmgKQEAgLTU0LDYgKzU0LDEwIEBAIGlubGluZSBpbnQg
Y2x6MzIodWludDMyX3QgbnVtYmVyKQogI2VuZGlmCiB9CiAKK2V4dGVybiAiQyIgeworZG91Ymxl
IEpJVF9PUEVSQVRJT04ganNSb3VuZChkb3VibGUgdmFsdWUpIFJFRkVSRU5DRURfRlJPTV9BU00g
V1RGX0lOVEVSTkFMOworfQorCiB9CiAKICNlbmRpZiAvLyBNYXRoQ29tbW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKaW5kZXggOGU3ZDYzMjkyOTRi
M2MyOGE1M2IxMjIyYWY5NGIyMDE0Y2M4YWIyMy4uZDIzZTQ2YjZiZjNhMjIzMGU4MDdkNTNkNDgy
ZmNmM2NiZWExYjMzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWF0aE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9i
amVjdC5jcHAKQEAgLTI2OCw5ICsyNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
ZG91YmxlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpOwotICAgIGRvdWJs
ZSBpbnRlZ2VyID0gY2VpbChhcmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoaW50ZWdlciAtIChpbnRlZ2VyIC0gYXJnID4gMC41KSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoanNSb3VuZChleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVj
KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2ln
bihFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL21hdGgtcm91bmQtYmFzaWNzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9tYXRoLXJvdW5kLWJhc2ljcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2UzNmQwYzcwYTgy
Y2JlMWY0ZTVjMDRjYjhjOWVkMWQ0NzA4YmIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXJvdW5kLWJhc2ljcy5qcwpAQCAtMCwwICsx
LDI1NyBAQAorCitmdW5jdGlvbiBtYXRoUm91bmRPbkludGVnZXJzKHZhbHVlKQoreworICAgIHJl
dHVybiBNYXRoLnJvdW5kKHZhbHVlKTsKK30KK25vSW5saW5lKG1hdGhSb3VuZE9uSW50ZWdlcnMp
OworCitmdW5jdGlvbiBtYXRoUm91bmRPbkRvdWJsZXModmFsdWUpCit7CisgICAgcmV0dXJuIE1h
dGgucm91bmQodmFsdWUpOworfQorbm9JbmxpbmUobWF0aFJvdW5kT25Eb3VibGVzKTsKKworZnVu
Y3Rpb24gbWF0aFJvdW5kT25Cb29sZWFucyh2YWx1ZSkKK3sKKyAgICByZXR1cm4gTWF0aC5yb3Vu
ZCh2YWx1ZSk7Cit9Citub0lubGluZShtYXRoUm91bmRPbkJvb2xlYW5zKTsKKworLy8gVGhlIHRy
aXZpYWwgY2FzZXMgZmlyc3QuCitmb3IgKHZhciBpID0gMTsgaSA8IDFlNzsgKytpKSB7CisgICAg
dmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uSW50ZWdlcnMoaSk7CisgICAgaWYgKHJvdW5k
ZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZE9uSW50ZWdlcnMoIiArIGkg
KyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gbWF0aFJv
dW5kT25JbnRlZ2VycygtaSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gLWkpCisgICAgICAg
IHRocm93ICJtYXRoUm91bmRPbkludGVnZXJzKCIgKyAtaSArICIpID0gIiArIHJvdW5kZWRWYWx1
ZTsKKworICAgIHZhciBkb3VibGVMb3cgPSBpICsgMC40OworICAgIHZhciByb3VuZGVkVmFsdWUg
PSBtYXRoUm91bmRPbkRvdWJsZXMoZG91YmxlTG93KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9
PSBpKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25Eb3VibGVzKCIgKyBkb3VibGVMb3cgKyAi
KSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91YmxlSGlnaCA9IGkgKyAwLjY7Cisg
ICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uRG91Ymxlcyhkb3VibGVIaWdoKTsKKyAg
ICBpZiAocm91bmRlZFZhbHVlICE9PSBpICsgMSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZE9u
RG91YmxlcygiICsgZG91YmxlSGlnaCArICIpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZh
ciBkb3VibGVNaWQgPSBpICsgMC41OworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRP
bkRvdWJsZXMoZG91YmxlTWlkKTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSBpICsgMSkKKyAg
ICAgICAgdGhyb3cgIm1hdGhSb3VuZE9uRG91YmxlcygiICsgZG91YmxlTWlkICsgIikgPSAiICsg
cm91bmRlZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uRG91Ymxl
cygtMC42KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAtMSkKKyAgICAgICAgdGhyb3cgIm1h
dGhSb3VuZE9uRG91YmxlcygtMC42KSA9ICIgKyByb3VuZGVkVmFsdWU7Cit9CisKKy8vIFNvbWUg
bW9yZSBpbnRlcmVzdGluZyBjYXNlcywgc29tZSBvZiB0aGVtIHdlbGwgT1NSIGV4aXQgd2hlbiB0
aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytpKSB7
CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uSW50ZWdlcnMoaSk7CisgICAgaWYg
KHJvdW5kZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZE9uSW50ZWdlcnMo
IiArIGkgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVlID0g
bWF0aFJvdW5kT25JbnRlZ2VycygtaSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gLWkpCisg
ICAgICAgIHRocm93ICJtYXRoUm91bmRPbkludGVnZXJzKC0iICsgaSArICIpID0gIiArIHJvdW5k
ZWRWYWx1ZTsKKworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRPbkRvdWJsZXMoLTAu
NCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gMCkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3Vu
ZE9uRG91YmxlcygtMC40KSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZh
bHVlID0gbWF0aFJvdW5kT25Eb3VibGVzKC0wLjUpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09
IDApCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoLTAuNSkgPSAiICsgcm91bmRl
ZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uRG91YmxlcygtMCk7
CisgICAgaWYgKCEocm91bmRlZFZhbHVlID09PSAwICYmICgxL3JvdW5kZWRWYWx1ZSkgPT09IC1J
bmZpbml0eSkpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoLTApID0gIiArIHJv
dW5kZWRWYWx1ZTsKKworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRPbkRvdWJsZXMo
TmFOKTsKKyAgICBpZiAocm91bmRlZFZhbHVlID09PSByb3VuZGVkVmFsdWUpCisgICAgICAgIHRo
cm93ICJtYXRoUm91bmRPbkRvdWJsZXMoTmFOKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2
YXIgcm91bmRlZFZhbHVlID0gbWF0aFJvdW5kT25Eb3VibGVzKE51bWJlci5QT1NJVElWRV9JTkZJ
TklUWSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZ
KQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25Eb3VibGVzKE51bWJlci5QT1NJVElWRV9JTkZJ
TklUWSkgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhS
b3VuZE9uRG91YmxlcyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpOworICAgIGlmIChyb3VuZGVk
VmFsdWUgIT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkKKyAgICAgICAgdGhyb3cgIm1hdGhS
b3VuZE9uRG91YmxlcyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpID0gIiArIHJvdW5kZWRWYWx1
ZTsKKworICAgIHZhciBib29sZWFuID0gISEoaSAlIDIpOworICAgIHZhciByb3VuZGVkQm9vbGVh
biA9IG1hdGhSb3VuZE9uQm9vbGVhbnMoYm9vbGVhbik7CisgICAgaWYgKHJvdW5kZWRCb29sZWFu
ICE9IGJvb2xlYW4pCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoIiArIGJvb2xl
YW4gKyAiKSA9ICIgKyByb3VuZGVkQm9vbGVhbjsKK30KKworZnVuY3Rpb24gdXNlbGVzc01hdGhS
b3VuZCh2YWx1ZSkKK3sKKyAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZXwwKTsKK30KK25vSW5s
aW5lKHVzZWxlc3NNYXRoUm91bmQpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytpKSB7
CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IHVzZWxlc3NNYXRoUm91bmQoaSk7CisgICAgaWYgKHJv
dW5kZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgInVzZWxlc3NNYXRoUm91bmQoIiArIGkg
KyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91YmxlTG93ID0gaSArIDAuNDsK
KyAgICB2YXIgcm91bmRlZFZhbHVlID0gdXNlbGVzc01hdGhSb3VuZChkb3VibGVMb3cpOworICAg
IGlmIChyb3VuZGVkVmFsdWUgIT09IGkpCisgICAgICAgIHRocm93ICJ1c2VsZXNzTWF0aFJvdW5k
KCIgKyBkb3VibGVMb3cgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91Ymxl
SGlnaCA9IGkgKyAwLjY7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IHVzZWxlc3NNYXRoUm91bmQo
ZG91YmxlSGlnaCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cg
InVzZWxlc3NNYXRoUm91bmQoIiArIGRvdWJsZUhpZ2ggKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7
CisKKyAgICB2YXIgZG91YmxlTWlkID0gaSArIDAuNTsKKyAgICB2YXIgcm91bmRlZFZhbHVlID0g
dXNlbGVzc01hdGhSb3VuZChkb3VibGVNaWQpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09IGkp
CisgICAgICAgIHRocm93ICJ1c2VsZXNzTWF0aFJvdW5kKCIgKyBkb3VibGVNaWQgKyAiKSA9ICIg
KyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gdXNlbGVzc01hdGhSb3Vu
ZCgtMC40KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAwKQorICAgICAgICB0aHJvdyAidXNl
bGVzc01hdGhSb3VuZCgtMC40KSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRl
ZFZhbHVlID0gdXNlbGVzc01hdGhSb3VuZCgtMC41KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9
PSAwKQorICAgICAgICB0aHJvdyAidXNlbGVzc01hdGhSb3VuZCgtMC41KSA9ICIgKyByb3VuZGVk
VmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gdXNlbGVzc01hdGhSb3VuZCgtMC42KTsK
KyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAwKQorICAgICAgICB0aHJvdyAidXNlbGVzc01hdGhS
b3VuZCgtMC42KSA9ICIgKyByb3VuZGVkVmFsdWU7Cit9CisKK2Z1bmN0aW9uIG1hdGhSb3VuZFdp
dGhPdmVyZmxvdyh2YWx1ZSkKK3sKKyAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7Cit9Citu
b0lubGluZShtYXRoUm91bmRXaXRoT3ZlcmZsb3cpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFl
NzsgKytpKSB7CisgICAgdmFyIGJpZ1ZhbHVlID0gMTAwMDAwMDAwMDAwMDsKKyAgICB2YXIgcm91
bmRlZFZhbHVlID0gbWF0aFJvdW5kV2l0aE92ZXJmbG93KGJpZ1ZhbHVlKTsKKyAgICBpZiAocm91
bmRlZFZhbHVlICE9PSBiaWdWYWx1ZSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZFdpdGhPdmVy
ZmxvdygiICsgYmlnVmFsdWUgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7Cit9CisKK2Z1bmN0aW9u
IG1hdGhSb3VuZENvbnN1bWVkQXNEb3VibGUodmFsdWUpCit7CisgICAgcmV0dXJuIE1hdGgucm91
bmQodmFsdWUpICogMC41OworfQorbm9JbmxpbmUobWF0aFJvdW5kQ29uc3VtZWRBc0RvdWJsZSk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgZG91YmxlVmFsdWUg
PSBpICsgMC4xOworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRDb25zdW1lZEFzRG91
YmxlKGRvdWJsZVZhbHVlKTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAoaSAqIDAuNSkpCisg
ICAgICAgIHRocm93ICJtYXRoUm91bmRDb25zdW1lZEFzRG91YmxlKCIgKyBkb3VibGVWYWx1ZSAr
ICIpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciBkb3VibGVWYWx1ZSA9IGkgKyAwLjY7
CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZENvbnN1bWVkQXNEb3VibGUoZG91Ymxl
VmFsdWUpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09ICgoaSArIDEpICogMC41KSkKKyAgICAg
ICAgdGhyb3cgIm1hdGhSb3VuZENvbnN1bWVkQXNEb3VibGUoIiArIGRvdWJsZVZhbHVlICsgIikg
PSAiICsgcm91bmRlZFZhbHVlOworCit9CisKK2Z1bmN0aW9uIG1hdGhSb3VuZERvZXNOb3RDYXJl
QWJvdXRNaW51c1plcm8odmFsdWUpCit7CisgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpfDA7
Cit9Citub0lubGluZShtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0TWludXNaZXJvKTsKKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZhciBkb3VibGVNaWQgPSBpICsgMC41
OworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0TWludXNa
ZXJvKGRvdWJsZU1pZCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gaSArIDEpCisgICAgICAg
IHRocm93ICJtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0TWludXNaZXJvKCIgKyBkb3VibGVNaWQg
KyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7Cit9CisKKworLy8gKioqIEZ1bmN0aW9uIGFyZ3VtZW50
cy4gKioqCitmdW5jdGlvbiBtYXRoUm91bmROb0FyZ3VtZW50cygpCit7CisgICAgcmV0dXJuIE1h
dGgucm91bmQoKTsKK30KK25vSW5saW5lKG1hdGhSb3VuZE5vQXJndW1lbnRzKTsKKworZnVuY3Rp
b24gbWF0aFJvdW5kVG9vTWFueUFyZ3VtZW50cyhhLCBiLCBjKQoreworICAgIHJldHVybiBNYXRo
LnJvdW5kKGEsIGIsIGMpOworfQorbm9JbmxpbmUobWF0aFJvdW5kVG9vTWFueUFyZ3VtZW50cyk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBtYXRo
Um91bmROb0FyZ3VtZW50cygpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRo
cm93ICJtYXRoUm91bmROb0FyZ3VtZW50cygpID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVl
ID0gbWF0aFJvdW5kVG9vTWFueUFyZ3VtZW50cygyLjEsIDMsIDUpOworICAgIGlmICh2YWx1ZSAh
PT0gMikKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZFRvb01hbnlBcmd1bWVudHMoKSA9ICIgKyB2
YWx1ZTsKK30KKworCisvLyAqKiogQ29uc3RhbnQgYXMgYXJndW1lbnRzLiAqKioKK2Z1bmN0aW9u
IHRlc3RNYXRoUm91bmRPbkNvbnN0YW50cygpCit7CisgICAgdmFyIHZhbHVlID0gTWF0aC5yb3Vu
ZCgwKTsKKyAgICBpZiAodmFsdWUgIT09IDApCisgICAgICAgIHRocm93ICJNYXRoLnJvdW5kKDAp
ID0gIiArIHZhbHVlOworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoLTApOworICAgIGlmICgh
KHZhbHVlID09PSAwICYmICgxL3ZhbHVlKSA9PT0gLUluZmluaXR5KSkKKyAgICAgICAgdGhyb3cg
Ik1hdGgucm91bmQoLTApID0gIiArIHZhbHVlOworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQo
MSk7CisgICAgaWYgKHZhbHVlICE9PSAxKQorICAgICAgICB0aHJvdyAiTWF0aC5yb3VuZCgxKSA9
ICIgKyB2YWx1ZTsKKyAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKC0xKTsKKyAgICBpZiAodmFs
dWUgIT09IC0xKQorICAgICAgICB0aHJvdyAiTWF0aC5yb3VuZCgtMSkgPSAiICsgdmFsdWU7Cisg
ICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZCg0Mik7CisgICAgaWYgKHZhbHVlICE9PSA0MikKKyAg
ICAgICAgdGhyb3cgIk1hdGgucm91bmQoNDIpID0gIiArIHZhbHVlOworICAgIHZhciB2YWx1ZSA9
IE1hdGgucm91bmQoLTQyLjIpOworICAgIGlmICh2YWx1ZSAhPT0gLTQyKQorICAgICAgICB0aHJv
dyAiTWF0aC5yb3VuZCgtNDIuMikgPSAiICsgdmFsdWU7CisgICAgdmFyIHZhbHVlID0gTWF0aC5y
b3VuZChOYU4pOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJNYXRo
LnJvdW5kKE5hTikgPSAiICsgdmFsdWU7CisgICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZChOdW1i
ZXIuUE9TSVRJVkVfSU5GSU5JVEkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAg
IHRocm93ICJNYXRoLnJvdW5kKE51bWJlci5QT1NJVElWRV9JTkZJTklUSSkgPSAiICsgdmFsdWU7
CisgICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVEkpOwor
ICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJNYXRoLnJvdW5kKE51bWJl
ci5ORUdBVElWRV9JTkZJTklUSSkgPSAiICsgdmFsdWU7CisgICAgdmFyIHZhbHVlID0gTWF0aC5y
b3VuZChNYXRoLkUpOworICAgIGlmICh2YWx1ZSAhPT0gMykKKyAgICAgICAgdGhyb3cgIk1hdGgu
cm91bmQoTWF0aC5FKSA9ICIgKyB2YWx1ZTsKK30KK25vSW5saW5lKHRlc3RNYXRoUm91bmRPbkNv
bnN0YW50cyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB0ZXN0TWF0
aFJvdW5kT25Db25zdGFudHMoKTsKK30KKworCisvLyAqKiogU3RydWN0IHRyYW5zaXRpb24uICoq
KgorZnVuY3Rpb24gbWF0aFJvdW5kU3RydWN0VHJhbnNpdGlvbih2YWx1ZSkKK3sKKyAgICByZXR1
cm4gTWF0aC5yb3VuZCh2YWx1ZSk7Cit9Citub0lubGluZShtYXRoUm91bmRTdHJ1Y3RUcmFuc2l0
aW9uKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIHZhciB2YWx1ZSA9
IG1hdGhSb3VuZFN0cnVjdFRyYW5zaXRpb24oNDIuNSk7CisgICAgaWYgKHZhbHVlICE9PSA0MykK
KyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZFN0cnVjdFRyYW5zaXRpb24oNDIuNSkgPSAiICsgdmFs
dWU7Cit9CisKK01hdGgucm91bmQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50c1swXSAr
IDU7IH0KKwordmFyIHZhbHVlID0gbWF0aFJvdW5kU3RydWN0VHJhbnNpdGlvbig0Mik7CitpZiAo
dmFsdWUgIT09IDQ3KQorICAgIHRocm93ICJtYXRoUm91bmRTdHJ1Y3RUcmFuc2l0aW9uKDQyKSBh
ZnRlciB0cmFuc2l0aW9uID0gIiArIHZhbHVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252575</attachid>
            <date>2015-05-06 23:33:25 -0700</date>
            <delta_ts>2015-05-07 15:49:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144725-20150506233208.patch</filename>
            <type>text/plain</type>
            <size>40011</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzOTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OWQ3MDk5MGM1OGRjYjgyMTU5NWMyYzEyZjUzMDJjYTE5MDA0ZTA5Li5mOTg5MWE2MGY4ODJhZWI2
MGZhMDA4NmM4NzMyZjhkYTc0YmRkZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAxNS0wNS0wNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgYmFzaWMgREZHL0ZUTCBzdXBwb3J0IGZvciBNYXRo
LnJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ3MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFkZHMgdHdvIG9wdGltaXphdGlvbnMgdGFyZ2V0aW5nIE1hdGgucm91bmQoKToK
KyAgICAgICAgLUFkZCBhIERGR05vZGUgQXJpdGhSb3VuZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBp
bnRyaW5zaWMgUm91bmRJbnRyaW5zaWMuCisgICAgICAgIC1DaGFuZ2UgdGhlIE1hY3JvQXNzZW1i
bGVyIHRvIGJlIHN0cmljdGVyIG9uIGhvdyB3ZSBmYWlsIHRvIGNvbnZlcnQgYSBkb3VibGUKKyAg
ICAgICAgIHRvIGluZ2V0ZXIuIFByZXZpb3VzbHksIGFueSBudW1iZXIgdmFsdWVkIHplcm8gd291
bGQgZmFpbCwgbm93IHdlIG9ubHkKKyAgICAgICAgIGZhaWwgZm9yIC0wLgorCisgICAgICAgIFNp
bmNlIEFyaXRoUm91bmQgc3BlY3VsYXRlIGl0IHByb2R1Y2VzIGludDMyLCB0aGUgTWFjcm9Bc3Nl
bWJsZXIgYXNzZW1ibGVyCisgICAgICAgIHBhcnQgYmVjYW1lIG5lY2Vzc2FyeSBiZWNhdXNlIHpl
cm8gaXMgYSBwcmV0dHkgY29tbW9uIG91dHB1dCBvZiBNYXRoLnJvdW5kKCkKKyAgICAgICAgYW5k
IHdlIHdvdWxkIE9TUiBleGl0IGEgbG90IChhbmQgZXZlbnR1YWxseSByZWNvbXBpbGUgZm9yIGRv
dWJsZXMpLgorCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgb2YgdGhlIGlubGlu
ZSBNYXRoLnJvdW5kKCkgaXMgZXhhY3RseSB0aGUgc2FtZQorICAgICAgICBhcyB0aGUgQyBmdW5j
dGlvbiB0aGF0IGV4aXN0cyBmb3IgTWF0aC5yb3VuZCgpLiBXZSBjYW4gdmVyeSBsaWtlbHkgZG8g
YmV0dGVyCisgICAgICAgIGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQga25vd24gdG8gYmUgdmFsaWQg
YW5kIGlubGluaW5nIGFsb25lIGFscmVhZCBwcm92aWRlcworICAgICAgICBzaWduaWZpY2FudCBz
cGVlZHVwcy4KKworICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAg
KEpTQzo6WDg2QXNzZW1ibGVyOjptb3Ztc2twZF9ycik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMik6CisgICAgICAgIFdoZW4gd2UgaGF2
ZSBhIHplcm8sIGdldCB0aGUgc2lnbiBiaXQgb3V0IG9mIHRoZSBkb3VibGUgYW5kIGNoZWNrIGlm
IGlzIG9uZS4KKworICAgICAgICBJJ2xsIGxvb2sgaW50byBkb2luZyB0aGUgc2FtZSBpbXByb3Zl
bWVudCBmb3IgQVJNLgorCisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgor
ICAgICAgICAoSlNDOjp0eXBlT2ZEb3VibGVSb3VuZGluZyk6CisgICAgICAgIChKU0M6OnR5cGVP
ZkRvdWJsZUZSb3VuZCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2Vz
R0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpyb3VuZFNob3VsZFNwZWN1bGF0ZUludDMyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6bmVnYXRlU2hvdWxkU3BlY3VsYXRlTWFjaGluZUludCk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojphcml0aE5vZGVGbGFncyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRp
Y3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyaXRoTW9kZSk6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aFJvdW5kKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbnZlcnREb3VibGVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZURvdWJsZUFzSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQXJpdGhSb3VuZCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y2VpbDY0KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcDoKKyAgICAgICAgKiBydW50aW1lL01hdGhDb21tb24uY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWF0aENvbW1vbi5oOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNSb3VuZCk6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL21hdGgtcm91bmQtYmFzaWNzLmpzOiBBZGRlZC4KKyAgICAgICAgKG1hdGhSb3VuZE9uSW50
ZWdlcnMpOgorICAgICAgICAobWF0aFJvdW5kT25Eb3VibGVzKToKKyAgICAgICAgKG1hdGhSb3Vu
ZE9uQm9vbGVhbnMpOgorICAgICAgICAodXNlbGVzc01hdGhSb3VuZCk6CisgICAgICAgIChtYXRo
Um91bmRXaXRoT3ZlcmZsb3cpOgorICAgICAgICAobWF0aFJvdW5kQ29uc3VtZWRBc0RvdWJsZSk6
CisgICAgICAgIChtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0TWludXNaZXJvKToKKyAgICAgICAg
KG1hdGhSb3VuZE5vQXJndW1lbnRzKToKKyAgICAgICAgKG1hdGhSb3VuZFRvb01hbnlBcmd1bWVu
dHMpOgorICAgICAgICAodGVzdE1hdGhSb3VuZE9uQ29uc3RhbnRzKToKKyAgICAgICAgKG1hdGhS
b3VuZFN0cnVjdFRyYW5zaXRpb24pOgorICAgICAgICAoTWF0aC5yb3VuZCk6CisKIDIwMTUtMDUt
MDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBTYW5lIGNoYWlu
IGFuZCBzdHJpbmcgd2F0Y2hwb2ludHMgc2hvdWxkIGJlIHNldCBpbiBGaXh1cFBoYXNlIG9yIHRo
ZSBiYWNrZW5kIHJhdGhlciB0aGFuIFdhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAppbmRleCA0YThiZTVhZjM0ODEyOGVmM2M0MzA2ZjRmZGNjMjgwMDNjNDdiYmM5Li5i
M2I1MDc0OGE5NmM5OGIzYzRlODYyZTcwOTQ2NmM1YWEwNTVkNTI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oCkBAIC05MjEsOCArOTIxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuY3Z0
dHNkMnNpX3JyKHNyYywgZGVzdCk7CiAKICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyB6ZXJv
LCBpdCBtaWdodCBoYXZlIGJlZW4gLTAuMCwgYW5kIHRoZSBkb3VibGUgY29tcGFyaXNvbiB3b24n
dCBjYXRjaCB0aGlzIQorI2lmIENQVShYODZfNjQpCisgICAgICAgIGlmIChuZWdaZXJvQ2hlY2sp
IHsKKyAgICAgICAgICAgIEp1bXAgdmFsdWVJc05vblplcm8gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Ztc2twZF9ycihzcmMsIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBzY3JhdGNoUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMigxKSkpOworICAgICAgICAg
ICAgdmFsdWVJc05vblplcm8ubGluayh0aGlzKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAg
aWYgKG5lZ1plcm9DaGVjaykKICAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNo
VGVzdDMyKFplcm8sIGRlc3QpKTsKKyNlbmRpZgogCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIGlu
dGVnZXIgcmVzdWx0IGJhY2sgdG8gZmxvYXQgJiBjb21wYXJlIHRvIHRoZSBvcmlnaW5hbCB2YWx1
ZSAtIGlmIG5vdCBlcXVhbCBvciB1bm9yZGVyZWQgKE5hTikgdGhlbiBqdW1wLgogICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShkZXN0LCBmcFRlbXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKaW5kZXggYjg4ZTNjM2ZiNzhhZWRmNjU5NWE4
MDMxMzAxZGRmY2ZlODY4MWI1Mi4uY2UwNzMwOThhOTc4ZDJiMDg3Nzk5OWQ1MDYxYmM4Mzc3NTE2
OTQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCkBAIC0yNTMsNiArMjUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX0NWVFNTMlNEX1Zz
ZFdzZCA9IDB4NUEsCiAgICAgICAgIE9QMl9TVUJTRF9Wc2RXc2QgICAgPSAweDVDLAogICAgICAg
ICBPUDJfRElWU0RfVnNkV3NkICAgID0gMHg1RSwKKyAgICAgICAgT1AyX01PVk1TS1BEX1ZkRWQg
ICA9IDB4NTAsCiAgICAgICAgIE9QMl9TUVJUU0RfVnNkV3NkICAgPSAweDUxLAogICAgICAgICBP
UDJfQU5ETlBEX1ZwZFdwZCAgID0gMHg1NSwKICAgICAgICAgT1AyX1hPUlBEX1ZwZFdwZCAgICA9
IDB4NTcsCkBAIC0xODA0LDYgKzE4MDUsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX01PVkRfVmRFZCwgKFJlZ2lzdGVySUQpZHN0LCBzcmMpOwogICAgIH0K
IAorICAgIHZvaWQgbW92bXNrcGRfcnIoWE1NUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9TU0VfNjYpOworICAgICAg
ICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfTU9WTVNLUERfVmRFZCwgZHN0LCAoUmVnaXN0
ZXJJRClzcmMpOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBtb3ZxX3JyKFhN
TVJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAppbmRleCA1ZjQ0ZjE0YzEz
M2VhYTUwY2YyY2IyNTM4MWQ4Mzc0NDA3YzkwZGM0Li42OGE1ZDk1Y2MxOTU4MDlhZTMxZTUwNjZj
Y2U0MTM4NjhhODc3NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTUwNyw3ICs1MDcsNyBAQCBTcGVjdWxhdGVkVHlwZSB0
eXBlT2ZEb3VibGVBYnMoU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgcmV0dXJuIHR5cGVPZkRv
dWJsZU5lZ2F0aW9uKHZhbHVlKTsKIH0KIAotU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlRlJv
dW5kKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQorU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUm91
bmRpbmcoU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgLy8gV2UgbWlnaHQgbG9zZSBiaXRz
LCB3aGljaCBsZWFkcyB0byBhIE5hTiBiZWluZyBwdXJpZmllZC4KICAgICBpZiAodmFsdWUgJiBT
cGVjRG91YmxlSW1wdXJlTmFOKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuaAppbmRleCBiNjBlMzgyNjM3ZDcxZGUxNDBjNDAxZjUxYmVmMzllM2Vm
NGNiMDkyLi4yODgyMzM3OWRkZDQ1Y2JhNDA4NTgxMzcwMDBiZmE1MzkxODc0ZTkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaApAQCAtNDIy
LDcgKzQyMiw3IEBAIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZVF1b3RpZW50KFNwZWN1bGF0
ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CiBTcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVNaW5N
YXgoU3BlY3VsYXRlZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0ZWRUeXBlIHR5cGVP
ZkRvdWJsZU5lZ2F0aW9uKFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRv
dWJsZUFicyhTcGVjdWxhdGVkVHlwZSk7Ci1TcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVGUm91
bmQoU3BlY3VsYXRlZFR5cGUpOworU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUm91bmRpbmco
U3BlY3VsYXRlZFR5cGUpOwogU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUG93KFNwZWN1bGF0
ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CiAKIC8vIFRoaXMgY29uc2VydmF0aXZlbHkgbW9kZWxz
IHRoZSBiZWhhdmlvciBvZiBhcmJpdHJhcnkgZG91YmxlIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKaW5kZXggNTNjODQ1ZjU2ZWI0MDQwODUzZjQxNzIxMjAwZDU1NTQwMThhOTc5MS4uOWJi
ZTg3MzI1NGM1OWI5NzJkMmFhYTIwMWMwNzljM2MyOTgzM2EwOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aApAQCAtNzYxLDYgKzc2MSwxOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91YmxlUG93KGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIGNhc2UgQXJpdGhSb3VuZDogeworICAgICAgICBKU1ZhbHVlIG9w
ZXJhbmQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAob3Bl
cmFuZCAmJiBvcGVyYW5kLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIGpzTnVtYmVyKGpzUm91bmQob3BlcmFuZC5hc051bWJlcigpKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihub2RlLT5hcml0
aFJvdW5kaW5nTW9kZSgpKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
dHlwZU9mRG91YmxlUm91bmRpbmcoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7
CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgp
OwpAQCAtNzc4LDcgKzc5MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihzdGF0aWNfY2FzdDxmbG9hdD4oY2hp
bGQuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlT2ZEb3VibGVGUm91bmQoZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlT2ZE
b3VibGVSb3VuZGluZyhmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJpdGhNb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRo
TW9kZS5oCmluZGV4IDA2NGYwNjRlOWNkZmZjZTQyZWIxODdkM2U4ODlhMjFjMjE2NTcwNjguLjRl
MDlhYzNlOTNhYjdmNjZhMzlkZWE0YjgzODQ2MjE1YWFhYTIwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaApAQCAtNDAsNiArNDAsMTQgQEAgZW51bSBNb2RlIHsK
ICAgICBDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvLCAvLyBDaGVjayBmb3IgYm90aCBvdmVy
ZmxvdyBhbmQgbmVnYXRpdmUgemVyby4KICAgICBEb092ZXJmbG93IC8vIFVwLWNvbnZlcnQgdG8g
dGhlIHNtYWxsZXN0IHR5cGUgdGhhdCBzb3VuZGx5IHJlcHJlc2VudHMgYWxsIHBvc3NpYmxlIHJl
c3VsdHMgYWZ0ZXIgaW5wdXQgdHlwZSBzcGVjdWxhdGlvbi4KIH07CisKKy8vIERlZmluZSB0aGUg
dHlwZSBvZiBvcGVyYXRpb24gdGhlIHJvdW5kaW5nIG9wZXJhdGlvbiB3aWxsIHBlcmZvcm0uCitl
bnVtIGNsYXNzIFJvdW5kaW5nTW9kZSB7CisgICAgSW50MzIsIC8vIFRoZSByb3VuZCBvcGVyYXRp
b24gcHJvZHVjZXMgYSBpbnRlZ2VyIGFuZCAtMCBpcyBjb25zaWRlcmVkIGFzIDAuCisgICAgSW50
MzJXaXRoTmVnYXRpdmVaZXJvQ2hlY2ssIC8vIFRoZSByb3VuZCBvcGVyYXRpb24gcHJvZHVjZXMg
YSBpbnRlZ2VyIGFuZCBjaGVja3MgZm9yIC0wLgorICAgIERvdWJsZSAvLyBUaGUgcm91bmQgb3Bl
cmF0aW9uIHByb2R1Y2UgYSBkb3VibGUuIFRoZSByZXN1bHQgY2FuIGJlIC0wLCBOYU4gb3IgKCsv
LSlJbmZpbml0eS4KK307CisKIH0gLy8gbmFtZXNwYWNlIEFyaXRoCiAKIGlubGluZSBib29sIGRv
ZXNPdmVyZmxvdyhBcml0aDo6TW9kZSBtb2RlKQpAQCAtMTIyLDYgKzEzMCwxNiBAQCBpbmxpbmUg
Ym9vbCBzdWJzdW1lcyhBcml0aDo6TW9kZSBlYXJsaWVyLCBBcml0aDo6TW9kZSBsYXRlcikKICAg
ICB9CiB9CiAKK2lubGluZSBib29sIHByb2R1Y2VzSW50ZWdlcihBcml0aDo6Um91bmRpbmdNb2Rl
IG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0gQXJpdGg6OlJvdW5kaW5nTW9kZTo6SW50MzJX
aXRoTmVnYXRpdmVaZXJvQ2hlY2sgfHwgbW9kZSA9PSBBcml0aDo6Um91bmRpbmdNb2RlOjpJbnQz
MjsKK30KKworaW5saW5lIGJvb2wgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8oQXJpdGg6OlJvdW5k
aW5nTW9kZSBtb2RlKQoreworICAgIHJldHVybiBtb2RlID09IEFyaXRoOjpSb3VuZGluZ01vZGU6
OkludDMyV2l0aE5lZ2F0aXZlWmVyb0NoZWNrOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCA0YzZiYmRkMmZmNjNkZjBjNTBkODk4ODg2NTQ1Y2Yx
M2ZmN2FlZmMyLi5hYmM1MWQ0NmEwNTE5N2RmNDEzYzNiMzZkZjE2OTZkMzliY2NhYTAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAt
MjA0NCw3ICsyMDQ0LDIxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhp
bnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0KKyAgICBjYXNlIFJvdW5kSW50cmluc2ljOiB7Cisg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7CisgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CisgICAgICAgICAgICBOb2RlKiBvcGVyYW5kID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBOb2RlKiByb3VuZE5vZGUgPSBh
ZGRUb0dyYXBoKEFyaXRoUm91bmQsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBvcGVy
YW5kKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJv
dW5kTm9kZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogICAgIGNhc2UgSU11bEludHJpbnNpYzogewogICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggNjBh
ODk5NDgzYjA1YTg5M2ZkNmYzODViNDIzOTQ0Y2ExZDU2OWVkYy4uMzUwYjIwZGMyODZkYmY5NDFk
ZGEwNWQ3ODBiYWQxMGU4Zjk0NWQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKQEAgLTEzNCw2ICsxMzQsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQog
ICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBBcml0aEZS
b3VuZDoKKyAgICBjYXNlIEFyaXRoUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNl
IEFyaXRoQ29zOgogICAgIGNhc2UgQXJpdGhMb2c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAKaW5kZXggYTllMzBhY2I0YjBhM2U0NmQxOWFjMjhjOTMxNjcxMGUwZGVhYzA0
NS4uMTExN2U3YWI0MzJiYTYwZWEwNzNmYTBhZmU5ODE5YTI2ZjgxMTM0OCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtODMsNiArODMsNyBAQCBib29sIGRvZXNH
QyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBcml0aE1heDoKICAgICBjYXNl
IEFyaXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgIGNhc2UgQXJpdGhSb3VuZDoKICAg
ICBjYXNlIEFyaXRoRlJvdW5kOgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENv
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDdh
YjFiMTYzMmFiMTJkODZmNDIyYjVhODkzNzVkZjBhMGRkYmUxMjMuLmVlYWQzZmEzODFjMmYxY2M0
ZDNlNmY5MGQxNzZiMTY1NGIwZjI3MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcApAQCAtMzIyLDYgKzMyMiwyOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZml4RG91YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJpdGhSb3VuZDogeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnQzMk9yQm9vbGVhbkZvckFy
aXRobWV0aWMoKSAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnQzMihGaXh1cFBhc3MpKSB7CisgICAg
ICAgICAgICAgICAgZml4SW50T3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2s8SW50MzJVc2U+KG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhE
b3VibGVPckJvb2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICAgICAgaWYgKGlz
SW50MzJPckJvb2xlYW5TcGVjdWxhdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiBt
X2dyYXBoLnJvdW5kU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgRml4dXBQYXNzKSkgeworICAg
ICAgICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOworICAgICAgICAg
ICAgICAgIGlmIChieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVG
bGFncygpKSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhSb3VuZGluZ01vZGUo
QXJpdGg6OlJvdW5kaW5nTW9kZTo6SW50MzIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhSb3VuZGluZ01vZGUoQXJpdGg6OlJvdW5kaW5n
TW9kZTo6SW50MzJXaXRoTmVnYXRpdmVaZXJvQ2hlY2spOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERvdWJsZSk7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhSb3VuZGluZ01vZGUoQXJpdGg6OlJvdW5kaW5nTW9k
ZTo6RG91YmxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgIGNhc2UgQXJp
dGhGUm91bmQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggZDkyZTdjOTI5
NjVkZWU4MzBiOWFlZGRiNjdlMzg0MWMzZmU5MjkyYi4uNjVhNjNlMGIzZDQ0ZGRmMWNmMzJlZGJl
MjczNDA1NTY1YzgxMzRjNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApAQCAt
MzE0LDYgKzMxNCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiAhaGFzRXhpdFNpdGUobmVn
YXRlLCBJbnQ1Mk92ZXJmbG93KQogICAgICAgICAgICAgJiYgbmVnYXRlLT5jYW5TcGVjdWxhdGVJ
bnQ1MihwYXNzKTsKICAgICB9CisKKyAgICBib29sIHJvdW5kU2hvdWxkU3BlY3VsYXRlSW50MzIo
Tm9kZSogYXJpdGhSb3VuZCwgUHJlZGljdGlvblBhc3MgcGFzcykKKyAgICB7CisgICAgICAgIEFT
U0VSVChhcml0aFJvdW5kLT5vcCgpID09IEFyaXRoUm91bmQpOworICAgICAgICByZXR1cm4gYXJp
dGhSb3VuZC0+Y2FuU3BlY3VsYXRlSW50MzIocGFzcykgJiYgIWhhc0V4aXRTaXRlKGFyaXRoUm91
bmQtPm9yaWdpbi5zZW1hbnRpYywgT3ZlcmZsb3cpICYmICFoYXNFeGl0U2l0ZShhcml0aFJvdW5k
LT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlWmVybyk7CisgICAgfQogICAgIAogICAgIHN0YXRp
YyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAppbmRleCAyZDc3NWY1MWU1ZDU5ZTI3ODUyNzkxNDgxZDQ3M2RlNTAzMzJiZDA5
Li4wYTQyYzRhMTBkMzhjNGViYTA2NDI2OWZkMzk0ZWI3MWY0ZGVkZDg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaApAQCAtODcyLDcgKzg3Miw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICBOb2RlRmxhZ3MgYXJpdGhOb2RlRmxhZ3MoKQogICAgIHsKICAgICAgICAgTm9kZUZsYWdzIHJl
c3VsdCA9IG1fZmxhZ3MgJiBOb2RlQXJpdGhGbGFnc01hc2s7Ci0gICAgICAgIGlmIChvcCgpID09
IEFyaXRoTXVsIHx8IG9wKCkgPT0gQXJpdGhEaXYgfHwgb3AoKSA9PSBBcml0aE1vZCB8fCBvcCgp
ID09IEFyaXRoTmVnYXRlIHx8IG9wKCkgPT0gQXJpdGhQb3cgfHwgb3AoKSA9PSBEb3VibGVBc0lu
dDMyKQorICAgICAgICBpZiAob3AoKSA9PSBBcml0aE11bCB8fCBvcCgpID09IEFyaXRoRGl2IHx8
IG9wKCkgPT0gQXJpdGhNb2QgfHwgb3AoKSA9PSBBcml0aE5lZ2F0ZSB8fCBvcCgpID09IEFyaXRo
UG93IHx8IG9wKCkgPT0gQXJpdGhSb3VuZCB8fCBvcCgpID09IERvdWJsZUFzSW50MzIpCiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gcmVzdWx0ICYgfk5vZGVCeXRl
Y29kZU5lZWRzTmVnWmVybzsKICAgICB9CkBAIC0xMjQyLDYgKzEyNDIsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgYm9vbCBoYXNIZWFwUHJlZGljdGlvbigpCiAgICAgewogICAgICAgICBzd2l0Y2gg
KG9wKCkpIHsKKyAgICAgICAgY2FzZSBBcml0aFJvdW5kOgogICAgICAgICBjYXNlIEdldERpcmVj
dFBuYW1lOgogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNo
OgpAQCAtMTU2Myw2ICsxNTY0LDIzIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIG1f
b3BJbmZvID0gbW9kZTsKICAgICB9CisKKyAgICBib29sIGhhc0FyaXRoUm91bmRpbmdNb2RlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IEFyaXRoUm91bmQ7CisgICAgfQorCisgICAg
QXJpdGg6OlJvdW5kaW5nTW9kZSBhcml0aFJvdW5kaW5nTW9kZSgpCisgICAgeworICAgICAgICBB
U1NFUlQoaGFzQXJpdGhSb3VuZGluZ01vZGUoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxBcml0aDo6Um91bmRpbmdNb2RlPihtX29wSW5mbyk7CisgICAgfQorCisgICAgdm9pZCBzZXRB
cml0aFJvdW5kaW5nTW9kZShBcml0aDo6Um91bmRpbmdNb2RlIG1vZGUpCisgICAgeworICAgICAg
ICBBU1NFUlQoaGFzQXJpdGhSb3VuZGluZ01vZGUoKSk7CisgICAgICAgIG1fb3BJbmZvID0gc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihtb2RlKTsKKyAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNWaXJ0
dWFsUmVnaXN0ZXIoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAppbmRleCA3NWM4ODQyMzdhMDBiMTZkODcwZDI0MDE0NTkzMThkZWRjMWFlOGZjLi4yY2U3NWJj
ZWFiNTVkM2NlM2Y2OGU1NTQwNTg3Y2I2ZWE1YzI2NmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCkBAIC0xNTAsNiArMTUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKEFyaXRoTWF4LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAg
ICAgbWFjcm8oQXJpdGhGUm91bmQsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0
aFBvdywgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoUm91bmQsIE5vZGVSZXN1
bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aFNxcnQsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAg
ICBtYWNybyhBcml0aFNpbiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRoQ29z
LCBOb2RlUmVzdWx0TnVtYmVyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDMxZDY2YWJl
NWM4YWM3NDcwNmYxZDJkYWQ5Mjk4MTMzZjdjODU4NjUuLjBmZjVhMzYxMzM3NTg4YTFmOTFkOTFl
NTk1OGFhM2M4MmE0YmM0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0zNDcsNyArMzQ3
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y0J5dGVjb2RlRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
ICAgICAKKworICAgICAgICBjYXNlIEFyaXRoUm91bmQ6IHsKKyAgICAgICAgICAgIGlmIChpc0lu
dDMyT3JCb29sZWFuU3BlY3VsYXRpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkgJiYgbV9n
cmFwaC5yb3VuZFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUsIG1fcGFzcykpCisgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCeXRlY29k
ZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ug
QXJpdGhBYnM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNoaWxkID0gbm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0ludDMyT3JCb29sZWFuU3Bl
Y3VsYXRpb25Gb3JBcml0aG1ldGljKGNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCBmNGIwNzlmODdiMDE4YzAwNTczMjZlYjA5NTE0MjYw
Nzg1ZTMyZWM2Li40ZDhkNzRiMDlhNTg5NjM5YzgyOWI2NDgzOGY3ZWUyYjBlZWJmMzg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMTU0LDYg
KzE1NCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEFyaXRoUG93OgogICAgIGNhc2UgQXJp
dGhTcXJ0OgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CisgICAgY2FzZSBBcml0aFJvdW5kOgogICAg
IGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKICAgICBjYXNlIEFyaXRoTG9nOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRl
eCAzNmQ5YmYwOWRmNjAxNmM4ZjU4NWFiZWJlMjkzZGU2NmRmYjA4MjcxLi5mYTM3YTcxMTQyZTI4
NTlmNWVjZTQ3NGI1MDZmYTMxYjA2YzlkMTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzU0NCw2ICszNTQ0LDMxIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2RlKiBub2RlKQogICAgIH0KIH0KIAor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoUm91bmQoTm9kZSogbm9kZSkKK3sKKyAg
ICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSk7CisKKyAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5mcHIoKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgIEZQUlJlc3VsdCByb3VuZGVkUmVzdWx0QXNEb3VibGUodGhpcyk7CisgICAgRlBSUmVnIHJl
c3VsdEZQUiA9IHJvdW5kZWRSZXN1bHRBc0RvdWJsZS5mcHIoKTsKKyAgICBjYWxsT3BlcmF0aW9u
KGpzUm91bmQsIHJlc3VsdEZQUiwgdmFsdWVGUFIpOworCisgICAgaWYgKHByb2R1Y2VzSW50ZWdl
cihub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkgeworICAgICAgICBHUFJUZW1wb3Jhcnkgcm91
bmRlZFJlc3VsdEFzSW50MzIodGhpcyk7CisgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOworICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByb3VuZGVkUmVzdWx0QXNJbnQzMi5ncHIoKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgbV9qaXQuYnJhbmNo
Q29udmVydERvdWJsZVRvSW50MzIocmVzdWx0RlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywg
c2NyYXRjaEZQUiwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhSb3VuZGluZ01v
ZGUoKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygp
LCBub2RlLCBmYWlsdXJlQ2FzZXMpOworCisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgfSBlbHNlCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG5vZGUp
OworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTcXJ0KE5vZGUqIG5vZGUp
CiB7CiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4
IDY3ZTY3M2IxYzFiNmIyMWFlNzEwMzgzNGM5YWZiMmMwNmU3MWQ5MWQuLmI5ZTZlMGRkMjRmZGVi
ZjBjMWNkN2QyMTRiZmNlZWNkZmZlNTc0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTIxOTksNiArMjE5OSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2Qo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoUG93KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVBcml0aFJvdW5kKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUFyaXRoTG9nKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDb25zdGFu
dFN0b3JhZ2VQb2ludGVyKE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDIzY2YyNDRiMGM4M2M5NzE1YmU3
MTE1NGViNmMyNjdlZDVhMzM4NzQuLjFkMGRkYTc1MjM2YjkwMDFiZDhhYmExOTlhYjczZWJlNzE4
YmUwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcApAQCAtMjE3MCw2ICsyMTcwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBBcml0aFJvdW5kOgorICAgICAgICBjb21waWxlQXJpdGhSb3VuZChub2RlKTsKKyAgICAgICAg
YnJlYWs7CisKICAgICBjYXNlIEFyaXRoU2luOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgRlBSUmVnIG9wMUZQUiA9
IG9wMS5mcHIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCmluZGV4IDNlNTc0ZDRmNjliMDU5MzYxNGNjN2YyYmQzMWNlYjlkNThlZWNl
MzAuLmI3NzBiNTA5OTk4YTNlMGRhZGFlNGJiNWZiZDYwODdkNTgxYjc3NDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjMx
Myw2ICsyMzEzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBBcml0aFJvdW5kOgorICAgICAgICBj
b21waWxlQXJpdGhSb3VuZChub2RlKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEFyaXRo
U2luOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCAwYmZkZmNjYzZkMzJh
ZWRiNDgwYzczODlhZGNiZTE2NWI3N2I0ZTIzLi4yNmVjYTdlMmMzYzkwYzk0MjRlZTU4MGY2YzU1
OTVlYzI3ZTYxNDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCkBAIC02Myw2ICs2Myw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlm
dDoKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAg
ICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBHZXRCdXR0ZXJmbHk6CkBAIC04OSw2ICs5MCw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBB
cml0aENvczoKICAgICBjYXNlIEFyaXRoUG93OgorICAgIGNhc2UgQXJpdGhSb3VuZDoKICAgICBj
YXNlIEFyaXRoU3FydDoKICAgICBjYXNlIEFyaXRoTG9nOgogICAgIGNhc2UgQXJpdGhGUm91bmQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9z
aXRvcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9y
eS5oCmluZGV4IDNkNjZlY2E4OGQwNDNiYjM1NmNiOTY2N2U5ZjZlMzVhZjk4NmI4ZDMuLjRiMjhk
MzU2MjVhNzMyN2MxMjljNjFhMGI3ODU3MzBiODI5NTI2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCkBAIC0zNSw2ICszNSw3
IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKICNkZWZpbmUgRk9SX0VBQ0hf
RlRMX0lOVFJJTlNJQyhtYWNybykgXAorICAgIG1hY3JvKGNlaWw2NCwgImxsdm0uY2VpbC5mNjQi
LCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhjdGx6
MzIsICJsbHZtLmN0bHouaTMyIiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnQzMiwgYm9vbGVhbikp
IFwKICAgICBtYWNybyhhZGRXaXRoT3ZlcmZsb3czMiwgImxsdm0uc2FkZC53aXRoLm92ZXJmbG93
LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4p
LCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oYWRkV2l0aE92ZXJmbG93NjQsICJsbHZtLnNh
ZGQud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQs
IGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAppbmRleCA0ZjVhM2E4NjYxYzNmOTI1Njgx
YjY5MjE5ZjQyMzk2ODI4MDA5ZWQyLi5iMTAyYTdhMzlhY2U3ZDhjOWYxYTc5YzBmZmMyZmNmODVk
YjM1ZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcApAQCAtNDQzLDYgKzQ0Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRG91Ymxl
UmVwOgogICAgICAgICAgICAgY29tcGlsZURvdWJsZVJlcCgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAgICAgICAgICAgIGNvbXBpbGVEb3VibGVB
c0ludDMyKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWYWx1ZVJlcDoKICAg
ICAgICAgICAgIGNvbXBpbGVWYWx1ZVJlcCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDUs
NiArNTA4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aFBvdzoKICAgICAgICAgICAg
IGNvbXBpbGVBcml0aFBvdygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJp
dGhSb3VuZDoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aFJvdW5kKCk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgICAgICBjb21waWxlQXJpdGhT
cXJ0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTk3MSw2ICs5NzcsMzYgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBMVmFsdWUgY29udmVydERvdWJsZVRvSW50MzIo
TFZhbHVlIHZhbHVlLCBib29sIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmZwVG9JbnQzMih2YWx1ZSk7CisgICAgICAg
IExWYWx1ZSBpbnRlZ2VyVmFsdWVDb252ZXJ0ZWRUb0RvdWJsZSA9IG1fb3V0LmludFRvRG91Ymxl
KGludGVnZXJWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZU5vdENvbnZlcnRpYmxlVG9JbnRl
Z2VyID0gbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgaW50ZWdlclZhbHVl
Q29udmVydGVkVG9Eb3VibGUpOworICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIEZvcm1hdHRl
ZFZhbHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1ZSksIG1fbm9kZSwgdmFsdWVOb3RDb252ZXJ0
aWJsZVRvSW50ZWdlcik7CisKKyAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKSB7
CisgICAgICAgICAgICBMQmFzaWNCbG9jayB2YWx1ZUlzWmVybyA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQ29udmVydERvdWJsZVRvSW50MzIgb24gemVybyIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJs
ZVRvSW50MzIgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmlzWmVybzMyKGludGVnZXJWYWx1ZSksIHVuc3VyZSh2YWx1ZUlzWmVybyksIHVuc3VyZShjb250
aW51YXRpb24pKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyh2YWx1ZUlzWmVybywgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgTFZhbHVl
IGRvdWJsZUJpdGNhc3RUb0ludDY0ID0gbV9vdXQuYml0Q2FzdCh2YWx1ZSwgbV9vdXQuaW50NjQp
OworICAgICAgICAgICAgTFZhbHVlIHNpZ25CaXRTZXQgPSBtX291dC5sZXNzVGhhbihkb3VibGVC
aXRjYXN0VG9JbnQ2NCwgbV9vdXQuY29uc3RJbnQ2NCgwKSk7CisKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShOZWdhdGl2ZVplcm8sIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1
ZSksIG1fbm9kZSwgc2lnbkJpdFNldCk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZWdlclZhbHVlOworICAgIH0KKworICAg
IHZvaWQgY29tcGlsZURvdWJsZUFzSW50MzIoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGludGVn
ZXJWYWx1ZSA9IGNvbnZlcnREb3VibGVUb0ludDMyKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpOworICAgICAg
ICBzZXRJbnQzMihpbnRlZ2VyVmFsdWUpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZVZhbHVl
UmVwKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKQEAgLTE3NjEsNiArMTc5NywzNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgdm9pZCBjb21waWxlQXJpdGhSb3VuZCgpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBy
ZWFsUGFydElzTW9yZVRoYW5IYWxmID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFJvdW5k
IHNob3VsZCByb3VuZCBkb3duIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUm91bmQgY29udGludWF0aW9uIikpOworCisg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmNlaWw2NCh2YWx1ZSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGludGVnZXJWYWx1ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbnRlZ2VyVmFs
dWUpOworCisgICAgICAgIExWYWx1ZSByZWFsUGFydCA9IG1fb3V0LmRvdWJsZVN1YihpbnRlZ2Vy
VmFsdWUsIHZhbHVlKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZG91YmxlR3JlYXRl
clRoYW5PclVub3JkZXJlZChyZWFsUGFydCwgbV9vdXQuY29uc3REb3VibGUoMC41KSksIHVuc3Vy
ZShyZWFsUGFydElzTW9yZVRoYW5IYWxmKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ocmVhbFBhcnRJc01vcmVU
aGFuSGFsZiwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZVJvdW5k
ZWREb3duID0gbV9vdXQuZG91YmxlU3ViKGludGVnZXJWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUo
MSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihpbnRlZ2VyVmFsdWVSb3VuZGVkRG93bik7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5k
b3VibGVUeXBlLCBpbnRlZ2VyVmFsdWVSZXN1bHQsIGludGVnZXJWYWx1ZVJvdW5kZWREb3duUmVz
dWx0KTsKKworICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGlu
Z01vZGUoKSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBjb252ZXJ0RG91
YmxlVG9JbnQzMihyZXN1bHQsIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhS
b3VuZGluZ01vZGUoKSkpOworICAgICAgICAgICAgc2V0SW50MzIoaW50ZWdlclZhbHVlKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAgICB9CisKICAg
ICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoKSB7IHNldERvdWJsZShtX291dC5kb3VibGVTcXJ0KGxv
d0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aExv
ZygpIHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUxvZyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSkpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggY2Q0YjI1YTE2
ZWQ0ZjMwNjU0OTc4OTc0MTNhMDY1ZTQ4NTE2M2JiZi4uZTJkOTczZDNjMjMxNTA0MTNhOTk5NjM5
YTAwZjkxM2ZjY2MwNmNjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBA
IC0xMzksNiArMTM5LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBMVmFsdWUgaW5zZXJ0RWxlbWVu
dChMVmFsdWUgdmVjdG9yLCBMVmFsdWUgZWxlbWVudCwgTFZhbHVlIGluZGV4KSB7IHJldHVybiBi
dWlsZEluc2VydEVsZW1lbnQobV9idWlsZGVyLCB2ZWN0b3IsIGVsZW1lbnQsIGluZGV4KTsgfQog
CisgICAgTFZhbHVlIGNlaWw2NChMVmFsdWUgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBjYWxsKGNlaWw2NEludHJpbnNpYygpLCBvcGVyYW5kKTsKKyAgICB9CiAgICAgTFZhbHVlIGN0
bHozMihMVmFsdWUgeE9wZXJhbmQsIExWYWx1ZSB5T3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBjYWxsKGN0bHozMkludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IGRmNzg2NGIw
YzhkNWQ0NTIyY2JlMzdiMDY4MTBiNjE0MjZmZDRhZGYuLmI5ZDYxOTg4MmM5NmM2YTZkMmJmYTA3
YjEyY2YyZDRiYjVjNTFlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAj
aW5jbHVkZSAiSlNBcnJheUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgorI2luY2x1
ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTcGVjaWFsaXplZFRodW5r
SklULmgiCkBAIC02ODMsMTYgKzY4NCw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogI2RlZmluZSBVbmFyeURvdWJsZU9wV3JhcHBlcihmdW5jdGlv
bikgZnVuY3Rpb24jI1dyYXBwZXIKIGVudW0gTWF0aFRodW5rQ2FsbGluZ0NvbnZlbnRpb24geyB9
OwogdHlwZWRlZiBNYXRoVGh1bmtDYWxsaW5nQ29udmVudGlvbigqTWF0aFRodW5rKShNYXRoVGh1
bmtDYWxsaW5nQ29udmVudGlvbik7Ci1leHRlcm4gIkMiIHsKLQotZG91YmxlIGpzUm91bmQoZG91
YmxlKSBSRUZFUkVOQ0VEX0ZST01fQVNNOwotZG91YmxlIGpzUm91bmQoZG91YmxlIGQpCi17Ci0g
ICAgZG91YmxlIGludGVnZXIgPSBjZWlsKGQpOwotICAgIHJldHVybiBpbnRlZ2VyIC0gKGludGVn
ZXIgLSBkID4gMC41KTsKLX0KLQotfQogCiAjaWYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoR0ND
KSAmJiAoT1MoREFSV0lOKSB8fCBPUyhMSU5VWCkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hdGhDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aENvbW1vbi5jcHAKaW5kZXggMjBjMTNkNjJjY2Q1NWU0NzllZTk1ZDA3OTFi
ODc1ODkwZGIwOGYzMS4uNTQyMDQ2NjdmMWJmYjNlMTU4MmRlZmQ2ZjUwMmExYmMxNGI1ZmIzMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aENvbW1vbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aENvbW1vbi5jcHAKQEAgLTQy
MCw0ICs0MjAsMTIgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0aFBvdyhkb3Vi
bGUgeCwgZG91YmxlIHkpCiAgICAgcmV0dXJuIG1hdGhQb3dJbnRlcm5hbCh4LCB5KTsKIH0KIAor
ZXh0ZXJuICJDIiB7Citkb3VibGUganNSb3VuZChkb3VibGUgdmFsdWUpCit7CisgICAgZG91Ymxl
IGludGVnZXIgPSBjZWlsKHZhbHVlKTsKKyAgICByZXR1cm4gaW50ZWdlciAtIChpbnRlZ2VyIC0g
dmFsdWUgPiAwLjUpOworfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhDb21tb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hdGhDb21tb24uaAppbmRleCBmN2IwYWZjYmM4Mzc0YjU0NmViOTRl
NTllZTc3MGE0NDEyYTcwMzBmLi44NDBkODYzNWZmNWEwMDRlNWE1OWZmY2U0MDc3YmJhMWE2MDJk
ODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoQ29tbW9u
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aENvbW1vbi5oCkBAIC01
NCw2ICs1NCwxMCBAQCBpbmxpbmUgaW50IGNsejMyKHVpbnQzMl90IG51bWJlcikKICNlbmRpZgog
fQogCitleHRlcm4gIkMiIHsKK2RvdWJsZSBKSVRfT1BFUkFUSU9OIGpzUm91bmQoZG91YmxlIHZh
bHVlKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKK30KKwogfQogCiAjZW5kaWYg
Ly8gTWF0aENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXRoT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmpl
Y3QuY3BwCmluZGV4IDhlN2Q2MzI5Mjk0YjNjMjhhNTNiMTIyMmFmOTRiMjAxNGNjOGFiMjMuLmQy
M2U0NmI2YmYzYTIyMzBlODA3ZDUzZDQ4MmZjZjNjYmVhMWIzM2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCkBAIC0yNjgsOSArMjY4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSog
ZXhlYykKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUm91bmQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIGRvdWJsZSBhcmcgPSBleGVjLT5hcmd1bWVudCgwKS50
b051bWJlcihleGVjKTsKLSAgICBkb3VibGUgaW50ZWdlciA9IGNlaWwoYXJnKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGludGVnZXIgLSAoaW50ZWdlciAtIGFyZyA+IDAu
NSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGpzUm91bmQoZXhlYy0+
YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpZ24oRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXJvdW5kLWJhc2ljcy5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1yb3VuZC1iYXNpY3MuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmUzOGM3NmUwNTM0Nzc2Zjg1ZjMzYjQ0ZDMzZTU2N2QwMGRmYWNiNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1y
b3VuZC1iYXNpY3MuanMKQEAgLTAsMCArMSwyNTcgQEAKKworZnVuY3Rpb24gbWF0aFJvdW5kT25J
bnRlZ2Vycyh2YWx1ZSkKK3sKKyAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7Cit9Citub0lu
bGluZShtYXRoUm91bmRPbkludGVnZXJzKTsKKworZnVuY3Rpb24gbWF0aFJvdW5kT25Eb3VibGVz
KHZhbHVlKQoreworICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTsKK30KK25vSW5saW5lKG1h
dGhSb3VuZE9uRG91Ymxlcyk7CisKK2Z1bmN0aW9uIG1hdGhSb3VuZE9uQm9vbGVhbnModmFsdWUp
Cit7CisgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpOworfQorbm9JbmxpbmUobWF0aFJvdW5k
T25Cb29sZWFucyk7CisKKy8vIFRoZSB0cml2aWFsIGNhc2VzIGZpcnN0LgorZm9yICh2YXIgaSA9
IDE7IGkgPCAxZTQ7ICsraSkgeworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRPbklu
dGVnZXJzKGkpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09IGkpCisgICAgICAgIHRocm93ICJt
YXRoUm91bmRPbkludGVnZXJzKCIgKyBpICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAg
dmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uSW50ZWdlcnMoLWkpOworICAgIGlmIChyb3Vu
ZGVkVmFsdWUgIT09IC1pKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25JbnRlZ2VycygiICsg
LWkgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91YmxlTG93ID0gaSArIDAu
NDsKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gbWF0aFJvdW5kT25Eb3VibGVzKGRvdWJsZUxvdyk7
CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZE9u
RG91YmxlcygiICsgZG91YmxlTG93ICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFy
IGRvdWJsZUhpZ2ggPSBpICsgMC42OworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRP
bkRvdWJsZXMoZG91YmxlSGlnaCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gaSArIDEpCisg
ICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoIiArIGRvdWJsZUhpZ2ggKyAiKSA9ICIg
KyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91YmxlTWlkID0gaSArIDAuNTsKKyAgICB2YXIg
cm91bmRlZFZhbHVlID0gbWF0aFJvdW5kT25Eb3VibGVzKGRvdWJsZU1pZCk7CisgICAgaWYgKHJv
dW5kZWRWYWx1ZSAhPT0gaSArIDEpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMo
IiArIGRvdWJsZU1pZCArICIpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciByb3VuZGVk
VmFsdWUgPSBtYXRoUm91bmRPbkRvdWJsZXMoLTAuNik7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAh
PT0gLTEpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoLTAuNikgPSAiICsgcm91
bmRlZFZhbHVlOworfQorCisvLyBTb21lIG1vcmUgaW50ZXJlc3RpbmcgY2FzZXMsIHNvbWUgb2Yg
dGhlbSB3ZWxsIE9TUiBleGl0IHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgorZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91
bmRPbkludGVnZXJzKGkpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09IGkpCisgICAgICAgIHRo
cm93ICJtYXRoUm91bmRPbkludGVnZXJzKCIgKyBpICsgIikgPSAiICsgcm91bmRlZFZhbHVlOwor
CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uSW50ZWdlcnMoLWkpOworICAgIGlm
IChyb3VuZGVkVmFsdWUgIT09IC1pKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25JbnRlZ2Vy
cygtIiArIGkgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVl
ID0gbWF0aFJvdW5kT25Eb3VibGVzKC0wLjQpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09IDAp
CisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoLTAuNCkgPSAiICsgcm91bmRlZFZh
bHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uRG91YmxlcygtMC41KTsK
KyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAwKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25E
b3VibGVzKC0wLjUpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciByb3VuZGVkVmFsdWUg
PSBtYXRoUm91bmRPbkRvdWJsZXMoLTApOworICAgIGlmICghKHJvdW5kZWRWYWx1ZSA9PT0gMCAm
JiAoMS9yb3VuZGVkVmFsdWUpID09PSAtSW5maW5pdHkpKQorICAgICAgICB0aHJvdyAibWF0aFJv
dW5kT25Eb3VibGVzKC0wKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZh
bHVlID0gbWF0aFJvdW5kT25Eb3VibGVzKE5hTik7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSA9PT0g
cm91bmRlZFZhbHVlKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25Eb3VibGVzKE5hTikgPSAi
ICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uRG91
YmxlcyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09
IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZE9uRG91
YmxlcyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAg
IHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRPbkRvdWJsZXMoTnVtYmVyLk5FR0FUSVZFX0lO
RklOSVRZKTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5J
VFkpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoTnVtYmVyLk5FR0FUSVZFX0lO
RklOSVRZKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgYm9vbGVhbiA9ICEhKGkgJSAy
KTsKKyAgICB2YXIgcm91bmRlZEJvb2xlYW4gPSBtYXRoUm91bmRPbkJvb2xlYW5zKGJvb2xlYW4p
OworICAgIGlmIChyb3VuZGVkQm9vbGVhbiAhPSBib29sZWFuKQorICAgICAgICB0aHJvdyAibWF0
aFJvdW5kT25Eb3VibGVzKCIgKyBib29sZWFuICsgIikgPSAiICsgcm91bmRlZEJvb2xlYW47Cit9
CisKK2Z1bmN0aW9uIHVzZWxlc3NNYXRoUm91bmQodmFsdWUpCit7CisgICAgcmV0dXJuIE1hdGgu
cm91bmQodmFsdWV8MCk7Cit9Citub0lubGluZSh1c2VsZXNzTWF0aFJvdW5kKTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIHZhciByb3VuZGVkVmFsdWUgPSB1c2VsZXNz
TWF0aFJvdW5kKGkpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09IGkpCisgICAgICAgIHRocm93
ICJ1c2VsZXNzTWF0aFJvdW5kKCIgKyBpICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAg
dmFyIGRvdWJsZUxvdyA9IGkgKyAwLjQ7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IHVzZWxlc3NN
YXRoUm91bmQoZG91YmxlTG93KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSBpKQorICAgICAg
ICB0aHJvdyAidXNlbGVzc01hdGhSb3VuZCgiICsgZG91YmxlTG93ICsgIikgPSAiICsgcm91bmRl
ZFZhbHVlOworCisgICAgdmFyIGRvdWJsZUhpZ2ggPSBpICsgMC42OworICAgIHZhciByb3VuZGVk
VmFsdWUgPSB1c2VsZXNzTWF0aFJvdW5kKGRvdWJsZUhpZ2gpOworICAgIGlmIChyb3VuZGVkVmFs
dWUgIT09IGkpCisgICAgICAgIHRocm93ICJ1c2VsZXNzTWF0aFJvdW5kKCIgKyBkb3VibGVIaWdo
ICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIGRvdWJsZU1pZCA9IGkgKyAwLjU7
CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IHVzZWxlc3NNYXRoUm91bmQoZG91YmxlTWlkKTsKKyAg
ICBpZiAocm91bmRlZFZhbHVlICE9PSBpKQorICAgICAgICB0aHJvdyAidXNlbGVzc01hdGhSb3Vu
ZCgiICsgZG91YmxlTWlkICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIHJvdW5k
ZWRWYWx1ZSA9IHVzZWxlc3NNYXRoUm91bmQoLTAuNCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAh
PT0gMCkKKyAgICAgICAgdGhyb3cgInVzZWxlc3NNYXRoUm91bmQoLTAuNCkgPSAiICsgcm91bmRl
ZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IHVzZWxlc3NNYXRoUm91bmQoLTAuNSk7
CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gMCkKKyAgICAgICAgdGhyb3cgInVzZWxlc3NNYXRo
Um91bmQoLTAuNSkgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9
IHVzZWxlc3NNYXRoUm91bmQoLTAuNik7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gMCkKKyAg
ICAgICAgdGhyb3cgInVzZWxlc3NNYXRoUm91bmQoLTAuNikgPSAiICsgcm91bmRlZFZhbHVlOwor
fQorCitmdW5jdGlvbiBtYXRoUm91bmRXaXRoT3ZlcmZsb3codmFsdWUpCit7CisgICAgcmV0dXJu
IE1hdGgucm91bmQodmFsdWUpOworfQorbm9JbmxpbmUobWF0aFJvdW5kV2l0aE92ZXJmbG93KTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIHZhciBiaWdWYWx1ZSA9IDEw
MDAwMDAwMDAwMDA7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZFdpdGhPdmVyZmxv
dyhiaWdWYWx1ZSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gYmlnVmFsdWUpCisgICAgICAg
IHRocm93ICJtYXRoUm91bmRXaXRoT3ZlcmZsb3coIiArIGJpZ1ZhbHVlICsgIikgPSAiICsgcm91
bmRlZFZhbHVlOworfQorCitmdW5jdGlvbiBtYXRoUm91bmRDb25zdW1lZEFzRG91YmxlKHZhbHVl
KQoreworICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKSAqIDAuNTsKK30KK25vSW5saW5lKG1h
dGhSb3VuZENvbnN1bWVkQXNEb3VibGUpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgdmFyIGRvdWJsZVZhbHVlID0gaSArIDAuMTsKKyAgICB2YXIgcm91bmRlZFZhbHVl
ID0gbWF0aFJvdW5kQ29uc3VtZWRBc0RvdWJsZShkb3VibGVWYWx1ZSk7CisgICAgaWYgKHJvdW5k
ZWRWYWx1ZSAhPT0gKGkgKiAwLjUpKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kQ29uc3VtZWRB
c0RvdWJsZSgiICsgZG91YmxlVmFsdWUgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2
YXIgZG91YmxlVmFsdWUgPSBpICsgMC42OworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91
bmRDb25zdW1lZEFzRG91YmxlKGRvdWJsZVZhbHVlKTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9
PSAoKGkgKyAxKSAqIDAuNSkpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRDb25zdW1lZEFzRG91
YmxlKCIgKyBkb3VibGVWYWx1ZSArICIpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworfQorCitmdW5j
dGlvbiBtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0TWludXNaZXJvKHZhbHVlKQoreworICAgIHJl
dHVybiBNYXRoLnJvdW5kKHZhbHVlKXwwOworfQorbm9JbmxpbmUobWF0aFJvdW5kRG9lc05vdENh
cmVBYm91dE1pbnVzWmVybyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICB2YXIgZG91YmxlTWlkID0gaSArIDAuNTsKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gbWF0aFJv
dW5kRG9lc05vdENhcmVBYm91dE1pbnVzWmVybyhkb3VibGVNaWQpOworICAgIGlmIChyb3VuZGVk
VmFsdWUgIT09IGkgKyAxKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kRG9lc05vdENhcmVBYm91
dE1pbnVzWmVybygiICsgZG91YmxlTWlkICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworfQorCisK
Ky8vICoqKiBGdW5jdGlvbiBhcmd1bWVudHMuICoqKgorZnVuY3Rpb24gbWF0aFJvdW5kTm9Bcmd1
bWVudHMoKQoreworICAgIHJldHVybiBNYXRoLnJvdW5kKCk7Cit9Citub0lubGluZShtYXRoUm91
bmROb0FyZ3VtZW50cyk7CisKK2Z1bmN0aW9uIG1hdGhSb3VuZFRvb01hbnlBcmd1bWVudHMoYSwg
YiwgYykKK3sKKyAgICByZXR1cm4gTWF0aC5yb3VuZChhLCBiLCBjKTsKK30KK25vSW5saW5lKG1h
dGhSb3VuZFRvb01hbnlBcmd1bWVudHMpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgdmFyIHZhbHVlID0gbWF0aFJvdW5kTm9Bcmd1bWVudHMoKTsKKyAgICBpZiAodmFs
dWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kTm9Bcmd1bWVudHMoKSA9ICIg
KyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IG1hdGhSb3VuZFRvb01hbnlBcmd1bWVudHMoMi4x
LCAzLCA1KTsKKyAgICBpZiAodmFsdWUgIT09IDIpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRU
b29NYW55QXJndW1lbnRzKCkgPSAiICsgdmFsdWU7Cit9CisKKworLy8gKioqIENvbnN0YW50IGFz
IGFyZ3VtZW50cy4gKioqCitmdW5jdGlvbiB0ZXN0TWF0aFJvdW5kT25Db25zdGFudHMoKQorewor
ICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoMCk7CisgICAgaWYgKHZhbHVlICE9PSAwKQorICAg
ICAgICB0aHJvdyAiTWF0aC5yb3VuZCgwKSA9ICIgKyB2YWx1ZTsKKyAgICB2YXIgdmFsdWUgPSBN
YXRoLnJvdW5kKC0wKTsKKyAgICBpZiAoISh2YWx1ZSA9PT0gMCAmJiAoMS92YWx1ZSkgPT09IC1J
bmZpbml0eSkpCisgICAgICAgIHRocm93ICJNYXRoLnJvdW5kKC0wKSA9ICIgKyB2YWx1ZTsKKyAg
ICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKDEpOworICAgIGlmICh2YWx1ZSAhPT0gMSkKKyAgICAg
ICAgdGhyb3cgIk1hdGgucm91bmQoMSkgPSAiICsgdmFsdWU7CisgICAgdmFyIHZhbHVlID0gTWF0
aC5yb3VuZCgtMSk7CisgICAgaWYgKHZhbHVlICE9PSAtMSkKKyAgICAgICAgdGhyb3cgIk1hdGgu
cm91bmQoLTEpID0gIiArIHZhbHVlOworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoNDIpOwor
ICAgIGlmICh2YWx1ZSAhPT0gNDIpCisgICAgICAgIHRocm93ICJNYXRoLnJvdW5kKDQyKSA9ICIg
KyB2YWx1ZTsKKyAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKC00Mi4yKTsKKyAgICBpZiAodmFs
dWUgIT09IC00MikKKyAgICAgICAgdGhyb3cgIk1hdGgucm91bmQoLTQyLjIpID0gIiArIHZhbHVl
OworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoTmFOKTsKKyAgICBpZiAodmFsdWUgPT09IHZh
bHVlKQorICAgICAgICB0aHJvdyAiTWF0aC5yb3VuZChOYU4pID0gIiArIHZhbHVlOworICAgIHZh
ciB2YWx1ZSA9IE1hdGgucm91bmQoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRJKTsKKyAgICBpZiAo
dmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiTWF0aC5yb3VuZChOdW1iZXIuUE9TSVRJ
VkVfSU5GSU5JVEkpID0gIiArIHZhbHVlOworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoTnVt
YmVyLk5FR0FUSVZFX0lORklOSVRJKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAg
ICB0aHJvdyAiTWF0aC5yb3VuZChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVEkpID0gIiArIHZhbHVl
OworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoTWF0aC5FKTsKKyAgICBpZiAodmFsdWUgIT09
IDMpCisgICAgICAgIHRocm93ICJNYXRoLnJvdW5kKE1hdGguRSkgPSAiICsgdmFsdWU7Cit9Citu
b0lubGluZSh0ZXN0TWF0aFJvdW5kT25Db25zdGFudHMpOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7CisgICAgdGVzdE1hdGhSb3VuZE9uQ29uc3RhbnRzKCk7Cit9CisKKworLy8g
KioqIFN0cnVjdCB0cmFuc2l0aW9uLiAqKioKK2Z1bmN0aW9uIG1hdGhSb3VuZFN0cnVjdFRyYW5z
aXRpb24odmFsdWUpCit7CisgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpOworfQorbm9Jbmxp
bmUobWF0aFJvdW5kU3RydWN0VHJhbnNpdGlvbik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU0
OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBtYXRoUm91bmRTdHJ1Y3RUcmFuc2l0aW9uKDQyLjUp
OworICAgIGlmICh2YWx1ZSAhPT0gNDMpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRTdHJ1Y3RU
cmFuc2l0aW9uKDQyLjUpID0gIiArIHZhbHVlOworfQorCitNYXRoLnJvdW5kID0gZnVuY3Rpb24o
KSB7IHJldHVybiBhcmd1bWVudHNbMF0gKyA1OyB9CisKK3ZhciB2YWx1ZSA9IG1hdGhSb3VuZFN0
cnVjdFRyYW5zaXRpb24oNDIpOworaWYgKHZhbHVlICE9PSA0NykKKyAgICB0aHJvdyAibWF0aFJv
dW5kU3RydWN0VHJhbnNpdGlvbig0MikgYWZ0ZXIgdHJhbnNpdGlvbiA9ICIgKyB2YWx1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252639</attachid>
            <date>2015-05-07 15:49:12 -0700</date>
            <delta_ts>2015-05-07 16:37:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144725-20150507154755.patch</filename>
            <type>text/plain</type>
            <size>40802</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzOTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OWQ3MDk5MGM1OGRjYjgyMTU5NWMyYzEyZjUzMDJjYTE5MDA0ZTA5Li5mOTg5MWE2MGY4ODJhZWI2
MGZhMDA4NmM4NzMyZjhkYTc0YmRkZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAxNS0wNS0wNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgYmFzaWMgREZHL0ZUTCBzdXBwb3J0IGZvciBNYXRo
LnJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ3MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFkZHMgdHdvIG9wdGltaXphdGlvbnMgdGFyZ2V0aW5nIE1hdGgucm91bmQoKToK
KyAgICAgICAgLUFkZCBhIERGR05vZGUgQXJpdGhSb3VuZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBp
bnRyaW5zaWMgUm91bmRJbnRyaW5zaWMuCisgICAgICAgIC1DaGFuZ2UgdGhlIE1hY3JvQXNzZW1i
bGVyIHRvIGJlIHN0cmljdGVyIG9uIGhvdyB3ZSBmYWlsIHRvIGNvbnZlcnQgYSBkb3VibGUKKyAg
ICAgICAgIHRvIGluZ2V0ZXIuIFByZXZpb3VzbHksIGFueSBudW1iZXIgdmFsdWVkIHplcm8gd291
bGQgZmFpbCwgbm93IHdlIG9ubHkKKyAgICAgICAgIGZhaWwgZm9yIC0wLgorCisgICAgICAgIFNp
bmNlIEFyaXRoUm91bmQgc3BlY3VsYXRlIGl0IHByb2R1Y2VzIGludDMyLCB0aGUgTWFjcm9Bc3Nl
bWJsZXIgYXNzZW1ibGVyCisgICAgICAgIHBhcnQgYmVjYW1lIG5lY2Vzc2FyeSBiZWNhdXNlIHpl
cm8gaXMgYSBwcmV0dHkgY29tbW9uIG91dHB1dCBvZiBNYXRoLnJvdW5kKCkKKyAgICAgICAgYW5k
IHdlIHdvdWxkIE9TUiBleGl0IGEgbG90IChhbmQgZXZlbnR1YWxseSByZWNvbXBpbGUgZm9yIGRv
dWJsZXMpLgorCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgb2YgdGhlIGlubGlu
ZSBNYXRoLnJvdW5kKCkgaXMgZXhhY3RseSB0aGUgc2FtZQorICAgICAgICBhcyB0aGUgQyBmdW5j
dGlvbiB0aGF0IGV4aXN0cyBmb3IgTWF0aC5yb3VuZCgpLiBXZSBjYW4gdmVyeSBsaWtlbHkgZG8g
YmV0dGVyCisgICAgICAgIGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQga25vd24gdG8gYmUgdmFsaWQg
YW5kIGlubGluaW5nIGFsb25lIGFscmVhZCBwcm92aWRlcworICAgICAgICBzaWduaWZpY2FudCBz
cGVlZHVwcy4KKworICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAg
KEpTQzo6WDg2QXNzZW1ibGVyOjptb3Ztc2twZF9ycik6CisgICAgICAgICogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMik6CisgICAgICAgIFdoZW4gd2UgaGF2
ZSBhIHplcm8sIGdldCB0aGUgc2lnbiBiaXQgb3V0IG9mIHRoZSBkb3VibGUgYW5kIGNoZWNrIGlm
IGlzIG9uZS4KKworICAgICAgICBJJ2xsIGxvb2sgaW50byBkb2luZyB0aGUgc2FtZSBpbXByb3Zl
bWVudCBmb3IgQVJNLgorCisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgor
ICAgICAgICAoSlNDOjp0eXBlT2ZEb3VibGVSb3VuZGluZyk6CisgICAgICAgIChKU0M6OnR5cGVP
ZkRvdWJsZUZSb3VuZCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2Vz
R0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpyb3VuZFNob3VsZFNwZWN1bGF0ZUludDMyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6bmVnYXRlU2hvdWxkU3BlY3VsYXRlTWFjaGluZUludCk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojphcml0aE5vZGVGbGFncyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRp
Y3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyaXRoTW9kZSk6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aFJvdW5kKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbnZlcnREb3VibGVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZURvdWJsZUFzSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQXJpdGhSb3VuZCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y2VpbDY0KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcDoKKyAgICAgICAgKiBydW50aW1lL01hdGhDb21tb24uY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvTWF0aENvbW1vbi5oOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNSb3VuZCk6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL21hdGgtcm91bmQtYmFzaWNzLmpzOiBBZGRlZC4KKyAgICAgICAgKG1hdGhSb3VuZE9uSW50
ZWdlcnMpOgorICAgICAgICAobWF0aFJvdW5kT25Eb3VibGVzKToKKyAgICAgICAgKG1hdGhSb3Vu
ZE9uQm9vbGVhbnMpOgorICAgICAgICAodXNlbGVzc01hdGhSb3VuZCk6CisgICAgICAgIChtYXRo
Um91bmRXaXRoT3ZlcmZsb3cpOgorICAgICAgICAobWF0aFJvdW5kQ29uc3VtZWRBc0RvdWJsZSk6
CisgICAgICAgIChtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0TWludXNaZXJvKToKKyAgICAgICAg
KG1hdGhSb3VuZE5vQXJndW1lbnRzKToKKyAgICAgICAgKG1hdGhSb3VuZFRvb01hbnlBcmd1bWVu
dHMpOgorICAgICAgICAodGVzdE1hdGhSb3VuZE9uQ29uc3RhbnRzKToKKyAgICAgICAgKG1hdGhS
b3VuZFN0cnVjdFRyYW5zaXRpb24pOgorICAgICAgICAoTWF0aC5yb3VuZCk6CisKIDIwMTUtMDUt
MDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBTYW5lIGNoYWlu
IGFuZCBzdHJpbmcgd2F0Y2hwb2ludHMgc2hvdWxkIGJlIHNldCBpbiBGaXh1cFBoYXNlIG9yIHRo
ZSBiYWNrZW5kIHJhdGhlciB0aGFuIFdhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAppbmRleCA0YThiZTVhZjM0ODEyOGVmM2M0MzA2ZjRmZGNjMjgwMDNjNDdiYmM5Li5i
M2I1MDc0OGE5NmM5OGIzYzRlODYyZTcwOTQ2NmM1YWEwNTVkNTI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oCkBAIC05MjEsOCArOTIxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuY3Z0
dHNkMnNpX3JyKHNyYywgZGVzdCk7CiAKICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyB6ZXJv
LCBpdCBtaWdodCBoYXZlIGJlZW4gLTAuMCwgYW5kIHRoZSBkb3VibGUgY29tcGFyaXNvbiB3b24n
dCBjYXRjaCB0aGlzIQorI2lmIENQVShYODZfNjQpCisgICAgICAgIGlmIChuZWdaZXJvQ2hlY2sp
IHsKKyAgICAgICAgICAgIEp1bXAgdmFsdWVJc05vblplcm8gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Ztc2twZF9ycihzcmMsIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBzY3JhdGNoUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMigxKSkpOworICAgICAgICAg
ICAgdmFsdWVJc05vblplcm8ubGluayh0aGlzKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAg
aWYgKG5lZ1plcm9DaGVjaykKICAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNo
VGVzdDMyKFplcm8sIGRlc3QpKTsKKyNlbmRpZgogCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIGlu
dGVnZXIgcmVzdWx0IGJhY2sgdG8gZmxvYXQgJiBjb21wYXJlIHRvIHRoZSBvcmlnaW5hbCB2YWx1
ZSAtIGlmIG5vdCBlcXVhbCBvciB1bm9yZGVyZWQgKE5hTikgdGhlbiBqdW1wLgogICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShkZXN0LCBmcFRlbXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKaW5kZXggYjg4ZTNjM2ZiNzhhZWRmNjU5NWE4
MDMxMzAxZGRmY2ZlODY4MWI1Mi4uY2UwNzMwOThhOTc4ZDJiMDg3Nzk5OWQ1MDYxYmM4Mzc3NTE2
OTQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCkBAIC0yNTMsNiArMjUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX0NWVFNTMlNEX1Zz
ZFdzZCA9IDB4NUEsCiAgICAgICAgIE9QMl9TVUJTRF9Wc2RXc2QgICAgPSAweDVDLAogICAgICAg
ICBPUDJfRElWU0RfVnNkV3NkICAgID0gMHg1RSwKKyAgICAgICAgT1AyX01PVk1TS1BEX1ZkRWQg
ICA9IDB4NTAsCiAgICAgICAgIE9QMl9TUVJUU0RfVnNkV3NkICAgPSAweDUxLAogICAgICAgICBP
UDJfQU5ETlBEX1ZwZFdwZCAgID0gMHg1NSwKICAgICAgICAgT1AyX1hPUlBEX1ZwZFdwZCAgICA9
IDB4NTcsCkBAIC0xODA0LDYgKzE4MDUsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRl
ci50d29CeXRlT3AoT1AyX01PVkRfVmRFZCwgKFJlZ2lzdGVySUQpZHN0LCBzcmMpOwogICAgIH0K
IAorICAgIHZvaWQgbW92bXNrcGRfcnIoWE1NUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9TU0VfNjYpOworICAgICAg
ICBtX2Zvcm1hdHRlci50d29CeXRlT3A2NChPUDJfTU9WTVNLUERfVmRFZCwgZHN0LCAoUmVnaXN0
ZXJJRClzcmMpOworICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgdm9pZCBtb3ZxX3JyKFhN
TVJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAppbmRleCA1ZjQ0ZjE0YzEz
M2VhYTUwY2YyY2IyNTM4MWQ4Mzc0NDA3YzkwZGM0Li42OGE1ZDk1Y2MxOTU4MDlhZTMxZTUwNjZj
Y2U0MTM4NjhhODc3NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTUwNyw3ICs1MDcsNyBAQCBTcGVjdWxhdGVkVHlwZSB0
eXBlT2ZEb3VibGVBYnMoU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgcmV0dXJuIHR5cGVPZkRv
dWJsZU5lZ2F0aW9uKHZhbHVlKTsKIH0KIAotU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlRlJv
dW5kKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQorU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUm91
bmRpbmcoU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgLy8gV2UgbWlnaHQgbG9zZSBiaXRz
LCB3aGljaCBsZWFkcyB0byBhIE5hTiBiZWluZyBwdXJpZmllZC4KICAgICBpZiAodmFsdWUgJiBT
cGVjRG91YmxlSW1wdXJlTmFOKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuaAppbmRleCBiNjBlMzgyNjM3ZDcxZGUxNDBjNDAxZjUxYmVmMzllM2Vm
NGNiMDkyLi4yODgyMzM3OWRkZDQ1Y2JhNDA4NTgxMzcwMDBiZmE1MzkxODc0ZTkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaApAQCAtNDIy
LDcgKzQyMiw3IEBAIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZVF1b3RpZW50KFNwZWN1bGF0
ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CiBTcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVNaW5N
YXgoU3BlY3VsYXRlZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0ZWRUeXBlIHR5cGVP
ZkRvdWJsZU5lZ2F0aW9uKFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRv
dWJsZUFicyhTcGVjdWxhdGVkVHlwZSk7Ci1TcGVjdWxhdGVkVHlwZSB0eXBlT2ZEb3VibGVGUm91
bmQoU3BlY3VsYXRlZFR5cGUpOworU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUm91bmRpbmco
U3BlY3VsYXRlZFR5cGUpOwogU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUG93KFNwZWN1bGF0
ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CiAKIC8vIFRoaXMgY29uc2VydmF0aXZlbHkgbW9kZWxz
IHRoZSBiZWhhdmlvciBvZiBhcmJpdHJhcnkgZG91YmxlIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKaW5kZXggNTNjODQ1ZjU2ZWI0MDQwODUzZjQxNzIxMjAwZDU1NTQwMThhOTc5MS4uNjhh
NjJlOTIxNzliMDA2YTRkYjYyNmM4YWJhMDk3MmQxYTZlOTg4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aApAQCAtNzYxLDYgKzc2MSwzNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91YmxlUG93KGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIGNhc2UgQXJpdGhSb3VuZDogeworICAgICAgICBKU1ZhbHVlIG9w
ZXJhbmQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAgICBpZiAob3Bl
cmFuZCAmJiBvcGVyYW5kLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGRvdWJsZSByb3VuZGVk
VmFsdWUgPSBqc1JvdW5kKG9wZXJhbmQuYXNOdW1iZXIoKSk7CisKKyAgICAgICAgICAgIGlmIChw
cm9kdWNlc0ludGVnZXIobm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICBpbnQzMl90IHJvdW5kZWRWYWx1ZUFzSW50MzIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihy
b3VuZGVkVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChyb3VuZGVkVmFsdWVBc0ludDMyID09
IHJvdW5kZWRWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdh
dGl2ZVplcm8obm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb3VuZGVkVmFsdWVBc0ludDMyIHx8ICFzdGQ6OnNpZ25iaXQocm91bmRlZFZh
bHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpz
TnVtYmVyKHJvdW5kZWRWYWx1ZUFzSW50MzIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVt
YmVyKHJvdW5kZWRWYWx1ZUFzSW50MzIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJl
cihyb3VuZGVkVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG5vZGUtPmFyaXRoUm91bmRp
bmdNb2RlKCkpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlT2ZE
b3VibGVSb3VuZGluZyhmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFNxcnQ6IHsKICAgICAg
ICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC03
NzgsNyArODA4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIHNldENv
bnN0YW50KG5vZGUsIGpzRG91YmxlTnVtYmVyKHN0YXRpY19jYXN0PGZsb2F0PihjaGlsZC5hc051
bWJlcigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZUZSb3VuZChmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZVJv
dW5kaW5nKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcml0aE1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgK
aW5kZXggMDY0ZjA2NGU5Y2RmZmNlNDJlYjE4N2QzZTg4OWEyMWMyMTY1NzA2OC4uNGUwOWFjM2U5
M2FiN2Y2NmEzOWRlYTRiODM4NDYyMTVhYWFhMjAyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyaXRoTW9kZS5oCkBAIC00MCw2ICs0MCwxNCBAQCBlbnVtIE1vZGUgewogICAgIENo
ZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm8sIC8vIENoZWNrIGZvciBib3RoIG92ZXJmbG93IGFu
ZCBuZWdhdGl2ZSB6ZXJvLgogICAgIERvT3ZlcmZsb3cgLy8gVXAtY29udmVydCB0byB0aGUgc21h
bGxlc3QgdHlwZSB0aGF0IHNvdW5kbHkgcmVwcmVzZW50cyBhbGwgcG9zc2libGUgcmVzdWx0cyBh
ZnRlciBpbnB1dCB0eXBlIHNwZWN1bGF0aW9uLgogfTsKKworLy8gRGVmaW5lIHRoZSB0eXBlIG9m
IG9wZXJhdGlvbiB0aGUgcm91bmRpbmcgb3BlcmF0aW9uIHdpbGwgcGVyZm9ybS4KK2VudW0gY2xh
c3MgUm91bmRpbmdNb2RlIHsKKyAgICBJbnQzMiwgLy8gVGhlIHJvdW5kIG9wZXJhdGlvbiBwcm9k
dWNlcyBhIGludGVnZXIgYW5kIC0wIGlzIGNvbnNpZGVyZWQgYXMgMC4KKyAgICBJbnQzMldpdGhO
ZWdhdGl2ZVplcm9DaGVjaywgLy8gVGhlIHJvdW5kIG9wZXJhdGlvbiBwcm9kdWNlcyBhIGludGVn
ZXIgYW5kIGNoZWNrcyBmb3IgLTAuCisgICAgRG91YmxlIC8vIFRoZSByb3VuZCBvcGVyYXRpb24g
cHJvZHVjZSBhIGRvdWJsZS4gVGhlIHJlc3VsdCBjYW4gYmUgLTAsIE5hTiBvciAoKy8tKUluZmlu
aXR5LgorfTsKKwogfSAvLyBuYW1lc3BhY2UgQXJpdGgKIAogaW5saW5lIGJvb2wgZG9lc092ZXJm
bG93KEFyaXRoOjpNb2RlIG1vZGUpCkBAIC0xMjIsNiArMTMwLDE2IEBAIGlubGluZSBib29sIHN1
YnN1bWVzKEFyaXRoOjpNb2RlIGVhcmxpZXIsIEFyaXRoOjpNb2RlIGxhdGVyKQogICAgIH0KIH0K
IAoraW5saW5lIGJvb2wgcHJvZHVjZXNJbnRlZ2VyKEFyaXRoOjpSb3VuZGluZ01vZGUgbW9kZSkK
K3sKKyAgICByZXR1cm4gbW9kZSA9PSBBcml0aDo6Um91bmRpbmdNb2RlOjpJbnQzMldpdGhOZWdh
dGl2ZVplcm9DaGVjayB8fCBtb2RlID09IEFyaXRoOjpSb3VuZGluZ01vZGU6OkludDMyOworfQor
CitpbmxpbmUgYm9vbCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhBcml0aDo6Um91bmRpbmdNb2Rl
IG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0gQXJpdGg6OlJvdW5kaW5nTW9kZTo6SW50MzJX
aXRoTmVnYXRpdmVaZXJvQ2hlY2s7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
bmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCmluZGV4IDRjNmJiZGQyZmY2M2RmMGM1MGQ4OTg4ODY1NDVjZjEzZmY3YWVm
YzIuLmFiYzUxZDQ2YTA1MTk3ZGY0MTNjM2IzNmRmMTY5NmQzOWJjY2FhMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0yMDQ0LDcg
KzIwNDQsMjEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludCByZXN1
bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLQorICAgIGNhc2UgUm91bmRJbnRyaW5zaWM6IHsKKyAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsKKyAgICAgICAgICAgIGluc2Vy
dENoZWNrcygpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5k
KSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9PSAyKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wZXJhbmQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgIE5vZGUqIHJvdW5kTm9kZSA9IGFkZFRvR3Jh
cGgoQXJpdGhSb3VuZCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIG9wZXJhbmQpOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcm91bmROb2Rl
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA2MGE4OTk0ODNi
MDVhODkzZmQ2ZjM4NWI0MjM5NDRjYTFkNTY5ZWRjLi4zNTBiMjBkYzI4NmRiZjk0MWRkYTA1ZDc4
MGJhZDEwZThmOTQ1ZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaApAQCAtMTM0LDYgKzEzNCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2Fz
ZSBBcml0aFBvdzoKICAgICBjYXNlIEFyaXRoU3FydDoKICAgICBjYXNlIEFyaXRoRlJvdW5kOgor
ICAgIGNhc2UgQXJpdGhSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgogICAgIGNhc2UgQXJpdGhD
b3M6CiAgICAgY2FzZSBBcml0aExvZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAppbmRleCBhOWUzMGFjYjRiMGEzZTQ2ZDE5YWMyOGM5MzE2NzEwZTBkZWFjMDQ1Li4xMTE3
ZTdhYjQzMmJhNjBlYTA3M2ZhMGFmZTk4MTlhMjZmODExMzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC04Myw2ICs4Myw3IEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEFyaXRoTWF4OgogICAgIGNhc2UgQXJpdGhQ
b3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgY2FzZSBBcml0aFJvdW5kOgogICAgIGNhc2Ug
QXJpdGhGUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRoQ29zOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggN2FiMWIxNjMy
YWIxMmQ4NmY0MjJiNWE4OTM3NWRmMGEwZGRiZTEyMy4uZWVhZDNmYTM4MWMyZjFjYzRkM2U2Zjkw
ZDE3NmIxNjU0YjBmMjcyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCkBAIC0zMjIsNiArMzIyLDI4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXhE
b3VibGVPckJvb2xlYW5FZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aFJvdW5kOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludDMyT3JCb29sZWFuRm9yQXJpdGhtZXRp
YygpICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludDMyKEZpeHVwUGFzcykpIHsKKyAgICAgICAgICAg
ICAgICBmaXhJbnRPckJvb2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICBpbnNlcnRDaGVjazxJbnQzMlVzZT4obV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZU9y
Qm9vbGVhbkVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgICAgICBpZiAoaXNJbnQzMk9y
Qm9vbGVhblNwZWN1bGF0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpICYmIG1fZ3JhcGgu
cm91bmRTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBGaXh1cFBhc3MpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CisgICAgICAgICAgICAgICAg
aWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkp
KQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aFJvdW5kaW5nTW9kZShBcml0aDo6
Um91bmRpbmdNb2RlOjpJbnQzMik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRBcml0aFJvdW5kaW5nTW9kZShBcml0aDo6Um91bmRpbmdNb2RlOjpJ
bnQzMldpdGhOZWdhdGl2ZVplcm9DaGVjayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChOb2RlUmVzdWx0RG91YmxlKTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcml0aFJvdW5kaW5nTW9kZShBcml0aDo6Um91bmRpbmdNb2RlOjpEb3Vi
bGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3FydDoKICAgICAgICAgY2FzZSBBcml0aEZSb3Vu
ZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCBkOTJlN2M5Mjk2NWRlZTgz
MGI5YWVkZGI2N2UzODQxYzNmZTkyOTJiLi42NWE2M2UwYjNkNDRkZGYxY2YzMmVkYmUyNzM0MDU1
NjVjODEzNGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0zMTQsNiAr
MzE0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICYmICFoYXNFeGl0U2l0ZShuZWdhdGUsIElu
dDUyT3ZlcmZsb3cpCiAgICAgICAgICAgICAmJiBuZWdhdGUtPmNhblNwZWN1bGF0ZUludDUyKHBh
c3MpOwogICAgIH0KKworICAgIGJvb2wgcm91bmRTaG91bGRTcGVjdWxhdGVJbnQzMihOb2RlKiBh
cml0aFJvdW5kLCBQcmVkaWN0aW9uUGFzcyBwYXNzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGFy
aXRoUm91bmQtPm9wKCkgPT0gQXJpdGhSb3VuZCk7CisgICAgICAgIHJldHVybiBhcml0aFJvdW5k
LT5jYW5TcGVjdWxhdGVJbnQzMihwYXNzKSAmJiAhaGFzRXhpdFNpdGUoYXJpdGhSb3VuZC0+b3Jp
Z2luLnNlbWFudGljLCBPdmVyZmxvdykgJiYgIWhhc0V4aXRTaXRlKGFyaXRoUm91bmQtPm9yaWdp
bi5zZW1hbnRpYywgTmVnYXRpdmVaZXJvKTsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCmluZGV4IDJkNzc1ZjUxZTVkNTllMjc4NTI3OTE0ODFkNDczZGU1MDMzMmJkMDkuLjBhNDJj
NGExMGQzOGM0ZWJhMDY0MjY5ZmQzOTRlYjcxZjRkZWRkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCkBAIC04NzIsNyArODcyLDcgQEAgc3RydWN0IE5vZGUgewogICAgIE5vZGVG
bGFncyBhcml0aE5vZGVGbGFncygpCiAgICAgewogICAgICAgICBOb2RlRmxhZ3MgcmVzdWx0ID0g
bV9mbGFncyAmIE5vZGVBcml0aEZsYWdzTWFzazsKLSAgICAgICAgaWYgKG9wKCkgPT0gQXJpdGhN
dWwgfHwgb3AoKSA9PSBBcml0aERpdiB8fCBvcCgpID09IEFyaXRoTW9kIHx8IG9wKCkgPT0gQXJp
dGhOZWdhdGUgfHwgb3AoKSA9PSBBcml0aFBvdyB8fCBvcCgpID09IERvdWJsZUFzSW50MzIpCisg
ICAgICAgIGlmIChvcCgpID09IEFyaXRoTXVsIHx8IG9wKCkgPT0gQXJpdGhEaXYgfHwgb3AoKSA9
PSBBcml0aE1vZCB8fCBvcCgpID09IEFyaXRoTmVnYXRlIHx8IG9wKCkgPT0gQXJpdGhQb3cgfHwg
b3AoKSA9PSBBcml0aFJvdW5kIHx8IG9wKCkgPT0gRG91YmxlQXNJbnQzMikKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiByZXN1bHQgJiB+Tm9kZUJ5dGVjb2RlTmVl
ZHNOZWdaZXJvOwogICAgIH0KQEAgLTEyNDIsNiArMTI0Miw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICBib29sIGhhc0hlYXBQcmVkaWN0aW9uKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkg
eworICAgICAgICBjYXNlIEFyaXRoUm91bmQ6CiAgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6
CiAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CkBAIC0x
NTYzLDYgKzE1NjQsMjMgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgbV9vcEluZm8g
PSBtb2RlOwogICAgIH0KKworICAgIGJvb2wgaGFzQXJpdGhSb3VuZGluZ01vZGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG9wKCkgPT0gQXJpdGhSb3VuZDsKKyAgICB9CisKKyAgICBBcml0aDo6
Um91bmRpbmdNb2RlIGFyaXRoUm91bmRpbmdNb2RlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNBcml0aFJvdW5kaW5nTW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFyaXRo
OjpSb3VuZGluZ01vZGU+KG1fb3BJbmZvKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFyaXRoUm91
bmRpbmdNb2RlKEFyaXRoOjpSb3VuZGluZ01vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChoYXNBcml0aFJvdW5kaW5nTW9kZSgpKTsKKyAgICAgICAgbV9vcEluZm8gPSBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KG1vZGUpOworICAgIH0KICAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdp
c3RlcigpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4
IDc1Yzg4NDIzN2EwMGIxNmQ4NzBkMjQwMTQ1OTMxOGRlZGMxYWU4ZmMuLjJjZTc1YmNlYWI1NWQz
Y2UzZjY4ZTU1NDA1ODdjYjZlYTVjMjY2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKQEAgLTE1MCw2ICsxNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oQXJpdGhNYXgsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNy
byhBcml0aEZSb3VuZCwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRoUG93LCBO
b2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhSb3VuZCwgTm9kZVJlc3VsdE51bWJl
cikgXAogICAgIG1hY3JvKEFyaXRoU3FydCwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3Jv
KEFyaXRoU2luLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhDb3MsIE5vZGVS
ZXN1bHROdW1iZXIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggMzFkNjZhYmU1YzhhYzc0
NzA2ZjFkMmRhZDkyOTgxMzNmN2M4NTg2NS4uMGZmNWEzNjEzMzc1ODhhMWY5MWQ5MWU1OTU4YWEz
YzgyYTRiYzRiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTM0Nyw3ICszNDcsMTUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQnl0ZWNv
ZGVEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAor
CisgICAgICAgIGNhc2UgQXJpdGhSb3VuZDogeworICAgICAgICAgICAgaWYgKGlzSW50MzJPckJv
b2xlYW5TcGVjdWxhdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiBtX2dyYXBoLnJv
dW5kU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgbV9wYXNzKSkKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2RlRG91Ymxl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBBcml0aEFi
czogewogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJPckJvb2xlYW5TcGVjdWxhdGlv
bkZvckFyaXRobWV0aWMoY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCmluZGV4IGY0YjA3OWY4N2IwMThjMDA1NzMyNmViMDk1MTQyNjA3ODVlMzJl
YzYuLjRkOGQ3NGIwOWE1ODk2MzljODI5YjY0ODM4ZjdlZTJiMGVlYmYzODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0xNTQsNiArMTU0LDcg
QEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6
CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKKyAgICBjYXNlIEFyaXRoUm91bmQ6CiAgICAgY2FzZSBB
cml0aFNpbjoKICAgICBjYXNlIEFyaXRoQ29zOgogICAgIGNhc2UgQXJpdGhMb2c6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDM2ZDli
ZjA5ZGY2MDE2YzhmNTg1YWJlYmUyOTNkZTY2ZGZiMDgyNzEuLmZhMzdhNzExNDJlMjg1OWY1ZWNl
NDc0YjUwNmZhMzFiMDZjOWQxNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0zNTQ0LDYgKzM1NDQsMzEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZGUqIG5vZGUpCiAgICAgfQogfQogCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSb3VuZChOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKTsKKworICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEZQUlJl
ZyB2YWx1ZUZQUiA9IHZhbHVlLmZwcigpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgRlBS
UmVzdWx0IHJvdW5kZWRSZXN1bHRBc0RvdWJsZSh0aGlzKTsKKyAgICBGUFJSZWcgcmVzdWx0RlBS
ID0gcm91bmRlZFJlc3VsdEFzRG91YmxlLmZwcigpOworICAgIGNhbGxPcGVyYXRpb24oanNSb3Vu
ZCwgcmVzdWx0RlBSLCB2YWx1ZUZQUik7CisKKyAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG5vZGUt
PmFyaXRoUm91bmRpbmdNb2RlKCkpKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSByb3VuZGVkUmVz
dWx0QXNJbnQzMih0aGlzKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Cisg
ICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJvdW5kZWRSZXN1bHRBc0ludDMyLmdwcigpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICBtX2ppdC5icmFuY2hDb252ZXJ0
RG91YmxlVG9JbnQzMihyZXN1bHRGUFIsIHJlc3VsdEdQUiwgZmFpbHVyZUNhc2VzLCBzY3JhdGNo
RlBSLCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSk7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIG5vZGUs
IGZhaWx1cmVDYXNlcyk7CisKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdEZQUiwgbm9kZSk7Cit9CisK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFNxcnQoTm9kZSogbm9kZSkKIHsKICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggNjdlNjcz
YjFjMWI2YjIxYWU3MTAzODM0YzlhZmIyYzA2ZTcxZDkxZC4uYjllNmUwZGQyNGZkZWJmMGMxY2Q3
ZDIxNGJmY2VlY2RmZmU1NzRkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaApAQCAtMjE5OSw2ICsyMTk5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y29tcGlsZUFyaXRoRGl2KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aE1vZChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlQXJpdGhQb3coTm9kZSopOworICAgIHZvaWQgY29tcGlsZUFyaXRo
Um91bmQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoU3FydChOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlQXJpdGhMb2coTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNvbnN0YW50U3RvcmFn
ZVBvaW50ZXIoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggMjNjZjI0NGIwYzgzYzk3MTViZTcxMTU0ZWI2
YzI2N2VkNWEzMzg3NC4uMWQwZGRhNzUyMzZiOTAwMWJkOGFiYTE5OWFiNzNlYmU3MThiZTA4NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkBAIC0yMTcwLDYgKzIxNzAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEFyaXRo
Um91bmQ6CisgICAgICAgIGNvbXBpbGVBcml0aFJvdW5kKG5vZGUpOworICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgQXJpdGhTaW46IHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZw
cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKaW5kZXggM2U1NzRkNGY2OWIwNTkzNjE0Y2M3ZjJiZDMxY2ViOWQ1OGVlY2UzMC4uYjc3
MGI1MDk5OThhM2UwZGFkYWU0YmI1ZmJkNjA4N2Q1ODFiNzc0NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yMzEzLDYgKzIz
MTMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEFyaXRoUm91bmQ6CisgICAgICAgIGNvbXBpbGVB
cml0aFJvdW5kKG5vZGUpOworICAgICAgICBicmVhazsKKwogICAgIGNhc2UgQXJpdGhTaW46IHsK
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDBiZmRmY2NjNmQzMmFlZGI0ODBj
NzM4OWFkY2JlMTY1Yjc3YjRlMjMuLjI2ZWNhN2UyYzNjOTBjOTQyNGVlNTgwZjZjNTU5NWVjMjdl
NjE0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKQEAgLTYzLDYgKzYzLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNoaWZ0OgogICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgIGNhc2Ug
QXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdl
dEJ1dHRlcmZseToKQEAgLTg5LDYgKzkwLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRoQ29z
OgogICAgIGNhc2UgQXJpdGhQb3c6CisgICAgY2FzZSBBcml0aFJvdW5kOgogICAgIGNhc2UgQXJp
dGhTcXJ0OgogICAgIGNhc2UgQXJpdGhMb2c6CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKaW5k
ZXggM2Q2NmVjYTg4ZDA0M2JiMzU2Y2I5NjY3ZTlmNmUzNWFmOTg2YjhkMy4uNGIyOGQzNTYyNWE3
MzI3YzEyOWM2MWEwYjc4NTczMGI4Mjk1MjYzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9GVExfSU5U
UklOU0lDKG1hY3JvKSBcCisgICAgbWFjcm8oY2VpbDY0LCAibGx2bS5jZWlsLmY2NCIsIGZ1bmN0
aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAogICAgIG1hY3JvKGN0bHozMiwgImxs
dm0uY3Rsei5pMzIiLCBmdW5jdGlvblR5cGUoaW50MzIsIGludDMyLCBib29sZWFuKSkgXAogICAg
IG1hY3JvKGFkZFdpdGhPdmVyZmxvdzMyLCAibGx2bS5zYWRkLndpdGgub3ZlcmZsb3cuaTMyIiwg
ZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGludDMy
LCBpbnQzMikpIFwKICAgICBtYWNybyhhZGRXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc2FkZC53aXRo
Lm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50NjQs
IGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCmluZGV4IDRmNWEzYTg2NjFjM2Y5MjU2ODFiNjkyMTlm
NDIzOTY4MjgwMDllZDIuLmIxMDJhN2EzOWFjZTdkOGM5ZjFhNzljMGZmYzJmY2Y4NWRiMzVmMDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CkBAIC00NDMsNiArNDQzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBEb3VibGVSZXA6CiAg
ICAgICAgICAgICBjb21waWxlRG91YmxlUmVwKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgICAgICAgICAgY29tcGlsZURvdWJsZUFzSW50MzIo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVlUmVwOgogICAgICAgICAg
ICAgY29tcGlsZVZhbHVlUmVwKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUwNSw2ICs1MDgs
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFyaXRoUG93OgogICAgICAgICAgICAgY29tcGls
ZUFyaXRoUG93KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFJvdW5k
OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoUm91bmQoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFyaXRoU3FydDoKICAgICAgICAgICAgIGNvbXBpbGVBcml0aFNxcnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTcxLDYgKzk3NywzNiBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgfQogICAgIAorICAgIExWYWx1ZSBjb252ZXJ0RG91YmxlVG9JbnQzMihMVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8pCisgICAgeworICAgICAgICBMVmFs
dWUgaW50ZWdlclZhbHVlID0gbV9vdXQuZnBUb0ludDMyKHZhbHVlKTsKKyAgICAgICAgTFZhbHVl
IGludGVnZXJWYWx1ZUNvbnZlcnRlZFRvRG91YmxlID0gbV9vdXQuaW50VG9Eb3VibGUoaW50ZWdl
clZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlTm90Q29udmVydGlibGVUb0ludGVnZXIgPSBt
X291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCBpbnRlZ2VyVmFsdWVDb252ZXJ0
ZWRUb0RvdWJsZSk7CisgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgRm9ybWF0dGVkVmFsdWUo
VmFsdWVGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9ub2RlLCB2YWx1ZU5vdENvbnZlcnRpYmxlVG9J
bnRlZ2VyKTsKKworICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8pIHsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHZhbHVlSXNaZXJvID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
b252ZXJ0RG91YmxlVG9JbnQzMiBvbiB6ZXJvIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb252ZXJ0RG91YmxlVG9JbnQz
MiBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJv
MzIoaW50ZWdlclZhbHVlKSwgdW5zdXJlKHZhbHVlSXNaZXJvKSwgdW5zdXJlKGNvbnRpbnVhdGlv
bikpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KHZhbHVlSXNaZXJvLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBMVmFsdWUgZG91Ymxl
Qml0Y2FzdFRvSW50NjQgPSBtX291dC5iaXRDYXN0KHZhbHVlLCBtX291dC5pbnQ2NCk7CisgICAg
ICAgICAgICBMVmFsdWUgc2lnbkJpdFNldCA9IG1fb3V0Lmxlc3NUaGFuKGRvdWJsZUJpdGNhc3RU
b0ludDY0LCBtX291dC5jb25zdEludDY0KDApKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKE5l
Z2F0aXZlWmVybywgRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9u
b2RlLCBzaWduQml0U2V0KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBpbnRlZ2VyVmFsdWU7CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlRG91YmxlQXNJbnQzMigpCisgICAgeworICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVl
ID0gY29udmVydERvdWJsZVRvSW50MzIobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBzaG91
bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSk7CisgICAgICAgIHNldElu
dDMyKGludGVnZXJWYWx1ZSk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVSZXAoKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpAQCAt
MTc2MSw2ICsxNzk3LDM0IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lk
IGNvbXBpbGVBcml0aFJvdW5kKCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHJlYWxQYXJ0
SXNNb3JlVGhhbkhhbGYgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUm91bmQgc2hvdWxk
IHJvdW5kIGRvd24iKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQXJpdGhSb3VuZCBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFs
dWUgaW50ZWdlclZhbHVlID0gbV9vdXQuY2VpbDY0KHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW50ZWdlclZhbHVlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGludGVnZXJWYWx1ZSk7CisK
KyAgICAgICAgTFZhbHVlIHJlYWxQYXJ0ID0gbV9vdXQuZG91YmxlU3ViKGludGVnZXJWYWx1ZSwg
dmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5kb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkKHJlYWxQYXJ0LCBtX291dC5jb25zdERvdWJsZSgwLjUpKSwgdW5zdXJlKHJlYWxQ
YXJ0SXNNb3JlVGhhbkhhbGYpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhyZWFsUGFydElzTW9yZVRoYW5IYWxm
LCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlUm91bmRlZERvd24g
PSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCBtX291dC5jb25zdERvdWJsZSgxKSk7Cisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGludGVnZXJWYWx1ZVJvdW5kZWREb3duUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKGludGVnZXJWYWx1ZVJvdW5kZWREb3duKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5
cGUsIGludGVnZXJWYWx1ZVJlc3VsdCwgaW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQpOwor
CisgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgp
KSkgeworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IGNvbnZlcnREb3VibGVUb0lu
dDMyKHJlc3VsdCwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aFJvdW5kaW5n
TW9kZSgpKSk7CisgICAgICAgICAgICBzZXRJbnQzMihpbnRlZ2VyVmFsdWUpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAgIH0KKwogICAgIHZvaWQg
Y29tcGlsZUFyaXRoU3FydCgpIHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZVNxcnQobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KIAogICAgIHZvaWQgY29tcGlsZUFyaXRoTG9nKCkgeyBz
ZXREb3VibGUobV9vdXQuZG91YmxlTG9nKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAppbmRleCBjZDRiMjVhMTZlZDRmMzA2
NTQ5Nzg5NzQxM2EwNjVlNDg1MTYzYmJmLi5lMmQ5NzNkM2MyMzE1MDQxM2E5OTk2MzlhMDBmOTEz
ZmNjYzA2Y2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTEzOSw2
ICsxMzksMTAgQEAgcHVibGljOgogICAgIAogICAgIExWYWx1ZSBpbnNlcnRFbGVtZW50KExWYWx1
ZSB2ZWN0b3IsIExWYWx1ZSBlbGVtZW50LCBMVmFsdWUgaW5kZXgpIHsgcmV0dXJuIGJ1aWxkSW5z
ZXJ0RWxlbWVudChtX2J1aWxkZXIsIHZlY3RvciwgZWxlbWVudCwgaW5kZXgpOyB9CiAKKyAgICBM
VmFsdWUgY2VpbDY0KExWYWx1ZSBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGwo
Y2VpbDY0SW50cmluc2ljKCksIG9wZXJhbmQpOworICAgIH0KICAgICBMVmFsdWUgY3RsejMyKExW
YWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNh
bGwoY3RsejMySW50cmluc2ljKCksIHhPcGVyYW5kLCB5T3BlcmFuZCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggZGY3ODY0YjBjOGQ1ZDQ1
MjJjYmUzN2IwNjgxMGI2MTQyNmZkNGFkZi4uYjlkNjE5ODgyYzk2YzZhNmQyYmZhMDdiMTJjZjJk
NGJiNWM1MWU2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRl
ICJKU0FycmF5SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCisjaW5jbHVkZSAiTWF0
aENvbW1vbi5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNwZWNpYWxpemVkVGh1bmtKSVQuaCIK
QEAgLTY4MywxNiArNjg0LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVy
YXRvcihWTSogdm0pCiAjZGVmaW5lIFVuYXJ5RG91YmxlT3BXcmFwcGVyKGZ1bmN0aW9uKSBmdW5j
dGlvbiMjV3JhcHBlcgogZW51bSBNYXRoVGh1bmtDYWxsaW5nQ29udmVudGlvbiB7IH07CiB0eXBl
ZGVmIE1hdGhUaHVua0NhbGxpbmdDb252ZW50aW9uKCpNYXRoVGh1bmspKE1hdGhUaHVua0NhbGxp
bmdDb252ZW50aW9uKTsKLWV4dGVybiAiQyIgewotCi1kb3VibGUganNSb3VuZChkb3VibGUpIFJF
RkVSRU5DRURfRlJPTV9BU007Ci1kb3VibGUganNSb3VuZChkb3VibGUgZCkKLXsKLSAgICBkb3Vi
bGUgaW50ZWdlciA9IGNlaWwoZCk7Ci0gICAgcmV0dXJuIGludGVnZXIgLSAoaW50ZWdlciAtIGQg
PiAwLjUpOwotfQotCi19CiAKICNpZiBDUFUoWDg2XzY0KSAmJiBDT01QSUxFUihHQ0MpICYmIChP
UyhEQVJXSU4pIHx8IE9TKExJTlVYKSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWF0aENvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXRoQ29tbW9uLmNwcAppbmRleCAyMGMxM2Q2MmNjZDU1ZTQ3OWVlOTVkMDc5MWI4NzU4OTBk
YjA4ZjMxLi41NDIwNDY2N2YxYmZiM2UxNTgyZGVmZDZmNTAyYTFiYzE0YjVmYjMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoQ29tbW9uLmNwcApAQCAtNDIwLDQgKzQy
MCwxMiBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRoUG93KGRvdWJsZSB4LCBk
b3VibGUgeSkKICAgICByZXR1cm4gbWF0aFBvd0ludGVybmFsKHgsIHkpOwogfQogCitleHRlcm4g
IkMiIHsKK2RvdWJsZSBqc1JvdW5kKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgaW50ZWdl
ciA9IGNlaWwodmFsdWUpOworICAgIHJldHVybiBpbnRlZ2VyIC0gKGludGVnZXIgLSB2YWx1ZSA+
IDAuNSk7Cit9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aENvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aENvbW1vbi5oCmluZGV4IGY3YjBhZmNiYzgzNzRiNTQ2ZWI5NGU1OWVlNzcw
YTQ0MTJhNzAzMGYuLjg0MGQ4NjM1ZmY1YTAwNGU1YTU5ZmZjZTQwNzdiYmExYTYwMmQ4NGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhDb21tb24uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoQ29tbW9uLmgKQEAgLTU0LDYgKzU0
LDEwIEBAIGlubGluZSBpbnQgY2x6MzIodWludDMyX3QgbnVtYmVyKQogI2VuZGlmCiB9CiAKK2V4
dGVybiAiQyIgeworZG91YmxlIEpJVF9PUEVSQVRJT04ganNSb3VuZChkb3VibGUgdmFsdWUpIFJF
RkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOworfQorCiB9CiAKICNlbmRpZiAvLyBNYXRo
Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhP
YmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAK
aW5kZXggOGU3ZDYzMjkyOTRiM2MyOGE1M2IxMjIyYWY5NGIyMDE0Y2M4YWIyMy4uZDIzZTQ2YjZi
ZjNhMjIzMGU4MDdkNTNkNDgyZmNmM2NiZWExYjMzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKQEAgLTI2OCw5ICsyNjgsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgZG91YmxlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVy
KGV4ZWMpOwotICAgIGRvdWJsZSBpbnRlZ2VyID0gY2VpbChhcmcpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoaW50ZWdlciAtIChpbnRlZ2VyIC0gYXJnID4gMC41KSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoanNSb3VuZChleGVjLT5hcmd1bWVu
dCgwKS50b051bWJlcihleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jU2lnbihFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcm91bmQtYmFzaWNzLmpzIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXJvdW5kLWJhc2ljcy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yZTM4Yzc2ZTA1MzQ3NzZmODVmMzNiNDRkMzNlNTY3ZDAwZGZhY2I0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXJvdW5kLWJh
c2ljcy5qcwpAQCAtMCwwICsxLDI1NyBAQAorCitmdW5jdGlvbiBtYXRoUm91bmRPbkludGVnZXJz
KHZhbHVlKQoreworICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTsKK30KK25vSW5saW5lKG1h
dGhSb3VuZE9uSW50ZWdlcnMpOworCitmdW5jdGlvbiBtYXRoUm91bmRPbkRvdWJsZXModmFsdWUp
Cit7CisgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpOworfQorbm9JbmxpbmUobWF0aFJvdW5k
T25Eb3VibGVzKTsKKworZnVuY3Rpb24gbWF0aFJvdW5kT25Cb29sZWFucyh2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7Cit9Citub0lubGluZShtYXRoUm91bmRPbkJvb2xl
YW5zKTsKKworLy8gVGhlIHRyaXZpYWwgY2FzZXMgZmlyc3QuCitmb3IgKHZhciBpID0gMTsgaSA8
IDFlNDsgKytpKSB7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uSW50ZWdlcnMo
aSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3Vu
ZE9uSW50ZWdlcnMoIiArIGkgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91
bmRlZFZhbHVlID0gbWF0aFJvdW5kT25JbnRlZ2VycygtaSk7CisgICAgaWYgKHJvdW5kZWRWYWx1
ZSAhPT0gLWkpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkludGVnZXJzKCIgKyAtaSArICIp
ID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciBkb3VibGVMb3cgPSBpICsgMC40OworICAg
IHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmRPbkRvdWJsZXMoZG91YmxlTG93KTsKKyAgICBp
ZiAocm91bmRlZFZhbHVlICE9PSBpKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25Eb3VibGVz
KCIgKyBkb3VibGVMb3cgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91Ymxl
SGlnaCA9IGkgKyAwLjY7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uRG91Ymxl
cyhkb3VibGVIaWdoKTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSBpICsgMSkKKyAgICAgICAg
dGhyb3cgIm1hdGhSb3VuZE9uRG91YmxlcygiICsgZG91YmxlSGlnaCArICIpID0gIiArIHJvdW5k
ZWRWYWx1ZTsKKworICAgIHZhciBkb3VibGVNaWQgPSBpICsgMC41OworICAgIHZhciByb3VuZGVk
VmFsdWUgPSBtYXRoUm91bmRPbkRvdWJsZXMoZG91YmxlTWlkKTsKKyAgICBpZiAocm91bmRlZFZh
bHVlICE9PSBpICsgMSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZE9uRG91YmxlcygiICsgZG91
YmxlTWlkICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9
IG1hdGhSb3VuZE9uRG91YmxlcygtMC42KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAtMSkK
KyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZE9uRG91YmxlcygtMC42KSA9ICIgKyByb3VuZGVkVmFs
dWU7Cit9CisKKy8vIFNvbWUgbW9yZSBpbnRlcmVzdGluZyBjYXNlcywgc29tZSBvZiB0aGVtIHdl
bGwgT1NSIGV4aXQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCitmb3IgKHZhciBpID0g
MDsgaSA8IDFlNDsgKytpKSB7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uSW50
ZWdlcnMoaSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIm1h
dGhSb3VuZE9uSW50ZWdlcnMoIiArIGkgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2
YXIgcm91bmRlZFZhbHVlID0gbWF0aFJvdW5kT25JbnRlZ2VycygtaSk7CisgICAgaWYgKHJvdW5k
ZWRWYWx1ZSAhPT0gLWkpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkludGVnZXJzKC0iICsg
aSArICIpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRo
Um91bmRPbkRvdWJsZXMoLTAuNCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gMCkKKyAgICAg
ICAgdGhyb3cgIm1hdGhSb3VuZE9uRG91YmxlcygtMC40KSA9ICIgKyByb3VuZGVkVmFsdWU7CisK
KyAgICB2YXIgcm91bmRlZFZhbHVlID0gbWF0aFJvdW5kT25Eb3VibGVzKC0wLjUpOworICAgIGlm
IChyb3VuZGVkVmFsdWUgIT09IDApCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMo
LTAuNSkgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhS
b3VuZE9uRG91YmxlcygtMCk7CisgICAgaWYgKCEocm91bmRlZFZhbHVlID09PSAwICYmICgxL3Jv
dW5kZWRWYWx1ZSkgPT09IC1JbmZpbml0eSkpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRv
dWJsZXMoLTApID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciByb3VuZGVkVmFsdWUgPSBt
YXRoUm91bmRPbkRvdWJsZXMoTmFOKTsKKyAgICBpZiAocm91bmRlZFZhbHVlID09PSByb3VuZGVk
VmFsdWUpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRPbkRvdWJsZXMoTmFOKSA9ICIgKyByb3Vu
ZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gbWF0aFJvdW5kT25Eb3VibGVzKE51
bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gTnVtYmVy
LlBPU0lUSVZFX0lORklOSVRZKQorICAgICAgICB0aHJvdyAibWF0aFJvdW5kT25Eb3VibGVzKE51
bWJlci5QT1NJVElWRV9JTkZJTklUWSkgPSAiICsgcm91bmRlZFZhbHVlOworCisgICAgdmFyIHJv
dW5kZWRWYWx1ZSA9IG1hdGhSb3VuZE9uRG91YmxlcyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkp
OworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkKKyAg
ICAgICAgdGhyb3cgIm1hdGhSb3VuZE9uRG91YmxlcyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkp
ID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciBib29sZWFuID0gISEoaSAlIDIpOworICAg
IHZhciByb3VuZGVkQm9vbGVhbiA9IG1hdGhSb3VuZE9uQm9vbGVhbnMoYm9vbGVhbik7CisgICAg
aWYgKHJvdW5kZWRCb29sZWFuICE9IGJvb2xlYW4pCisgICAgICAgIHRocm93ICJtYXRoUm91bmRP
bkRvdWJsZXMoIiArIGJvb2xlYW4gKyAiKSA9ICIgKyByb3VuZGVkQm9vbGVhbjsKK30KKworZnVu
Y3Rpb24gdXNlbGVzc01hdGhSb3VuZCh2YWx1ZSkKK3sKKyAgICByZXR1cm4gTWF0aC5yb3VuZCh2
YWx1ZXwwKTsKK30KK25vSW5saW5lKHVzZWxlc3NNYXRoUm91bmQpOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDFlNDsgKytpKSB7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IHVzZWxlc3NNYXRoUm91
bmQoaSk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgInVzZWxl
c3NNYXRoUm91bmQoIiArIGkgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91
YmxlTG93ID0gaSArIDAuNDsKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gdXNlbGVzc01hdGhSb3Vu
ZChkb3VibGVMb3cpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09IGkpCisgICAgICAgIHRocm93
ICJ1c2VsZXNzTWF0aFJvdW5kKCIgKyBkb3VibGVMb3cgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7
CisKKyAgICB2YXIgZG91YmxlSGlnaCA9IGkgKyAwLjY7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9
IHVzZWxlc3NNYXRoUm91bmQoZG91YmxlSGlnaCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAhPT0g
aSkKKyAgICAgICAgdGhyb3cgInVzZWxlc3NNYXRoUm91bmQoIiArIGRvdWJsZUhpZ2ggKyAiKSA9
ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgZG91YmxlTWlkID0gaSArIDAuNTsKKyAgICB2
YXIgcm91bmRlZFZhbHVlID0gdXNlbGVzc01hdGhSb3VuZChkb3VibGVNaWQpOworICAgIGlmIChy
b3VuZGVkVmFsdWUgIT09IGkpCisgICAgICAgIHRocm93ICJ1c2VsZXNzTWF0aFJvdW5kKCIgKyBk
b3VibGVNaWQgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVl
ID0gdXNlbGVzc01hdGhSb3VuZCgtMC40KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAwKQor
ICAgICAgICB0aHJvdyAidXNlbGVzc01hdGhSb3VuZCgtMC40KSA9ICIgKyByb3VuZGVkVmFsdWU7
CisKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gdXNlbGVzc01hdGhSb3VuZCgtMC41KTsKKyAgICBp
ZiAocm91bmRlZFZhbHVlICE9PSAwKQorICAgICAgICB0aHJvdyAidXNlbGVzc01hdGhSb3VuZCgt
MC41KSA9ICIgKyByb3VuZGVkVmFsdWU7CisKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gdXNlbGVz
c01hdGhSb3VuZCgtMC42KTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSAwKQorICAgICAgICB0
aHJvdyAidXNlbGVzc01hdGhSb3VuZCgtMC42KSA9ICIgKyByb3VuZGVkVmFsdWU7Cit9CisKK2Z1
bmN0aW9uIG1hdGhSb3VuZFdpdGhPdmVyZmxvdyh2YWx1ZSkKK3sKKyAgICByZXR1cm4gTWF0aC5y
b3VuZCh2YWx1ZSk7Cit9Citub0lubGluZShtYXRoUm91bmRXaXRoT3ZlcmZsb3cpOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgdmFyIGJpZ1ZhbHVlID0gMTAwMDAwMDAw
MDAwMDsKKyAgICB2YXIgcm91bmRlZFZhbHVlID0gbWF0aFJvdW5kV2l0aE92ZXJmbG93KGJpZ1Zh
bHVlKTsKKyAgICBpZiAocm91bmRlZFZhbHVlICE9PSBiaWdWYWx1ZSkKKyAgICAgICAgdGhyb3cg
Im1hdGhSb3VuZFdpdGhPdmVyZmxvdygiICsgYmlnVmFsdWUgKyAiKSA9ICIgKyByb3VuZGVkVmFs
dWU7Cit9CisKK2Z1bmN0aW9uIG1hdGhSb3VuZENvbnN1bWVkQXNEb3VibGUodmFsdWUpCit7Cisg
ICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUpICogMC41OworfQorbm9JbmxpbmUobWF0aFJvdW5k
Q29uc3VtZWRBc0RvdWJsZSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICB2YXIgZG91YmxlVmFsdWUgPSBpICsgMC4xOworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRo
Um91bmRDb25zdW1lZEFzRG91YmxlKGRvdWJsZVZhbHVlKTsKKyAgICBpZiAocm91bmRlZFZhbHVl
ICE9PSAoaSAqIDAuNSkpCisgICAgICAgIHRocm93ICJtYXRoUm91bmRDb25zdW1lZEFzRG91Ymxl
KCIgKyBkb3VibGVWYWx1ZSArICIpID0gIiArIHJvdW5kZWRWYWx1ZTsKKworICAgIHZhciBkb3Vi
bGVWYWx1ZSA9IGkgKyAwLjY7CisgICAgdmFyIHJvdW5kZWRWYWx1ZSA9IG1hdGhSb3VuZENvbnN1
bWVkQXNEb3VibGUoZG91YmxlVmFsdWUpOworICAgIGlmIChyb3VuZGVkVmFsdWUgIT09ICgoaSAr
IDEpICogMC41KSkKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZENvbnN1bWVkQXNEb3VibGUoIiAr
IGRvdWJsZVZhbHVlICsgIikgPSAiICsgcm91bmRlZFZhbHVlOworCit9CisKK2Z1bmN0aW9uIG1h
dGhSb3VuZERvZXNOb3RDYXJlQWJvdXRNaW51c1plcm8odmFsdWUpCit7CisgICAgcmV0dXJuIE1h
dGgucm91bmQodmFsdWUpfDA7Cit9Citub0lubGluZShtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0
TWludXNaZXJvKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIHZhciBk
b3VibGVNaWQgPSBpICsgMC41OworICAgIHZhciByb3VuZGVkVmFsdWUgPSBtYXRoUm91bmREb2Vz
Tm90Q2FyZUFib3V0TWludXNaZXJvKGRvdWJsZU1pZCk7CisgICAgaWYgKHJvdW5kZWRWYWx1ZSAh
PT0gaSArIDEpCisgICAgICAgIHRocm93ICJtYXRoUm91bmREb2VzTm90Q2FyZUFib3V0TWludXNa
ZXJvKCIgKyBkb3VibGVNaWQgKyAiKSA9ICIgKyByb3VuZGVkVmFsdWU7Cit9CisKKworLy8gKioq
IEZ1bmN0aW9uIGFyZ3VtZW50cy4gKioqCitmdW5jdGlvbiBtYXRoUm91bmROb0FyZ3VtZW50cygp
Cit7CisgICAgcmV0dXJuIE1hdGgucm91bmQoKTsKK30KK25vSW5saW5lKG1hdGhSb3VuZE5vQXJn
dW1lbnRzKTsKKworZnVuY3Rpb24gbWF0aFJvdW5kVG9vTWFueUFyZ3VtZW50cyhhLCBiLCBjKQor
eworICAgIHJldHVybiBNYXRoLnJvdW5kKGEsIGIsIGMpOworfQorbm9JbmxpbmUobWF0aFJvdW5k
VG9vTWFueUFyZ3VtZW50cyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICB2YXIgdmFsdWUgPSBtYXRoUm91bmROb0FyZ3VtZW50cygpOworICAgIGlmICh2YWx1ZSA9PT0g
dmFsdWUpCisgICAgICAgIHRocm93ICJtYXRoUm91bmROb0FyZ3VtZW50cygpID0gIiArIHZhbHVl
OworCisgICAgdmFyIHZhbHVlID0gbWF0aFJvdW5kVG9vTWFueUFyZ3VtZW50cygyLjEsIDMsIDUp
OworICAgIGlmICh2YWx1ZSAhPT0gMikKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZFRvb01hbnlB
cmd1bWVudHMoKSA9ICIgKyB2YWx1ZTsKK30KKworCisvLyAqKiogQ29uc3RhbnQgYXMgYXJndW1l
bnRzLiAqKioKK2Z1bmN0aW9uIHRlc3RNYXRoUm91bmRPbkNvbnN0YW50cygpCit7CisgICAgdmFy
IHZhbHVlID0gTWF0aC5yb3VuZCgwKTsKKyAgICBpZiAodmFsdWUgIT09IDApCisgICAgICAgIHRo
cm93ICJNYXRoLnJvdW5kKDApID0gIiArIHZhbHVlOworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91
bmQoLTApOworICAgIGlmICghKHZhbHVlID09PSAwICYmICgxL3ZhbHVlKSA9PT0gLUluZmluaXR5
KSkKKyAgICAgICAgdGhyb3cgIk1hdGgucm91bmQoLTApID0gIiArIHZhbHVlOworICAgIHZhciB2
YWx1ZSA9IE1hdGgucm91bmQoMSk7CisgICAgaWYgKHZhbHVlICE9PSAxKQorICAgICAgICB0aHJv
dyAiTWF0aC5yb3VuZCgxKSA9ICIgKyB2YWx1ZTsKKyAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5k
KC0xKTsKKyAgICBpZiAodmFsdWUgIT09IC0xKQorICAgICAgICB0aHJvdyAiTWF0aC5yb3VuZCgt
MSkgPSAiICsgdmFsdWU7CisgICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZCg0Mik7CisgICAgaWYg
KHZhbHVlICE9PSA0MikKKyAgICAgICAgdGhyb3cgIk1hdGgucm91bmQoNDIpID0gIiArIHZhbHVl
OworICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoLTQyLjIpOworICAgIGlmICh2YWx1ZSAhPT0g
LTQyKQorICAgICAgICB0aHJvdyAiTWF0aC5yb3VuZCgtNDIuMikgPSAiICsgdmFsdWU7CisgICAg
dmFyIHZhbHVlID0gTWF0aC5yb3VuZChOYU4pOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisg
ICAgICAgIHRocm93ICJNYXRoLnJvdW5kKE5hTikgPSAiICsgdmFsdWU7CisgICAgdmFyIHZhbHVl
ID0gTWF0aC5yb3VuZChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVEkpOworICAgIGlmICh2YWx1ZSA9
PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJNYXRoLnJvdW5kKE51bWJlci5QT1NJVElWRV9JTkZJ
TklUSSkgPSAiICsgdmFsdWU7CisgICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZChOdW1iZXIuTkVH
QVRJVkVfSU5GSU5JVEkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93
ICJNYXRoLnJvdW5kKE51bWJlci5ORUdBVElWRV9JTkZJTklUSSkgPSAiICsgdmFsdWU7CisgICAg
dmFyIHZhbHVlID0gTWF0aC5yb3VuZChNYXRoLkUpOworICAgIGlmICh2YWx1ZSAhPT0gMykKKyAg
ICAgICAgdGhyb3cgIk1hdGgucm91bmQoTWF0aC5FKSA9ICIgKyB2YWx1ZTsKK30KK25vSW5saW5l
KHRlc3RNYXRoUm91bmRPbkNvbnN0YW50cyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICB0ZXN0TWF0aFJvdW5kT25Db25zdGFudHMoKTsKK30KKworCisvLyAqKiogU3Ry
dWN0IHRyYW5zaXRpb24uICoqKgorZnVuY3Rpb24gbWF0aFJvdW5kU3RydWN0VHJhbnNpdGlvbih2
YWx1ZSkKK3sKKyAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7Cit9Citub0lubGluZShtYXRo
Um91bmRTdHJ1Y3RUcmFuc2l0aW9uKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
eworICAgIHZhciB2YWx1ZSA9IG1hdGhSb3VuZFN0cnVjdFRyYW5zaXRpb24oNDIuNSk7CisgICAg
aWYgKHZhbHVlICE9PSA0MykKKyAgICAgICAgdGhyb3cgIm1hdGhSb3VuZFN0cnVjdFRyYW5zaXRp
b24oNDIuNSkgPSAiICsgdmFsdWU7Cit9CisKK01hdGgucm91bmQgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIGFyZ3VtZW50c1swXSArIDU7IH0KKwordmFyIHZhbHVlID0gbWF0aFJvdW5kU3RydWN0VHJh
bnNpdGlvbig0Mik7CitpZiAodmFsdWUgIT09IDQ3KQorICAgIHRocm93ICJtYXRoUm91bmRTdHJ1
Y3RUcmFuc2l0aW9uKDQyKSBhZnRlciB0cmFuc2l0aW9uID0gIiArIHZhbHVlOwo=
</data>
<flag name="review"
          id="277472"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>