<?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>143422</bug_id>
          
          <creation_ts>2015-04-05 13:10:00 -0700</creation_ts>
          <short_desc>Return Optional&lt;uint32_t&gt; from PropertyName::asIndex</short_desc>
          <delta_ts>2015-04-06 05:42:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>140426</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1082920</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-05 13:10:00 -0700</bug_when>
    <thetext>Spawn from https://bugs.webkit.org/show_bug.cgi?id=140426.
To re-land https://bugs.webkit.org/show_bug.cgi?id=140426, we first extract simple refactoring patch from the target issue.

In this patch, change return value of asIndex from uint32_t to Optional&lt;uint32_t&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082927</commentid>
    <comment_count>1</comment_count>
      <attachid>250163</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-05 13:15:32 -0700</bug_when>
    <thetext>Created attachment 250163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082928</commentid>
    <comment_count>2</comment_count>
      <attachid>250163</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-05 13:17:00 -0700</bug_when>
    <thetext>Comment on attachment 250163
Patch

Seems cleaner than using a magic value, but there is some performance risk. Did you run the performance tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082930</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-05 13:22:15 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 250163 [details]
&gt; Patch
&gt; 
&gt; Seems cleaner than using a magic value, but there is some performance risk.
&gt; Did you run the performance tests?

OK! I&apos;ll do performance tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082931</commentid>
    <comment_count>4</comment_count>
      <attachid>250164</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-05 13:24:34 -0700</bug_when>
    <thetext>Created attachment 250164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082932</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-05 13:25:02 -0700</bug_when>
    <thetext>I&apos;ve updated the patch to pass the binding tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082938</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-05 14:10:04 -0700</bug_when>
    <thetext>Took the run-jsc-benchmarks result.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, and JSRegress on yusuke (MacBookPro8,2).

VMs tested:
&quot;Baseline&quot; at /Users/yusuke/dev/WebKit/WebKitBuild/Release/jsc
&quot;Mine&quot; at /Users/yusuke/dev/WebKit/WebKitBuild/index/Release/jsc

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

                                                         Baseline                    Mine                                       
SunSpider:
   3d-cube                                            5.4728+-0.8000            5.4165+-0.4810          might be 1.0104x faster
   3d-morph                                           5.9995+-0.0589     ?      6.0229+-0.1378        ?
   3d-raytrace                                        7.4490+-0.8991            6.8873+-0.2474          might be 1.0816x faster
   access-binary-trees                                2.4670+-0.0556     ?      2.4680+-0.1416        ?
   access-fannkuch                                    6.2453+-0.1753     ?      6.4904+-0.9798        ? might be 1.0392x slower
   access-nbody                                       3.7012+-2.1074            3.2291+-0.6342          might be 1.1462x faster
   access-nsieve                                      3.5394+-0.1589     ?      3.5939+-0.2110        ? might be 1.0154x slower
   bitops-3bit-bits-in-byte                           1.9302+-0.0859     ?      1.9472+-0.0797        ?
   bitops-bits-in-byte                                3.5703+-0.0539     ?      3.5969+-0.0792        ?
   bitops-bitwise-and                                 2.3936+-0.1824            2.3665+-0.2073          might be 1.0114x faster
   bitops-nsieve-bits                                 4.1790+-0.0881            4.0652+-0.1343          might be 1.0280x faster
   controlflow-recursive                              2.4288+-0.0964            2.3182+-0.0486          might be 1.0477x faster
   crypto-aes                                         4.5078+-0.1778     ?      4.6695+-0.1497        ? might be 1.0359x slower
   crypto-md5                                         2.7092+-0.0480            2.6791+-0.0847          might be 1.0112x faster
   crypto-sha1                                        2.8290+-0.2371            2.8149+-0.2483        
   date-format-tofte                                  9.7230+-0.2114            9.6030+-0.0532          might be 1.0125x faster
   date-format-xparb                                  5.7005+-0.2249            5.5720+-0.1840          might be 1.0231x faster
   math-cordic                                        3.4178+-0.0576            3.3848+-0.0491        
   math-partial-sums                                  6.0042+-1.1125            5.8710+-1.0158          might be 1.0227x faster
   math-spectral-norm                                 2.3990+-0.0434     ?      2.4067+-0.1073        ?
   regexp-dna                                         8.9366+-4.4004            7.4221+-0.0368          might be 1.2041x faster
   string-base64                                      5.8749+-2.8253     ?      6.1243+-2.2366        ? might be 1.0425x slower
   string-fasta                                       7.2150+-0.2122            7.2086+-0.1902        
   string-tagcloud                                   10.4259+-0.2290     ?     10.5206+-0.3712        ?
   string-unpack-code                                22.4555+-3.5757     ?     26.9509+-5.7439        ? might be 1.2002x slower
   string-validate-input                              5.2610+-0.1823     ?      5.3085+-0.0764        ?

   &lt;arithmetic&gt;                                       5.6475+-0.3005     ?      5.7284+-0.1260        ? might be 1.0143x slower

                                                         Baseline                    Mine                                       
LongSpider:
   3d-cube                                          963.8527+-37.0709    ?    982.1213+-16.0707       ? might be 1.0190x slower
   3d-morph                                        1590.6920+-7.0415     ?   1599.4299+-13.7053       ?
   3d-raytrace                                      825.1250+-5.9263     ?    828.6057+-12.3930       ?
   access-binary-trees                             1143.8883+-19.2819    ?   1146.9945+-18.6927       ?
   access-fannkuch                                  344.4578+-14.9871    ?    349.3720+-3.3791        ? might be 1.0143x slower
   access-nbody                                     668.8215+-10.6692    ?    670.9675+-7.8058        ?
   access-nsieve                                    954.6959+-32.0667    ?    962.6248+-24.1956       ?
   bitops-3bit-bits-in-byte                          51.8857+-0.5068           51.8080+-0.2039        
   bitops-bits-in-byte                               98.5856+-3.9911     ?    100.6520+-8.8912        ? might be 1.0210x slower
   bitops-nsieve-bits                               816.9312+-13.5383         813.5010+-17.2267       
   controlflow-recursive                            532.2280+-10.9280         524.4557+-5.1789          might be 1.0148x faster
   crypto-aes                                       770.8790+-21.0214    ?    784.4233+-12.3460       ? might be 1.0176x slower
   crypto-md5                                       632.2375+-20.4835    ?    645.8077+-20.2416       ? might be 1.0215x slower
   crypto-sha1                                      745.1247+-17.4889         743.0477+-21.1577       
   date-format-tofte                                814.8959+-20.0143         799.8657+-30.3600         might be 1.0188x faster
   date-format-xparb                                809.2614+-35.1035         805.5229+-52.8847       
   math-cordic                                      656.7354+-2.6095     ?    659.4233+-4.2510        ?
   math-partial-sums                                588.7678+-0.7551     ?    589.5973+-6.7478        ?
   math-spectral-norm                               912.9001+-23.5951         908.9229+-12.1131       
   string-base64                                    427.0251+-20.1482         422.0098+-10.0096         might be 1.0119x faster
   string-fasta                                     489.6420+-9.4650     ?    492.7524+-10.2720       ?
   string-tagcloud                                  240.0890+-6.5187          238.2360+-11.0486       

   &lt;geometric&gt;                                      560.9707+-2.7008     ?    562.4229+-1.3472        ? might be 1.0026x slower

                                                         Baseline                    Mine                                       
V8Spider:
   crypto                                            62.6360+-1.9466     ?     62.8113+-1.4833        ?
   deltablue                                        103.7214+-6.2591     ?    109.5897+-32.4267       ? might be 1.0566x slower
   earley-boyer                                      45.8506+-1.6876           45.3932+-1.3407          might be 1.0101x faster
   raytrace                                          42.0208+-2.2243     ?     42.2401+-3.9443        ?
   regexp                                            82.6570+-31.6249          74.7061+-6.1523          might be 1.1064x faster
   richards                                          85.4338+-5.3182     ?     85.8752+-1.9087        ?
   splay                                             42.5330+-2.3785           41.3793+-4.4077          might be 1.0279x faster

   &lt;geometric&gt;                                       62.4185+-3.5209           61.8101+-1.4409          might be 1.0098x faster

                                                         Baseline                    Mine                                       
Octane:
   encrypt                                           0.26024+-0.00511          0.25863+-0.00134       
   decrypt                                           4.53915+-0.01522    ?     4.62799+-0.12266       ? might be 1.0196x slower
   deltablue                                x2       0.22581+-0.00155          0.22391+-0.00670       
   earley                                            0.65923+-0.01228    ?     0.66978+-0.00849       ? might be 1.0160x slower
   boyer                                             7.35405+-0.12621          7.33505+-0.10590       
   navier-stokes                            x2       5.42004+-0.06721          5.41545+-0.03138       
   raytrace                                 x2       1.45171+-0.07619    ?     1.45455+-0.06387       ?
   richards                                 x2       0.12153+-0.00142          0.12076+-0.00226       
   splay                                    x2       0.42045+-0.01134    ?     0.43039+-0.00912       ? might be 1.0236x slower
   regexp                                   x2      35.44749+-0.54879    ?    35.87830+-0.56797       ? might be 1.0122x slower
   pdfjs                                    x2      50.47327+-2.43581         49.57198+-1.02629         might be 1.0182x faster
   mandreel                                 x2      59.67650+-0.68640    ?    59.82963+-0.79771       ?
   gbemu                                    x2      47.10523+-4.57073         44.47309+-4.61054         might be 1.0592x faster
   closure                                           0.59604+-0.00607          0.59562+-0.00783       
   jquery                                            7.55609+-0.05813          7.55298+-0.12013       
   box2d                                    x2      13.39275+-0.06457         13.31189+-0.10888       
   zlib                                     x2     419.00498+-28.66742   ?   431.68833+-8.43290       ? might be 1.0303x slower
   typescript                               x2     889.50519+-37.60563       881.11877+-19.18283      

   &lt;geometric&gt;                                       7.42702+-0.10647          7.41530+-0.03014         might be 1.0016x faster

                                                         Baseline                    Mine                                       
JSRegress:
   abs-boolean                                        3.1712+-0.1103            3.1113+-0.1917          might be 1.0193x faster
   adapt-to-double-divide                            17.2542+-0.3004           17.2184+-0.2685        
   aliased-arguments-getbyval                         1.3577+-0.3699            1.2651+-0.0359          might be 1.0732x faster
   allocate-big-object                                2.7606+-0.1186     ?      2.7935+-0.0625        ? might be 1.0119x slower
   arguments-named-and-reflective                    12.8412+-0.2642     ?     14.1688+-4.4550        ? might be 1.1034x slower
   arguments-out-of-bounds                           15.8792+-0.7138     ?     16.2370+-1.9135        ? might be 1.0225x slower
   arguments-strict-mode                             11.8253+-0.4943     ?     12.7440+-2.4614        ? might be 1.0777x slower
   arguments                                         11.2299+-2.8388     ?     13.3657+-4.8875        ? might be 1.1902x slower
   arity-mismatch-inlining                            0.9833+-0.0349     ?      1.0437+-0.2602        ? might be 1.0615x slower
   array-access-polymorphic-structure                 8.6103+-4.0435            8.3442+-3.6547          might be 1.0319x faster
   array-nonarray-polymorhpic-access                 41.1108+-2.5298     ?     41.5039+-0.5055        ?
   array-prototype-every                            105.9562+-6.5638          102.4488+-6.1615          might be 1.0342x faster
   array-prototype-forEach                           95.7275+-3.6263     ?     99.3962+-3.5015        ? might be 1.0383x slower
   array-prototype-map                              111.6138+-9.5198     ?    113.7448+-9.2987        ? might be 1.0191x slower
   array-prototype-some                             101.5960+-2.8227     ?    105.9019+-2.4381        ? might be 1.0424x slower
   array-splice-contiguous                           44.0683+-0.3376     !     50.8796+-4.9708        ! definitely 1.1546x slower
   array-with-double-add                              4.4845+-0.2154            4.4835+-0.1250        
   array-with-double-increment                        3.7843+-0.1433            3.7607+-0.1507        
   array-with-double-mul-add                          5.1589+-0.1502     ?      5.1995+-0.1775        ?
   array-with-double-sum                              3.4427+-0.1192     ?      3.4989+-0.1296        ? might be 1.0163x slower
   array-with-int32-add-sub                           8.0975+-1.3772            7.6633+-0.0363          might be 1.0567x faster
   array-with-int32-or-double-sum                     3.5690+-0.1629            3.4716+-0.1304          might be 1.0281x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     44.4770+-4.1496     ?     45.1591+-3.8765        ? might be 1.0153x slower
   ArrayBuffer-DataView-alloc-long-lived             18.5956+-5.2774     ?     18.9675+-5.6732        ? might be 1.0200x slower
   ArrayBuffer-Int32Array-byteOffset                  4.0450+-0.1870     ?      4.0840+-0.1466        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     45.5698+-9.1380           41.2944+-5.6286          might be 1.1035x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     28.6320+-3.4945           26.9313+-4.5806          might be 1.0631x faster
   ArrayBuffer-Int8Array-alloc-long-lived            18.8895+-5.2728           15.5963+-0.8311          might be 1.2112x faster
   ArrayBuffer-Int8Array-alloc                       15.6907+-4.6696           14.3686+-4.6200          might be 1.0920x faster
   asmjs_bool_bug                                     7.9344+-0.3574     ?      9.1515+-4.3391        ? might be 1.1534x slower
   assign-custom-setter-polymorphic                   3.1378+-0.1019     ?      3.3991+-0.2125        ? might be 1.0833x slower
   assign-custom-setter                               4.7515+-1.7696     ?      5.1623+-1.8482        ? might be 1.0865x slower
   basic-set                                          9.4924+-0.5221            9.3685+-0.2768          might be 1.0132x faster
   big-int-mul                                        4.4364+-0.1603     ?      4.5220+-0.0757        ? might be 1.0193x slower
   boolean-test                                       3.3756+-0.1041     ?      3.4240+-0.1071        ? might be 1.0143x slower
   branch-fold                                        4.2162+-0.0816     ?      4.2191+-0.1399        ?
   by-val-generic                                     8.7337+-0.4612     ?      8.8880+-0.6735        ? might be 1.0177x slower
   call-spread-apply                                 38.1036+-7.3061           36.6840+-2.3367          might be 1.0387x faster
   call-spread-call                                  30.9249+-4.8378           26.5129+-0.4207          might be 1.1664x faster
   captured-assignments                               0.4927+-0.0302            0.4842+-0.0166          might be 1.0175x faster
   cast-int-to-double                                 5.6306+-0.0442            5.5779+-0.0088        
   cell-argument                                      9.1119+-1.3226            8.6714+-0.3333          might be 1.0508x faster
   cfg-simplify                                       3.1141+-0.0221     ?      3.2049+-0.1134        ? might be 1.0292x slower
   chain-getter-access                               11.2617+-0.1997           11.1060+-0.1881          might be 1.0140x faster
   cmpeq-obj-to-obj-other                            11.1790+-1.6089           11.0079+-1.0597          might be 1.0155x faster
   constant-test                                      5.2217+-0.0431     ?      5.2531+-0.0682        ?
   DataView-custom-properties                        48.0289+-7.9462     ?     48.5387+-8.0144        ? might be 1.0106x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.5673+-0.0838            0.5235+-0.0419          might be 1.0836x faster
   delay-tear-off-arguments-strictmode               15.8000+-2.2125           15.2386+-1.2955          might be 1.0368x faster
   deltablue-varargs                                217.0242+-7.4807     ?    217.2670+-2.3494        ?
   destructuring-arguments                           19.1172+-2.8099           18.6813+-2.5434          might be 1.0233x faster
   destructuring-swap                                 5.3843+-0.0411            5.3520+-0.0838        
   direct-arguments-getbyval                          1.2620+-0.0492            1.2408+-0.0355          might be 1.0171x faster
   div-boolean-double                                 5.4968+-0.0303            5.4675+-0.0340        
   div-boolean                                        8.1074+-0.1328            8.0421+-0.0796        
   double-get-by-val-out-of-bounds                    4.8849+-0.0809            4.8160+-0.0420          might be 1.0143x faster
   double-pollution-getbyval                          9.0854+-0.1473     ?      9.1086+-0.2933        ?
   double-pollution-putbyoffset                       4.6353+-0.0359     ?      4.7155+-0.1055        ? might be 1.0173x slower
   double-to-int32-typed-array-no-inline              2.4175+-0.0497            2.4010+-0.0167        
   double-to-int32-typed-array                        2.1360+-0.1523            2.1110+-0.0516          might be 1.0119x faster
   double-to-uint32-typed-array-no-inline             2.4990+-0.0605            2.4684+-0.0269          might be 1.0124x faster
   double-to-uint32-typed-array                       2.1728+-0.0185     ?      2.1794+-0.0300        ?
   elidable-new-object-dag                           50.8287+-5.6290     ?     52.4270+-1.5262        ? might be 1.0314x slower
   elidable-new-object-roflcopter                    55.6030+-8.8764           55.2797+-4.6483        
   elidable-new-object-then-call                     45.5613+-3.9546     ?     47.1598+-6.0367        ? might be 1.0351x slower
   elidable-new-object-tree                          53.7068+-6.9735           53.3727+-1.7876        
   empty-string-plus-int                              6.3603+-0.2021            6.3335+-0.0821        
   emscripten-cube2hash                              41.1296+-1.0144     ?     43.6127+-5.8801        ? might be 1.0604x slower
   exit-length-on-plain-object                       18.0699+-4.9244     ?     18.4573+-6.3777        ? might be 1.0214x slower
   external-arguments-getbyval                        1.3280+-0.0959            1.3194+-0.0318        
   external-arguments-putbyval                        2.6138+-0.0244            2.5289+-0.0980          might be 1.0335x faster
   fixed-typed-array-storage-var-index                1.3746+-0.0202            1.3567+-0.0306          might be 1.0132x faster
   fixed-typed-array-storage                          0.9754+-0.0238            0.9663+-0.0622        
   Float32Array-matrix-mult                           5.5901+-1.6120            4.7168+-0.1536          might be 1.1852x faster
   Float32Array-to-Float64Array-set                  64.1066+-5.0109           59.9244+-0.6354          might be 1.0698x faster
   Float64Array-alloc-long-lived                     82.0972+-5.4398     ?     84.9577+-5.7491        ? might be 1.0348x slower
   Float64Array-to-Int16Array-set                    74.5553+-5.5475     ?     80.1657+-4.1555        ? might be 1.0753x slower
   fold-double-to-int                                17.3231+-3.3585           16.9415+-2.2147          might be 1.0225x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.4902+-1.3321     ?     12.2435+-2.0249        ? might be 1.0656x slower
   fold-get-by-id-to-multi-get-by-offset             10.4667+-0.5116            9.9415+-1.6159          might be 1.0528x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.1735+-1.0589            8.1592+-2.6484          might be 1.1243x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.8982+-1.6991            8.6125+-0.5614          might be 1.0332x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.1171+-2.5081            7.7467+-1.4516          might be 1.0478x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.8921+-0.7891     ?      6.2697+-2.0490        ? might be 1.0641x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.7900+-0.3331     ?     10.0150+-0.5047        ? might be 1.0230x slower
   fold-put-by-id-to-multi-put-by-offset              9.8240+-0.6081            9.7700+-0.9224        
   fold-put-structure                                 6.3240+-1.2606            6.1720+-1.1057          might be 1.0246x faster
   for-of-iterate-array-entries                       5.3628+-1.1827            4.9807+-0.0997          might be 1.0767x faster
   for-of-iterate-array-keys                          4.7437+-1.9610            3.9828+-0.0865          might be 1.1910x faster
   for-of-iterate-array-values                        4.1607+-0.1142            4.0010+-0.1786          might be 1.0399x faster
   fround                                            20.4772+-3.0756     ?     20.8727+-3.6465        ? might be 1.0193x slower
   ftl-library-inlining-dataview                     82.6436+-5.8080     ?     86.4006+-5.0247        ? might be 1.0455x slower
   ftl-library-inlining                             123.3502+-2.8702     ?    125.5121+-5.1245        ? might be 1.0175x slower
   function-dot-apply                                 2.4770+-0.0783            2.4688+-0.0821        
   function-test                                      3.6415+-0.1215            3.6253+-0.1249        
   function-with-eval                               111.6100+-6.8682          108.3648+-6.4637          might be 1.0299x faster
   gcse-poly-get-less-obvious                        20.0688+-2.7467     ?     22.3111+-6.3034        ? might be 1.1117x slower
   gcse-poly-get                                     22.7343+-4.1244     ?     22.7432+-2.3699        ?
   gcse                                               5.0237+-0.2064            4.9036+-0.0216          might be 1.0245x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.8990+-0.0921            2.8530+-0.0196          might be 1.0161x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      7.0207+-0.1595            6.9662+-0.0990        
   get-by-id-chain-from-try-block                     7.6265+-1.2428            7.5652+-1.7769        
   get-by-id-check-structure-elimination              5.6637+-0.1452            5.6178+-0.2028        
   get-by-id-proto-or-self                           17.5852+-0.4055     ?     18.5015+-2.0403        ? might be 1.0521x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.1572+-0.0790     ?      3.2148+-0.1795        ? might be 1.0182x slower
   get-by-id-self-or-proto                           18.7862+-1.5805           18.4402+-1.0163          might be 1.0188x faster
   get-by-val-out-of-bounds                           4.6794+-0.0249            4.6275+-0.0813          might be 1.0112x faster
   get_callee_monomorphic                             4.1124+-0.2595            4.1124+-0.1372        
   get_callee_polymorphic                             3.7286+-0.1939     ?      3.7998+-0.1970        ? might be 1.0191x slower
   getter-no-activation                               5.8640+-0.4520            5.8246+-0.4160        
   getter-richards                                  127.3353+-10.9775         126.8831+-26.6790       
   getter                                             6.0196+-0.4123     ?      6.2220+-0.3757        ? might be 1.0336x slower
   global-var-const-infer-fire-from-opt               0.9305+-0.0345     ?      1.0237+-0.1296        ? might be 1.1002x slower
   global-var-const-infer                             0.9650+-0.0534     ?      1.0363+-0.1687        ? might be 1.0739x slower
   HashMap-put-get-iterate-keys                      30.6290+-2.9309           29.6104+-0.8106          might be 1.0344x faster
   HashMap-put-get-iterate                           29.2693+-0.8405     ?     29.9103+-2.8432        ? might be 1.0219x slower
   HashMap-string-put-get-iterate                    30.8719+-2.2467           30.6392+-1.3917        
   hoist-make-rope                                   12.8452+-2.5237           12.5597+-2.8502          might be 1.0227x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.6136+-0.2778            5.5510+-0.0803          might be 1.0113x faster
   hoist-poly-check-structure                         4.0495+-0.1805     ?      4.0541+-0.0535        ?
   imul-double-only                                   8.6915+-1.7584            8.2130+-0.8261          might be 1.0583x faster
   imul-int-only                                     10.8367+-0.5468     ?     11.0787+-1.1923        ? might be 1.0223x slower
   imul-mixed                                         8.6910+-0.6408            8.1935+-0.3736          might be 1.0607x faster
   in-four-cases                                     19.6133+-0.4348     ?     19.8384+-0.3423        ? might be 1.0115x slower
   in-one-case-false                                 10.8155+-0.4761           10.7228+-0.5551        
   in-one-case-true                                  10.6777+-0.2263     ?     10.7175+-0.1112        ?
   in-two-cases                                      11.0361+-0.1466           10.9828+-0.1107        
   indexed-properties-in-objects                      3.1950+-0.0517            3.1182+-0.0599          might be 1.0246x faster
   infer-closure-const-then-mov-no-inline             4.4139+-0.8121     ?      4.4752+-0.7489        ? might be 1.0139x slower
   infer-closure-const-then-mov                      18.3303+-0.8290           17.7854+-0.3562          might be 1.0306x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.6163+-4.2070           14.5398+-3.5945        
   infer-closure-const-then-put-to-scope             24.8979+-2.7023           24.4609+-1.2600          might be 1.0179x faster
   infer-closure-const-then-reenter-no-inline   
                                                     57.2660+-4.5529           55.8890+-3.1607          might be 1.0246x faster
   infer-closure-const-then-reenter                 139.7882+-5.0840          134.0381+-6.3494          might be 1.0429x faster
   infer-constant-global-property                    31.6541+-1.1601     ?     33.7977+-4.8929        ? might be 1.0677x slower
   infer-constant-property                            2.9283+-0.1218            2.9065+-0.0166        
   infer-one-time-closure-ten-vars                   12.9520+-0.2507     ?     15.9855+-5.5922        ? might be 1.2342x slower
   infer-one-time-closure-two-vars                   12.5769+-0.1030     ?     12.7465+-0.9491        ? might be 1.0135x slower
   infer-one-time-closure                            15.2996+-2.9804           13.6155+-4.4862          might be 1.1237x faster
   infer-one-time-deep-closure                       23.9952+-3.1120           22.3605+-2.3587          might be 1.0731x faster
   inline-arguments-access                            4.5464+-0.1188            4.5109+-0.1157        
   inline-arguments-aliased-access                    4.5417+-0.0629     ?      4.5875+-0.1283        ? might be 1.0101x slower
   inline-arguments-local-escape                      5.0360+-1.1509            4.7068+-0.1299          might be 1.0699x faster
   inline-get-scoped-var                              5.6251+-0.1057            5.6070+-0.0874        
   inlined-put-by-id-transition                      11.5928+-0.4229           11.3845+-0.5392          might be 1.0183x faster
   int-or-other-abs-then-get-by-val                   5.6438+-0.0327     ?      5.6786+-0.0991        ?
   int-or-other-abs-zero-then-get-by-val             21.1117+-4.1882           18.7230+-0.2040          might be 1.1276x faster
   int-or-other-add-then-get-by-val                   5.5515+-0.0656     ?      5.9048+-1.1659        ? might be 1.0637x slower
   int-or-other-add                                   5.8378+-0.5215            5.6243+-0.0325          might be 1.0380x faster
   int-or-other-div-then-get-by-val                   4.7170+-0.0626            4.6545+-0.0398          might be 1.0134x faster
   int-or-other-max-then-get-by-val                   4.7672+-0.1313     ?      4.7842+-0.0707        ?
   int-or-other-min-then-get-by-val                   4.7142+-0.0355     ?      4.7215+-0.0446        ?
   int-or-other-mod-then-get-by-val                   4.4327+-0.0241     ?      4.4366+-0.0416        ?
   int-or-other-mul-then-get-by-val                   4.3652+-0.0174     ?      4.3847+-0.0439        ?
   int-or-other-neg-then-get-by-val                   5.1298+-0.0126     ?      5.1434+-0.0332        ?
   int-or-other-neg-zero-then-get-by-val             19.3161+-0.9409     ?     19.5073+-2.4829        ?
   int-or-other-sub-then-get-by-val                   5.5523+-0.0113     ?      5.5609+-0.0291        ?
   int-or-other-sub                                   4.1025+-0.0170     ?      4.1075+-0.0538        ?
   int-overflow-local                                 5.1008+-0.0186            5.0942+-0.0228        
   Int16Array-alloc-long-lived                       56.8171+-2.4705     ?     61.2926+-8.1071        ? might be 1.0788x slower
   Int16Array-bubble-sort-with-byteLength            23.4077+-0.8177     ?     24.3641+-1.5292        ? might be 1.0409x slower
   Int16Array-bubble-sort                            23.4490+-0.4587     ?     23.7620+-1.5722        ? might be 1.0134x slower
   Int16Array-load-int-mul                            1.7291+-0.0730            1.7038+-0.0124          might be 1.0148x faster
   Int16Array-to-Int32Array-set                      63.7480+-5.0235     ?     68.3676+-4.7267        ? might be 1.0725x slower
   Int32Array-alloc-large                            30.2376+-3.0001     ?     30.4352+-2.0257        ?
   Int32Array-alloc-long-lived                       63.6934+-2.3283     ?     65.9332+-3.3589        ? might be 1.0352x slower
   Int32Array-alloc                                   4.2391+-1.9113            3.6918+-0.2109          might be 1.1482x faster
   Int32Array-Int8Array-view-alloc                   10.0759+-4.4126     ?     10.3337+-4.3582        ? might be 1.0256x slower
   int52-spill                                        8.1835+-2.7373            7.2600+-0.1946          might be 1.1272x faster
   Int8Array-alloc-long-lived                        54.5251+-7.9219     ?     57.5613+-3.1825        ? might be 1.0557x slower
   Int8Array-load-with-byteLength                     4.0150+-0.1256            3.9263+-0.0955          might be 1.0226x faster
   Int8Array-load                                     3.9050+-0.0178     ?      3.9870+-0.1993        ? might be 1.0210x slower
   integer-divide                                    13.0622+-0.4489           12.8813+-0.3228          might be 1.0140x faster
   integer-modulo                                     2.2628+-0.0669     ?      2.3257+-0.0449        ? might be 1.0278x slower
   large-int-captured                                 6.0165+-0.1364            5.9580+-0.1089        
   large-int-neg                                     17.5143+-0.2212     ?     19.8483+-4.0416        ? might be 1.1333x slower
   large-int                                         16.1103+-0.4867     ?     16.2080+-0.9052        ?
   logical-not                                        5.0500+-0.0268     ?      5.0788+-0.0636        ?
   lots-of-fields                                    14.1647+-0.9367     ?     15.1995+-4.3364        ? might be 1.0730x slower
   make-indexed-storage                               3.4475+-0.0654            3.2689+-0.4221          might be 1.0546x faster
   make-rope-cse                                      4.8903+-0.1094     ?      6.1658+-2.5313        ? might be 1.2608x slower
   marsaglia-larger-ints                             46.7322+-3.0498     ?     47.2032+-1.3434        ? might be 1.0101x slower
   marsaglia-osr-entry                               25.0485+-0.4717           24.9874+-0.5627        
   max-boolean                                        2.9488+-0.0098     ?      2.9703+-0.1102        ?
   method-on-number                                  20.6281+-4.4328           19.4338+-0.8502          might be 1.0615x faster
   min-boolean                                        2.9882+-0.2777            2.9266+-0.1021          might be 1.0211x faster
   minus-boolean-double                               3.2296+-0.0055     ?      3.3598+-0.3791        ? might be 1.0403x slower
   minus-boolean                                      2.8410+-0.1095            2.7985+-0.0660          might be 1.0152x faster
   misc-strict-eq                                    40.0060+-0.3973     ?     40.6725+-5.4097        ? might be 1.0167x slower
   mod-boolean-double                                11.2086+-0.2232     ?     11.7517+-1.6330        ? might be 1.0485x slower
   mod-boolean                                        8.1829+-0.0462            8.1542+-0.0407        
   mul-boolean-double                                 3.8376+-0.1382     ?      3.9221+-0.1262        ? might be 1.0220x slower
   mul-boolean                                        2.9673+-0.0622            2.9462+-0.0118        
   neg-boolean                                        3.2937+-0.1022            3.2296+-0.0064          might be 1.0198x faster
   negative-zero-divide                               0.3748+-0.0318     ?      0.3782+-0.0215        ?
   negative-zero-modulo                               0.3787+-0.0199     ?      0.3887+-0.0110        ? might be 1.0266x slower
   negative-zero-negate                               0.3629+-0.0078     ?      0.3682+-0.0655        ? might be 1.0148x slower
   nested-function-parsing                           44.4224+-4.9731           43.8958+-4.3827          might be 1.0120x faster
   new-array-buffer-dead                              3.4371+-0.1608            3.3645+-0.1058          might be 1.0216x faster
   new-array-buffer-push                              7.1195+-0.2138     ?      7.4070+-0.6523        ? might be 1.0404x slower
   new-array-dead                                    12.5815+-0.4436     ?     14.1165+-2.7435        ? might be 1.1220x slower
   new-array-push                                     4.5353+-0.1844            4.4780+-0.0911          might be 1.0128x faster
   number-test                                        3.2955+-0.0485            3.2863+-0.0879        
   object-closure-call                                7.1210+-0.3304            6.9329+-0.0535          might be 1.0271x faster
   object-test                                        3.4583+-0.1338     ?      3.5635+-0.0597        ? might be 1.0304x slower
   obvious-sink-pathology-taken                     169.6821+-8.4627          167.7992+-4.4834          might be 1.0112x faster
   obvious-sink-pathology                           162.6763+-7.0008          159.3877+-2.7538          might be 1.0206x faster
   obviously-elidable-new-object                     43.4943+-3.2827           42.8768+-7.4929          might be 1.0144x faster
   plus-boolean-arith                                 2.8651+-0.0673     ?      2.9943+-0.3252        ? might be 1.0451x slower
   plus-boolean-double                                3.3726+-0.3714            3.2658+-0.1296          might be 1.0327x faster
   plus-boolean                                       2.9716+-0.1389     ?      2.9747+-0.0507        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.3776+-0.0192     ?      3.4437+-0.1375        ? might be 1.0196x slower
   poly-chain-access-different-prototypes             2.9786+-0.1681     ?      2.9811+-0.1032        ?
   poly-chain-access-simpler                          3.4057+-0.1101     ?      3.4156+-0.1338        ?
   poly-chain-access                                  2.9135+-0.1154            2.9015+-0.0687        
   poly-stricteq                                     64.3961+-7.3072           62.4650+-4.5538          might be 1.0309x faster
   polymorphic-array-call                             1.5882+-0.0252            1.4771+-0.1860          might be 1.0752x faster
   polymorphic-get-by-id                              3.3538+-0.1451            3.3067+-0.0439          might be 1.0142x faster
   polymorphic-put-by-id                             31.9478+-2.2442     ?     34.5029+-2.4863        ? might be 1.0800x slower
   polymorphic-structure                             18.7892+-2.6915     ?     19.4900+-3.9978        ? might be 1.0373x slower
   polyvariant-monomorphic-get-by-id                  9.4407+-0.1959            9.4343+-0.1861        
   proto-getter-access                               11.2573+-0.3172     ?     11.4344+-0.3244        ? might be 1.0157x slower
   put-by-id-replace-and-transition                   9.1740+-0.3741     ?     10.1770+-3.0792        ? might be 1.1093x slower
   put-by-id-slightly-polymorphic                     3.1252+-0.1680            3.0940+-0.1040          might be 1.0101x faster
   put-by-id                                         15.1715+-0.7557           15.0740+-1.2777        
   put-by-val-direct                                  0.6643+-0.0061     ?      0.6725+-0.0081        ? might be 1.0124x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.6175+-0.5142     ?      7.4323+-3.1349        ? might be 1.1231x slower
   put-by-val-machine-int                             2.8854+-0.1205     ?      2.9323+-0.0579        ? might be 1.0163x slower
   rare-osr-exit-on-local                            16.1773+-0.3255           16.1674+-0.1562        
   register-pressure-from-osr                        23.5970+-1.8443     ?     24.5271+-4.5908        ? might be 1.0394x slower
   setter                                             5.9088+-0.3518     ?      6.0733+-0.7673        ? might be 1.0278x slower
   simple-activation-demo                            26.3040+-1.3860           25.8064+-0.0978          might be 1.0193x faster
   simple-getter-access                              14.4667+-0.8893           14.3289+-0.4737        
   simple-poly-call-nested                            8.7952+-0.6204            8.4534+-0.1796          might be 1.0404x faster
   simple-poly-call                                   1.4139+-0.0601     ?      1.4622+-0.0599        ? might be 1.0341x slower
   sin-boolean                                       21.2473+-2.6042     ?     21.6674+-2.4178        ? might be 1.0198x slower
   sinkable-new-object-dag                           78.9600+-2.0671           78.4512+-3.5311        
   sinkable-new-object-taken                         63.3803+-4.9863           57.2175+-2.7497          might be 1.1077x faster
   sinkable-new-object                               47.0610+-3.4063           42.5782+-3.2692          might be 1.1053x faster
   slow-array-profile-convergence                     2.9746+-0.0496     ?      3.0407+-0.1422        ? might be 1.0222x slower
   slow-convergence                                   3.5681+-0.1377            3.4756+-0.0740          might be 1.0266x faster
   sparse-conditional                                 1.3282+-0.0310     ?      1.3317+-0.0392        ?
   splice-to-remove                                  20.5542+-4.9875     ?     21.2714+-8.8804        ? might be 1.0349x slower
   string-char-code-at                               16.5280+-0.3575     ?     16.6666+-0.3801        ?
   string-concat-object                               2.5803+-0.0999            2.5371+-0.1079          might be 1.0170x faster
   string-concat-pair-object                          2.7908+-0.6171            2.6042+-0.2954          might be 1.0716x faster
   string-concat-pair-simple                         13.4805+-1.5290     ?     14.1942+-2.5381        ? might be 1.0529x slower
   string-concat-simple                              14.4798+-1.0644     ?     15.1478+-3.4142        ? might be 1.0461x slower
   string-cons-repeat                                 8.9631+-1.6622     ?     10.2755+-3.7308        ? might be 1.1464x slower
   string-cons-tower                                  9.7698+-3.7095            9.2383+-1.7193          might be 1.0575x faster
   string-equality                                   18.4515+-0.0893     ?     18.6645+-0.8454        ? might be 1.0115x slower
   string-get-by-val-big-char                         8.5444+-0.0984     ?      8.5944+-0.2313        ?
   string-get-by-val-out-of-bounds-insane             5.4808+-3.1682            4.6411+-0.1854          might be 1.1809x faster
   string-get-by-val-out-of-bounds                    5.6083+-0.1327     ?      5.6335+-0.0352        ?
   string-get-by-val                                  3.7397+-0.1721     ?      4.3572+-1.2785        ? might be 1.1651x slower
   string-hash                                        2.3397+-0.0840            2.2964+-0.0522          might be 1.0188x faster
   string-long-ident-equality                        16.4313+-3.5977           15.7568+-1.1338          might be 1.0428x faster
   string-out-of-bounds                              18.0363+-3.9297           15.9670+-1.4067          might be 1.1296x faster
   string-repeat-arith                               36.2529+-5.4306     ?     43.3535+-16.1515       ? might be 1.1959x slower
   string-sub                                        76.0170+-4.8000     ?     82.1083+-4.6928        ? might be 1.0801x slower
   string-test                                        3.2053+-0.0881     ^      3.1030+-0.0107        ^ definitely 1.0330x faster
   string-var-equality                               33.6245+-3.5411           31.9890+-0.5994          might be 1.0511x faster
   structure-hoist-over-transitions                   2.8537+-0.0593     ?      2.8698+-0.0807        ?
   substring-concat-weird                            45.7450+-4.3758     ?     46.0608+-4.5142        ?
   substring-concat                                  45.9540+-1.7221           45.5685+-0.7512        
   substring                                         56.1453+-3.5342           51.7229+-1.3717          might be 1.0855x faster
   switch-char-constant                               2.9357+-0.0531     ?      2.9505+-0.0207        ?
   switch-char                                        6.9000+-0.7492     ?      7.2941+-0.8205        ? might be 1.0571x slower
   switch-constant                                    9.2142+-0.9055            8.8732+-0.1422          might be 1.0384x faster
   switch-string-basic-big-var                       18.5490+-4.4374           16.1915+-0.2627          might be 1.1456x faster
   switch-string-basic-big                           14.3890+-0.1840     ?     16.1319+-4.1024        ? might be 1.1211x slower
   switch-string-basic-var                           16.5894+-3.5638     ?     18.0544+-4.8912        ? might be 1.0883x slower
   switch-string-basic                               14.7998+-3.2656     ?     14.8857+-3.0979        ?
   switch-string-big-length-tower-var                21.1658+-0.2548     ?     23.5738+-4.7339        ? might be 1.1138x slower
   switch-string-length-tower-var                    20.4707+-2.9906           17.0646+-0.6731          might be 1.1996x faster
   switch-string-length-tower                        13.3731+-0.3007     ?     16.0759+-4.8973        ? might be 1.2021x slower
   switch-string-short                               14.6556+-3.6908     ?     14.9437+-4.4229        ? might be 1.0197x slower
   switch                                            13.3380+-0.2929           13.0869+-0.2710          might be 1.0192x faster
   tear-off-arguments-simple                          3.6235+-0.1402            3.5602+-0.0726          might be 1.0178x faster
   tear-off-arguments                                 4.9727+-0.0641            4.9572+-0.0548        
   temporal-structure                                14.8188+-0.5051           14.4247+-0.3635          might be 1.0273x faster
   to-int32-boolean                                  16.8131+-1.3641           16.2502+-0.6508          might be 1.0346x faster
   try-catch-get-by-val-cloned-arguments             15.4097+-0.2784     ?     16.4926+-3.9793        ? might be 1.0703x slower
   try-catch-get-by-val-direct-arguments              7.4035+-1.6140            6.9489+-1.2571          might be 1.0654x faster
   try-catch-get-by-val-scoped-arguments             10.3892+-3.9857            7.8046+-0.2262          might be 1.3312x faster
   undefined-property-access                        410.9087+-5.3649     ?    412.9125+-3.6969        ?
   undefined-test                                     3.3340+-0.0359            3.2776+-0.0610          might be 1.0172x faster
   unprofiled-licm                                   23.0465+-0.3783     ?     24.1953+-2.4915        ? might be 1.0498x slower
   varargs-call                                      16.1489+-1.2250           16.0524+-0.9205        
   varargs-construct-inline                          25.0800+-1.8999     ?     26.6193+-3.3892        ? might be 1.0614x slower
   varargs-construct                                 34.3962+-0.2265     ?     34.7411+-1.1695        ? might be 1.0100x slower
   varargs-inline                                     9.2407+-0.2700     ?      9.2935+-0.1866        ?
   varargs-strict-mode                               10.1461+-0.1321     ?     10.2562+-0.3583        ? might be 1.0109x slower
   varargs                                           10.5522+-1.2319           10.1722+-0.2603          might be 1.0374x faster
   weird-inlining-const-prop                          2.5197+-0.1656            2.4066+-0.1615          might be 1.0470x faster

   &lt;geometric&gt;                                        9.4587+-0.0988            9.4576+-0.0859          might be 1.0001x faster

                                                         Baseline                    Mine                                       

                                                         Baseline                    Mine                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                                   42.5097+-0.7088     ?     42.5600+-0.3028        ? might be 1.0012x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083021</commentid>
    <comment_count>7</comment_count>
      <attachid>250164</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-05 19:57:14 -0700</bug_when>
    <thetext>Comment on attachment 250164
Patch

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

I am still slightly worried about that 0.1% performance cost. I don’t find this uniformly more readable than the old version. Saying if (asIndex(x)) seems a bit strange unless you are aware that the return value is an “optional index”.

I think I would call the function that converts a string to an index something like parseIndex rather than asIndex or toIndex.

&gt; Source/JavaScriptCore/runtime/Identifier.h:54
&gt; +        if (value &gt; 0xFFFFFFFFU / 10)

Since indices don’t include the maximum value, this could be &gt;= or 0xFFFFFFFEU instead, but I guess it’s OK the way it is.

&gt; Source/JavaScriptCore/runtime/Identifier.h:70
&gt; +    if (value == UINT_MAX)

Since we go to the trouble to use uint32_t and not unsigned above, and use 0xFFFFFFFFU in one place too, it’s really strange to use UINT_MAX here. I would have used &quot;unsigned/UINT_MAX/UINT_MAX&quot; or &quot;uint32_t/0xFFFFFFFFU/0xFFFFFFFFU&quot; or something else consistent, not this mix.

&gt; Source/JavaScriptCore/runtime/Identifier.h:75
&gt; +ALWAYS_INLINE Optional&lt;uint32_t&gt; toIndexFromStringImpl(const StringImpl* impl)

This should take a StringImpl&amp; rather than a StringImpl*. Also no real point in saying const StringImpl* since StringImpl is immutable.

&gt; Source/JavaScriptCore/runtime/Identifier.h:156
&gt; +    static const uint32_t NotAnIndex = UINT_MAX;

Do we want to remove this?

&gt; Source/JavaScriptCore/runtime/Identifier.h:161
&gt; +    Optional&lt;uint32_t&gt; asIndex() const
&gt; +    {
&gt; +        return !isSymbol() ? toIndexFromStringImpl(m_string.impl()) : Nullopt;
&gt; +    }

Will this work on the null identifier?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083067</commentid>
    <comment_count>8</comment_count>
      <attachid>250164</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-06 03:53:37 -0700</bug_when>
    <thetext>Comment on attachment 250164
Patch

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

Thank you for your review.
OK, so I just change `asIndex` to `parseIndex`.

&gt;&gt; Source/JavaScriptCore/runtime/Identifier.h:70
&gt;&gt; +    if (value == UINT_MAX)
&gt; 
&gt; Since we go to the trouble to use uint32_t and not unsigned above, and use 0xFFFFFFFFU in one place too, it’s really strange to use UINT_MAX here. I would have used &quot;unsigned/UINT_MAX/UINT_MAX&quot; or &quot;uint32_t/0xFFFFFFFFU/0xFFFFFFFFU&quot; or something else consistent, not this mix.

OK, so use uint32_t/0xFFFFFFFFU/0xFFFFFFFFU.

&gt;&gt; Source/JavaScriptCore/runtime/Identifier.h:75
&gt;&gt; +ALWAYS_INLINE Optional&lt;uint32_t&gt; toIndexFromStringImpl(const StringImpl* impl)
&gt; 
&gt; This should take a StringImpl&amp; rather than a StringImpl*. Also no real point in saying const StringImpl* since StringImpl is immutable.

Ah, however, we already use `const Identifier&amp;`. It forces to use `const StringImpl*` or `const StringImpl&amp;` since String, which is the member of `const Identifier`, becomes const String&amp;.
At that time, I use `const StringImpl&amp;`.

&gt;&gt; Source/JavaScriptCore/runtime/Identifier.h:156
&gt;&gt; +    static const uint32_t NotAnIndex = UINT_MAX;
&gt; 
&gt; Do we want to remove this?

It&apos;s used in JSDomWindowCustom.cpp, but it&apos;s fairly trivial. So I&apos;ll drop it.

&gt;&gt; Source/JavaScriptCore/runtime/Identifier.h:161
&gt;&gt; +    }
&gt; 
&gt; Will this work on the null identifier?

Fixed for null identifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083068</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-06 04:31:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 250164 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250164&amp;action=review
&gt; 
&gt; I am still slightly worried about that 0.1% performance cost. I don’t find
&gt; this uniformly more readable than the old version. Saying if (asIndex(x))
&gt; seems a bit strange unless you are aware that the return value is an
&gt; “optional index”.
&gt; 
&gt; I think I would call the function that converts a string to an index
&gt; something like parseIndex rather than asIndex or toIndex.

OK, so instead of method `asIndex`, `toIndex`, `parseIndex`, I defined new function JSC::parseIndex and used it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083070</commentid>
    <comment_count>10</comment_count>
      <attachid>250164</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-06 04:52:15 -0700</bug_when>
    <thetext>Comment on attachment 250164
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/Identifier.h:75
&gt;&gt;&gt; +ALWAYS_INLINE Optional&lt;uint32_t&gt; toIndexFromStringImpl(const StringImpl* impl)
&gt;&gt; 
&gt;&gt; This should take a StringImpl&amp; rather than a StringImpl*. Also no real point in saying const StringImpl* since StringImpl is immutable.
&gt; 
&gt; Ah, however, we already use `const Identifier&amp;`. It forces to use `const StringImpl*` or `const StringImpl&amp;` since String, which is the member of `const Identifier`, becomes const String&amp;.
&gt; At that time, I use `const StringImpl&amp;`.

Ah! I&apos;ve found that impl() can return AtomicStringImpl* even when `const Identifier&amp;` case.
OK, so use StringImpl&amp; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083072</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-06 05:42:01 -0700</bug_when>
    <thetext>Committed r182406: &lt;http://trac.webkit.org/changeset/182406&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250163</attachid>
            <date>2015-04-05 13:15:32 -0700</date>
            <delta_ts>2015-04-05 13:24:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143422-20150406051444.patch</filename>
            <type>text/plain</type>
            <size>44397</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OWM3NzZmOGEwNGYwZjk5NTg1YWFlZGZmYTQ5NTc4ZDk1NzAxZjA1Li5lMzJhNmY3NmRiYTI0NDBi
MjJmNTNhY2U1NzM3ODk2MzI3ZWNhMjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxNS0wNC0wNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBSZXR1cm4gT3B0aW9uYWw8dWludDMyX3Q+IGZyb20gUHJvcGVydHlO
YW1lOjphc0luZGV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDM0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQcm9wZXJ0eU5hbWU6OmFzSW5kZXggcmV0dXJucyB1aW50MzJfdCBhbmQgdXNlIFVJTlQz
Ml9NQVggYXMgTm90QW5JbmRleC4KKyAgICAgICAgQnV0IGl0J3Mgbm90IG9idmlvdXMgdG8gY2Fs
bGVycy4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgUHJvcGVydHlOYW1lOjphc0luZGV4
KCkgdG8gcmV0dXJuIE9wdGlvbmFsPHVpbnQzMl90Pi4KKyAgICAgICAgSXQgZm9yY2VzIGNhbGxl
cnMgdG8gY2hlY2sgdGhlIHZhbHVlIGlzIGluZGV4IG9yIG5vdCBleHBsaWNpdGx5LgorCisgICAg
ICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdERpcmVjdFB1dEJ5SWQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJl
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAqIHJ1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6cHV0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+
OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmg6Cisg
ICAgICAgIChKU0M6OnRvSW5kZXhGcm9tQ2hhcmFjdGVycyk6CisgICAgICAgIChKU0M6OnRvSW5k
ZXhGcm9tU3RyaW5nSW1wbCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFzSW5kZXgpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAg
ICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6CisgICAgICAgICogcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQpOgorICAgICAgICAoSlND
OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVmaW5lT3duUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29y
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdE1heUJlSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50
aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0
eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZSk6CisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eU5hbWUuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lOjphc0luZGV4KToKKyAg
ICAgICAgKEpTQzo6dG9VSW50MzJGcm9tQ2hhcmFjdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OnRvVUludDMyRnJvbVN0cmluZ0ltcGwpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
UHJvcGVydHlOYW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6
YWRkKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OlN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8pOgorCiAyMDE1LTA0LTA0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBMb2dpY2FsbHkgZW1wdHkgV2Vha0Jsb2NrcyBzaG91bGQgbm90IHBp
biBkb3duIHRoZWlyIE1hcmtlZEJsb2NrcyBpbmRlZmluaXRlbHkuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI1
YTEwYTMwZDJkZTUzNjQ5OTBjZTRjMWZlOGEzZDlmODEwYzdlMi4uMjc3ZWU1MmU5ZjQyYzc3MzZi
NDg5ZTg0ZTE2ODMyNmU0ZDA1NzgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE1
LTA0LTA1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAg
IFJldHVybiBPcHRpb25hbDx1aW50MzJfdD4gZnJvbSBQcm9wZXJ0eU5hbWU6OmFzSW5kZXgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzQyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQWxsQ29s
bGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSFRNTEFsbENvbGxlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5l
cmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6cHV0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1l
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6
cHV0KToKKwogMjAxNS0wNC0wNCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgW0NvbnRlbnQgRmlsdGVyaW5nXSBCbG9ja2VkIHBhZ2UgaXMgbm90IGFsd2F5cyBkaXNw
bGF5ZWQgd2hlbiBpdCBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAppbmRleCBhOWE0N2UwODEzYTIxNGIxMjE5NmZlNjJjMjJl
MTRlM2NjNmU1MzdjLi44YzllM2RlNzRkZGUwNzBlODNiMWEyOWE5Yzg2NjQ2MWU5MTBlZDJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3Bw
CkBAIC0yNzAsNyArMjcwLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBBdG9taWNTdHJpbmdJbXAKICAgICBpZiAoc2V0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoKTsKIAotICAgIGlmICh0
b1VJbnQzMkZyb21TdHJpbmdJbXBsKHVpZCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgIGlmICh0b0luZGV4RnJvbVN0cmluZ0ltcGwodWlkKSkKICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
aW5kZXggYjdmZTVhMDA0NmUzZGU3YWY0NDFjZjQ2ZDllZDhkN2U1OTg2MTc0MS4uZjIxZGUzOGM4
Nzg1YzQyMGMxMGFlOWUwOWU2MjE5MTdjZDcwYmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAtMzEwLDcgKzMxMCw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIENvZGVCbG9jayogZGZnCiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCwgQXRvbWljU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KQogewotICAgIGlmICh0
b1VJbnQzMkZyb21TdHJpbmdJbXBsKHVpZCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgIGlmICh0b0luZGV4RnJvbVN0cmluZ0ltcGwodWlkKSkKICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAKICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKaW5kZXggM2I5MmRkNThmNjBhY2IzY2I5MDc5NTRjYzNlMjc2NTQxZTllMGVhYi4u
MzUxYmVjOWY2M2NlMTIzZmU1MzFjMWM5NWExNjc3ZjMyNmI0YjY2OCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKQEAgLTE1MTMsNyArMTUxMyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0RGlyZWN0UHV0QnlJZChSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmCiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHB1
dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCAocHJvcGVydHkgIT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvICYmIFByb3BlcnR5TmFtZShwcm9wZXJ0eSku
YXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgKHByb3Bl
cnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90byAmJiAhcHJvcGVydHku
YXNJbmRleCgpKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAppbmRleCA5NGQ2OGRkMGJmZTM2Y2RiZTk3OGNlODFmYjFkZDQ4MmFiZTUz
NzA0Li4wOTNmMzgwMTZiZjBmZDc4YzY4OWQ0MGE1YTNkNTAzMzljZDcxZjExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTk5OSw3ICs5OTksNyBAQCBzdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRl
KiBleGVjLCBWTSogdgogewogICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7CiAgICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKCFvbGRTdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwbmFtZS5hc0lu
ZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgIGlmICghb2xkU3RydWN0dXJl
LT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcG5hbWUuYXNJ
bmRleCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHBy
b3BlcnR5T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA2OTA1YThiNTJlMTMwZTEyZTcz
ZWY2OTZjYjA4ODRhYjcyYmYwYTdkLi45MWIzMzI1NTlhZmI3YmNiZTBiNWYyNTJmZGQ2ODQxOTUy
YzZmMDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzM3LDEwICszMzcsOSBAQCBjbGFzcyBS
dW50aW1lQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKLSAgICAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwotICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RGVsZXRlIHwgRG9udEVudW0s
IGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fdmVjdG9yW2luZGV4XSkpOworICAgICAgICBPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgICAgICBpZiAo
aW5kZXggJiYgaW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7CisgICAg
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnREZWxldGUgfCBEb250RW51bSwg
anNOdW1iZXIodGhpc09iamVjdC0+bV92ZWN0b3JbaW5kZXgudmFsdWUoKV0pKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAppbmRleCA2ZjhlY2Q5OTE0MmI2MmE4MzUzMzVm
NDMzODJkYTgwNmRkOWExZDA2Li5mYzgwMzg5NDkxNjRlMGMzOWJiOTQ2MWQ5YjUwZDk4ZjhhMGE4
OGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCkBAIC03NjAsMTAgKzc2MCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVmVjdG9yPHVpbnQzMl90
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4ga2V5czsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG5hbWVBcnJheS5zaXplKCk7ICsraSkgewogICAgICAgICBQcm9wZXJ0eU5hbWUgbmFtZSA9
IG5hbWVBcnJheVtpXTsKLSAgICAgICAgdWludDMyX3QgaW5kZXggPSBuYW1lLmFzSW5kZXgoKTsK
LSAgICAgICAgaWYgKGluZGV4ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
T3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5kZXggPSBuYW1lLmFzSW5kZXgoKTsKKyAgICAg
ICAgaWYgKCFvcHRpb25hbEluZGV4KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAor
CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpOwogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZ2V0T3JIb2xlKHRoaXNPYmosIGV4ZWMsIGluZGV4KTsKICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDcxOWRjODgwMGM1NWJk
MTBmZmFjOWVjZDhkMWNjODkyYTExNDk0MjcuLjQ0Nzc5YzQzNDExMjBhZDc2MGRlYTFiNDczOGFk
NDI0ZjQzNWQyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtNDksOSArNDksOSBAQAogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOwotICAg
IGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7Ci0gICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlj
a2x5KGluZGV4KSk7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gaWRlbnQuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHko
aW5kZXgudmFsdWUoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25l
LCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgudmFsdWUoKSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0xMTMsOSArMTEzLDkgQEAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsK
LSAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewotICAg
ICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAg
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlmIChpbmRl
eCAmJiB0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgudmFsdWUoKSkpIHsK
KyAgICAgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleC52YWx1ZSgpLCB2
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xNDcsOSArMTQ3LDkgQEAK
ICAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkpCiAgICAg
ICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlVGhpbmdzKHZtKTsKICAgICAKLSAgICB1bnNpZ25lZCBp
bmRleCA9IGlkZW50LmFzSW5kZXgoKTsKLSAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5k
ZXhRdWlja2x5KGluZGV4KSkgewotICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50
KHZtLCBpbmRleCk7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gaWRlbnQuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHko
aW5kZXgudmFsdWUoKSkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVBcmd1bWVudCh2
bSwgaW5kZXgudmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAg
LTE4MCw4ICsxODAsOSBAQAogICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5j
YWxsZWUpCiAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nhcnkodm0p
OwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsK
LSAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsK
KyAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5kZXggPSBpZGVudC5hc0luZGV4
KCk7CisgICAgICAgIGlmIChvcHRpb25hbEluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkFjY2Vzc0lu
ZGV4UXVpY2tseShvcHRpb25hbEluZGV4LnZhbHVlKCkpKSB7CisgICAgICAgICAgICB1aW50MzJf
dCBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3Ig
ZGVzY3JpcHRvciwgdGhlbgogICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBh
bGlhc2VkIGFyZ3VtZW50IHNlZXMgdGhlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSWRlbnRpZmllci5oCmluZGV4IGRlNGFjYmMyYTU3NWI2NjgwOWU0MjcxNjBhYWE0ZDM5
NjY5OWM5MTcuLjcyYzM4MjY3ZjlhZDc1YzJiMDlkNTI2M2ZmMDk0MDI3MzkwNjM4OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKQEAgLTIyLDYgKzIyLDcg
QEAKICNkZWZpbmUgSWRlbnRpZmllcl9oCiAKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAt
MzEsNiArMzIsNTMgQEAKIAogY2xhc3MgRXhlY1N0YXRlOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhclR5cGU+CitBTFdBWVNfSU5MSU5FIE9wdGlvbmFsPHVpbnQzMl90PiB0b0luZGV4RnJvbUNo
YXJhY3RlcnMoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICAvLyBBbiBlbXB0eSBzdHJpbmcgaXMgbm90IGEgbnVtYmVyLgorICAgIGlmICghbGVuZ3Ro
KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIC8vIEdldCB0aGUgZmlyc3QgY2hhcmFj
dGVyLCB0dXJuaW5nIGl0IGludG8gYSBkaWdpdC4KKyAgICB1aW50MzJfdCB2YWx1ZSA9IGNoYXJh
Y3RlcnNbMF0gLSAnMCc7CisgICAgaWYgKHZhbHVlID4gOSkKKyAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CisKKyAgICAvLyBDaGVjayBmb3IgbGVhZGluZyB6ZXJvcy4gSWYgdGhlIGZpcnN0IGNoYXJh
Y2hlciBpcyAwLCB0aGVuIHRoZQorICAgIC8vIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG11c3QgYmUg
b25lIC0gZS5nLiAiMDQyIiBpcyBub3QgZXF1YWwgdG8gIjQyIi4KKyAgICBpZiAoIXZhbHVlICYm
IGxlbmd0aCA+IDEpCisgICAgICAgIHJldHVybiBOdWxsb3B0OworCisgICAgd2hpbGUgKC0tbGVu
Z3RoKSB7CisgICAgICAgIC8vIE11bHRpcGx5IHZhbHVlIGJ5IDEwLCBjaGVja2luZyBmb3Igb3Zl
cmZsb3cgb3V0IG9mIDMyIGJpdHMuCisgICAgICAgIGlmICh2YWx1ZSA+IDB4RkZGRkZGRkZVIC8g
MTApCisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgdmFsdWUgKj0gMTA7CisK
KyAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3RlciwgdHVybmluZyBpdCBpbnRvIGEgZGln
aXQuCisgICAgICAgIHVpbnQzMl90IG5ld1ZhbHVlID0gKigrK2NoYXJhY3RlcnMpIC0gJzAnOwor
ICAgICAgICBpZiAobmV3VmFsdWUgPiA5KQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisK
KyAgICAgICAgLy8gQWRkIGluIHRoZSBvbGQgdmFsdWUsIGNoZWNraW5nIGZvciBvdmVyZmxvdyBv
dXQgb2YgMzIgYml0cy4KKyAgICAgICAgbmV3VmFsdWUgKz0gdmFsdWU7CisgICAgICAgIGlmIChu
ZXdWYWx1ZSA8IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIHZh
bHVlID0gbmV3VmFsdWU7CisgICAgfQorCisgICAgaWYgKHZhbHVlID09IFVJTlRfTUFYKQorICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0FMV0FZU19JTkxJ
TkUgT3B0aW9uYWw8dWludDMyX3Q+IHRvSW5kZXhGcm9tU3RyaW5nSW1wbChjb25zdCBTdHJpbmdJ
bXBsKiBpbXBsKQoreworICAgIGlmIChpbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHRv
SW5kZXhGcm9tQ2hhcmFjdGVycyhpbXBsLT5jaGFyYWN0ZXJzOCgpLCBpbXBsLT5sZW5ndGgoKSk7
CisgICAgcmV0dXJuIHRvSW5kZXhGcm9tQ2hhcmFjdGVycyhpbXBsLT5jaGFyYWN0ZXJzMTYoKSwg
aW1wbC0+bGVuZ3RoKCkpOworfQorCiBjbGFzcyBJZGVudGlmaWVyIHsKICAgICBmcmllbmQgY2xh
c3MgU3RydWN0dXJlOwogcHVibGljOgpAQCAtMTA1LDYgKzE1MywxMyBAQCBjbGFzcyBJZGVudGlm
aWVyIHsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChW
TSosIGNvbnN0IGNoYXIqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmlu
Z0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBjaGFyKik7CiAKKyAgICBzdGF0aWMgY29uc3Qg
dWludDMyX3QgTm90QW5JbmRleCA9IFVJTlRfTUFYOworCisgICAgT3B0aW9uYWw8dWludDMyX3Q+
IGFzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1N5bWJvbCgpID8gdG9J
bmRleEZyb21TdHJpbmdJbXBsKG1fc3RyaW5nLmltcGwoKSkgOiBOdWxsb3B0OworICAgIH0KKwog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCBjNmY5MjEwYTUxZWE5N2YzM2Ni
ODVmMTQ0Y2Y1MTY3Y2MzYTc1Y2E0Li42NWJlODdiYzExMmI1MzFiODMyNmQ5ODM2OWQ4ZTQ3YWFk
MGZiNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAt
MTU4LDkgKzE1OCw5IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUKIAogICAgIC8vIDQuIEVsc2Ug
aWYgUCBpcyBhbiBhcnJheSBpbmRleCAoMTUuNCksIHRoZW4KICAgICAvLyBhLiBMZXQgaW5kZXgg
YmUgVG9VaW50MzIoUCkuCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICBp
ZiAoT3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpKSB7CiAgICAgICAgIC8vIGIuIFJlamVjdCBpZiBpbmRleCA+PSBvbGRMZW4gYW5kIG9sZExl
bkRlc2MuW1tXcml0YWJsZV1dIGlzIGZhbHNlLgorICAgICAgICB1aW50MzJfdCBpbmRleCA9IG9w
dGlvbmFsSW5kZXgudmFsdWUoKTsKICAgICAgICAgaWYgKGluZGV4ID49IGFycmF5LT5sZW5ndGgo
KSAmJiAhYXJyYXktPmlzTGVuZ3RoV3JpdGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBudW1lcmljIHBy
b3BlcnR5IG9uIGFycmF5IHdpdGggbm9uLXdyaXRhYmxlIGxlbmd0aCBwcm9wZXJ0eS4iKTsKICAg
ICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRl
ZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBB
IHBhc3NpbmcgUCwgRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5kZXggN2Q2MWNhMmQ5MDIxZDgwYzdl
MmM5NjcwZGZkYjIxNTY3MGNlMjU0Yi4uMjA0ZTA4NDYwZmQ5ZTAzZDQzNWJiZDkyZjYwMTU3MzI0
MTFmNGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAKQEAgLTEyMSw5ICsxMjEsOCBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewot
ICAgICAgICBwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoZXhlYywgaW5kZXgsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKSkgeworICAgICAgICBwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoZXhlYywg
aW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCmluZGV4IDIwZDk1YWNiYmY3
MTg5MGEzNDU0OTYxMjkyOWU3Yzg0ODQ3ZTA0OTguLjJhNzg4YjVjYzM1NmI2MDlkNzhkN2JlZGFm
ZTVlYmMxYjY3YzQwN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCkBAIC0zMDIsOSAr
MzAyLDkgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVk
IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRl
eCkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RGVsZXRlIHwgUmVh
ZE9ubHksIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgIE9wdGlvbmFs
PHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4
ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleC52YWx1ZSgpKSkgeworICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnREZWxldGUgfCBSZWFkT25seSwgdGhp
c09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIApAQCAtMzI0LDkgKzMyNCw4IEBACiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAg
cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpKSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgu
dmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApAQCAtMzQzLDggKzM0Miw3IEBACiAgICAgLy8gVGhpcyBpcyBtYXRjaGluZyBG
aXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBpdCByZWplY3RzIGFsbCBhdHRlbXB0cyB0
bwogICAgIC8vIGRlZmluZU93blByb3BlcnR5IGZvciBpbmRleGVkIHByb3BlcnRpZXMgb24gdHlw
ZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUgb3V0CiAgICAgLy8gb2YgYm91bmRzLgotICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAotICAgICAgICB8
fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggfHwgcHJv
cGVydHlOYW1lLmFzSW5kZXgoKSkKICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRU
aHJvdywgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJv
cGVydHkuIik7CiAgICAgCiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwpAQCAt
MzU2LDggKzM1NCw3IEBACiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKICAgICAKLSAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKLSAgICAgICAg
fHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoIHx8IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBy
ZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCBlMWZm
ZTViMWU1MDBjNGQwYWFhYWUzNTg0Zjc1NjZlMmNlMDcxOGMzLi5kMWRkYzRiYmQ2Y2RkYTgyYzM2
YWNkNjM3ZGU2OTkwN2Q0NzFkYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCkBAIC0zNzksOSArMzc5LDggQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1YK
ICAgICAKICAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9y
IGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBs
aWtlCiAgICAgLy8gdmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHBy
b3BlcnR5IHN0b3JhZ2UuCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5
SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwor
ICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgudmFsdWUoKSwg
dmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApAQCAtMTIzOCw5ICsxMjM3LDggQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3Io
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1YKIHsKICAgICBB
U1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7
CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBwdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCwgdmFsdWUsIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCk7CisgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCkpIHsKKyAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgudmFsdWUo
KSwgdmFsdWUsIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyNDksNyArMTI0Nyw3IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dERpcmVjdEFjY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWCiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKLSAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpOworICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmFzSW5kZXgoKSk7
CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKICAgICBwdXREaXJlY3RJbnRlcm5h
bDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzLCBzbG90KTsKQEAgLTEyOTcsOSArMTI5NSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVyCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKICAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBp
ZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNP
YmplY3QsIGV4ZWMsIGkpOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBp
bmRleC52YWx1ZSgpKTsKIAogICAgIGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVp
ZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0
ZShleGVjKTsKQEAgLTI1NTIsMTEgKzI1NDksMTAgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0YXJnZXQsIFByb3BlcnR5TmFtZSBwcm9wZXIK
IAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleChFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgdW5zaWduZWQg
YXNJbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGFzSW5kZXggPT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSk7CisgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCkpCisgICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4
LnZhbHVlKCksIHZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMs
IGFzSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5
TmFtZSwgdmFsdWUpOwogfQogCiBjbGFzcyBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHsKQEAgLTI3
MDksMTUgKzI3MDUsMTQgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU4KIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5k
ZXgsIHRoZW4gdXNlIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgdW5zaWduZWQg
aW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKSkgewogICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0g
aW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2Ug
YXMgYXJndW1lbnRzLgogICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNl
LgogICAgICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KICAgICAgICAgLy8gZS5pLiBTZXQg
b2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgogICAgICAgICAvLyBlLmlpLiBDYWxs
IHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIu
OSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1l
bnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgIC8vIGYuIFJl
dHVybiB0cnVlLgotICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAgcmV0
dXJuIG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LnZhbHVlKCks
IGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIG9i
amVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHRocm93RXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCmluZGV4IDc4Njc3NWEwZGM0OWMxMjMwN2RhZjQ1MjIxNmFiNzgzNGUxYWI4N2YuLjUz
M2I3ZDRmNjA4NTczNDEzODZmYzI1OGMzMzdhZGVkOWYxZWYzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtMTI0Niw5ICsxMjQ2LDggQEAgQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGUKICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpvYmplY3QtPnN0cnVj
dHVyZSh2bSk7CiAgICAgaWYgKG9iamVjdC0+aW5saW5lR2V0T3duUHJvcGVydHlTbG90KHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaW5kZXgg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTsKKyAgICBpZiAoT3B0aW9u
YWw8dWludDMyX3Q+IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKSkKKyAgICAgICAgcmV0
dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleC52YWx1ZSgp
LCBzbG90KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyNzYsOSArMTI3NSw4IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlCiAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlw
ZSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJl
dHVybiBnZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpOworICAgIGlmIChPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpKQorICAgICAgICByZXR1
cm4gZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LnZhbHVlKCksIHNsb3QpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtMTMyMiw3ICsxMzIwLDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWwKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigp
ID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2
YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7Ci0gICAgQVNT
RVJUKHByb3BlcnR5TmFtZS5hc0luZGV4KCkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsK
KyAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5hc0luZGV4KCkpOwogCiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAK
aW5kZXggZjZkODRiYzNlZTY1MjRhM2EzOTFhZjM0ZTI4MTIyOWVjNWM3MjFlMi4uNGIxYTZlNTVj
OTJmOWM5MzI4OTVhNmY1ZTc3NjkzNWNiOWE2NGI2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmNwcApAQCAtNDI1LDEwICs0MjUsOSBAQCBib29sIEpTU3RyaW5n
OjpnZXRTdHJpbmdQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdW5zaWdu
ZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgPCBtX2xlbmd0aCkgewot
ICAgICAgICBBU1NFUlQoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOyAvLyBObyBuZWVk
IGZvciBhbiBleHBsaWNpdCBjaGVjaywgdGhlIGFib3ZlIHRlc3Qgd291bGQgYWx3YXlzIGZhaWwh
Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihnZXRJbmRleChleGVjLCBpKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52YWx1ZSgpIDwgbV9s
ZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4KGV4ZWMs
IGluZGV4LnZhbHVlKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAppbmRleCBjMWFmMGNhZTFjNjIzYjM2MmNmNGRiMzYyYjVjOTU0OTVlOGM3NDM5Li5mM2I0MTUz
NTcxNTdlNWQ3N2Q3ZTZjNTczNzk4YzJiYWM4YjViN2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgKQEAgLTYyNiwxMCArNjI2LDkgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgPCBtX2xlbmd0aCkgewotICAgICAg
ICBBU1NFUlQoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOyAvLyBObyBuZWVkIGZvciBh
biBleHBsaWNpdCBjaGVjaywgdGhlIGFib3ZlIHRlc3Qgd291bGQgYWx3YXlzIGZhaWwhCi0gICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCBnZXRJbmRleChl
eGVjLCBpKSk7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKKyAgICBpZiAoaW5kZXggJiYgaW5kZXgudmFsdWUoKSA8IG1fbGVuZ3RoKSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCBnZXRJbmRl
eChleGVjLCBpbmRleC52YWx1ZSgpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAppbmRl
eCBkNDU0NGE0ZjZmMjZjYWE4YzM4NDVkYWYwZmNhZmU3MzIzMjhiZGNjLi5kYzI0NTJhMzZhNzE0
YWU3YzAwMjE4OTA0NGM4ZWU2MzRkYmMyNzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcApAQCAtNjQ5LDkgKzY0OSw4IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0pTT05XaGl0ZVNwYWNlKGNvbnN0IENoYXJUeXBlJiBjKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmplY3RT
dGFjay5sYXN0KCkpOwogICAgICAgICAgICAgICAgIFByb3BlcnR5TmFtZSBpZGVudCA9IGlkZW50
aWZpZXJTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IGlkZW50LmFz
SW5kZXgoKTsKLSAgICAgICAgICAgICAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBp
LCBsYXN0VmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBpZGVudC5hc0luZGV4KCkpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGly
ZWN0SW5kZXgobV9leGVjLCBpbmRleC52YWx1ZSgpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52
bSgpLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2su
cmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlOYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5h
bWUuaAppbmRleCA2NTVlNzRkNjJhYzM2MTIwYTE5NjFhYmQ3MDExZmY2YmVjNTIxNWIzLi4yN2Uw
ZDE4NGVjNjliNGNjN2Q1MWFhMDQ2ZDNlYzhlYTgxOTk3OWMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWUuaApAQCAtMjgsNTQgKzI4LDEwIEBACiAKICNp
bmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZU5hbWUuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KLUFMV0FZU19JTkxJTkUgdWludDMyX3QgdG9VSW50MzJGcm9tQ2hhcmFjdGVy
cyhjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8v
IEFuIGVtcHR5IHN0cmluZyBpcyBub3QgYSBudW1iZXIuCi0gICAgaWYgKCFsZW5ndGgpCi0gICAg
ICAgIHJldHVybiBVSU5UX01BWDsKLQotICAgIC8vIEdldCB0aGUgZmlyc3QgY2hhcmFjdGVyLCB0
dXJuaW5nIGl0IGludG8gYSBkaWdpdC4KLSAgICB1aW50MzJfdCB2YWx1ZSA9IGNoYXJhY3RlcnNb
MF0gLSAnMCc7Ci0gICAgaWYgKHZhbHVlID4gOSkKLSAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwot
ICAgIAotICAgIC8vIENoZWNrIGZvciBsZWFkaW5nIHplcm9zLiBJZiB0aGUgZmlyc3QgY2hhcmFj
aGVyIGlzIDAsIHRoZW4gdGhlCi0gICAgLy8gbGVuZ3RoIG9mIHRoZSBzdHJpbmcgbXVzdCBiZSBv
bmUgLSBlLmcuICIwNDIiIGlzIG5vdCBlcXVhbCB0byAiNDIiLgotICAgIGlmICghdmFsdWUgJiYg
bGVuZ3RoID4gMSkKLSAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgIAotICAgIHdoaWxlICgt
LWxlbmd0aCkgewotICAgICAgICAvLyBNdWx0aXBseSB2YWx1ZSBieSAxMCwgY2hlY2tpbmcgZm9y
IG92ZXJmbG93IG91dCBvZiAzMiBiaXRzLgotICAgICAgICBpZiAodmFsdWUgPiAweEZGRkZGRkZG
VSAvIDEwKQotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgICAgICB2YWx1ZSAqPSAx
MDsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIsIHR1cm5pbmcg
aXQgaW50byBhIGRpZ2l0LgotICAgICAgICB1aW50MzJfdCBuZXdWYWx1ZSA9ICooKytjaGFyYWN0
ZXJzKSAtICcwJzsKLSAgICAgICAgaWYgKG5ld1ZhbHVlID4gOSkKLSAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKLSAgICAgICAgCi0gICAgICAgIC8vIEFkZCBpbiB0aGUgb2xkIHZhbHVlLCBj
aGVja2luZyBmb3Igb3ZlcmZsb3cgb3V0IG9mIDMyIGJpdHMuCi0gICAgICAgIG5ld1ZhbHVlICs9
IHZhbHVlOwotICAgICAgICBpZiAobmV3VmFsdWUgPCB2YWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKLSAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHZhbHVlOwotfQotCi1BTFdBWVNfSU5MSU5FIHVpbnQzMl90IHRvVUludDMyRnJvbVN0
cmluZ0ltcGwoU3RyaW5nSW1wbCogaW1wbCkKLXsKLSAgICBpZiAoaW1wbC0+aXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiB0b1VJbnQzMkZyb21DaGFyYWN0ZXJzKGltcGwtPmNoYXJhY3RlcnM4KCks
IGltcGwtPmxlbmd0aCgpKTsKLSAgICByZXR1cm4gdG9VSW50MzJGcm9tQ2hhcmFjdGVycyhpbXBs
LT5jaGFyYWN0ZXJzMTYoKSwgaW1wbC0+bGVuZ3RoKCkpOwotfQotCiBjbGFzcyBQcm9wZXJ0eU5h
bWUgewogcHVibGljOgogICAgIFByb3BlcnR5TmFtZShBdG9taWNTdHJpbmdJbXBsKiBwcm9wZXJ0
eU5hbWUpCkBAIC0xMDYsMTMgKzYyLDEzIEBAIGNsYXNzIFByb3BlcnR5TmFtZSB7CiAgICAgICAg
IHJldHVybiAoIW1faW1wbCB8fCBtX2ltcGwtPmlzU3ltYm9sKCkpID8gbnVsbHB0ciA6IG1faW1w
bDsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgTm90QW5JbmRleCA9IFVJTlRf
TUFYOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBOb3RBbkluZGV4ID0gSWRlbnRpZmllcjo6
Tm90QW5JbmRleDsKIAotICAgIHVpbnQzMl90IGFzSW5kZXgoKQorICAgIE9wdGlvbmFsPHVpbnQz
Ml90PiBhc0luZGV4KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAobV9pbXBsICYmICFt
X2ltcGwtPmlzU3ltYm9sKCkpID8gdG9VSW50MzJGcm9tU3RyaW5nSW1wbChtX2ltcGwpIDogTm90
QW5JbmRleDsKKyAgICAgICAgcmV0dXJuIChtX2ltcGwgJiYgIW1faW1wbC0+aXNTeW1ib2woKSkg
PyB0b0luZGV4RnJvbVN0cmluZ0ltcGwobV9pbXBsKSA6IE51bGxvcHQ7CiAgICAgfQotICAgIAor
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAobV9pbXBsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlOYW1lQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlOYW1lQXJyYXkuY3BwCmluZGV4IGU0ZTVlMjdhMDRmYTA0ZjY4NWU2YzdiM2NlZWY5N2JkNWEx
MWI0NzMuLjRmM2RlM2QxNTVlYzA2NTFmYmNjZWE2NjdiZjdhYTJkOTU0OTU0ZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAK
QEAgLTMzLDggKzMzLDggQEAgdm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKFN0cmluZ0ltcGwq
IGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpZGVudGlmaWVyIHx8IChpZGVudGlmaWVyID09
IFN0cmluZ0ltcGw6OmVtcHR5KCkgfHwgaWRlbnRpZmllci0+aXNBdG9taWMoKSB8fCBpZGVudGlm
aWVyLT5pc1N5bWJvbCgpKSk7CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAg
dWludDMyX3QgaW5kZXggPSBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVVpZChtX3ZtLCBp
ZGVudGlmaWVyKSkuYXNJbmRleCgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCBpbmRl
eCA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggfHwgaW5kZXggPj0gbV9wcmV2aW91c2x5RW51
bWVyYXRlZExlbmd0aCk7CisgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IElkZW50
aWZpZXI6OmZyb21VaWQobV92bSwgaWRlbnRpZmllcikuYXNJbmRleCgpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGluZGV4LCAhaW5kZXggfHwgaW5kZXgudmFsdWUoKSA+PSBtX3ByZXZpb3VzbHlF
bnVtZXJhdGVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBpZiAobV9hbHRlcm5hdGVTZXQgJiYgbV9h
bHRlcm5hdGVTZXQtPmNvbnRhaW5zKGlkZW50aWZpZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKaW5kZXggMjU1NjkwZmY0OGM4ZGIwNzQyNTVi
ZTk5MzRhOTZhNDcyMjY1OWM2MS4uN2I4MGQyNzk2NjJmODc4YjAyZTNiMTFkYjM4YjA0NzFjMGYx
ZjEwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCkBAIC0xMjgsOSArMTI4LDggQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHIKICAgICBTdHJp
bmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CiAgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgoaSkpIHsK
LSAgICAgICAgQVNTRVJUKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsgLy8gTm8gbmVl
ZCBmb3IgYW4gZXhwbGljaXQgY2hlY2ssIHRoZSBhYm92ZSB0ZXN0IHdvdWxkIGFsd2F5cyBmYWls
IQorICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
CisgICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5k
ZXgoaW5kZXgudmFsdWUoKSkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRl
eCA1NjNhNWI1NTA4ZGVmY2UzNzE5MTMzODc1ZjI1MTNjNzExODM0NjJlLi5iY2MxMmM3NjhlOTQ1
MzEzZTQxNjYxM2JmY2YxMDRjNzY5OWJhYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTEwMDQsOCArMTAwNCw3IEBAIHZvaWQgU3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKIGJv
b2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICBpZiAocHJvcGVydHlOYW1lLmFzSW5kZXgoKSkKICAgICAgICAgcmV0dXJuIGFueU9iamVjdElu
Q2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKTsKICAgICAKICAgICBmb3IgKFN0cnVj
dHVyZSogY3VycmVudCA9IHRoaXM7IDspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCBiZTc3N2EyODUwYTM4MTdkZjVmZjIzYzJh
NWJjMGYwMmQwZWQ5MjlhLi41OWNiMDQ0Mjc0MDA0YTU0NTc3OTI5YjllNTUyZjlkNDBlMTE3NWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwCkBAIC0yMTQsMTEgKzIxNCwxMCBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eQogICAgIC8v
IFdlIG5lZWQgdG8gdGVzdCB0aGUgY29ycmVjdCBwcmlvcml0eSBvcmRlci4KIAogICAgIC8vIGFs
bG93IHdpbmRvd1sxXSBvciBwYXJlbnRbMV0gZXRjLiAoIzU2OTgzKQotICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpIDwgdGhpc09iamVjdC0+aW1wbCgp
LmZyYW1lKCktPnRyZWUoKS5zY29wZWRDaGlsZENvdW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52YWx1
ZSgpIDwgdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCktPnRyZWUoKS5zY29wZWRDaGlsZENvdW50
KCkpIHsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnRE
ZWxldGUgfCBEb250RW51bSwKLSAgICAgICAgICAgIHRvSlMoZXhlYywgdGhpc09iamVjdC0+aW1w
bCgpLmZyYW1lKCktPnRyZWUoKS5zY29wZWRDaGlsZChpKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCkpKTsKKyAgICAgICAgICAgIHRvSlMoZXhlYywgdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCkt
PnRyZWUoKS5zY29wZWRDaGlsZChpbmRleC52YWx1ZSgpKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4
IDNlYmE0MjFiYzczNDE3NzNhYzhmNmFhNmIxMjFlYWNkMWU4MmE3YjIuLjhmOGYyMjk4MzYwNTY5
ZDQwMWVmYzMyNWEwNzU5NGNhZWRhOTg2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC02NSw5ICs2
NSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsQ29s
bGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9
PSAxKSB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMu
CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gdG9VSW50MzJGcm9tU3Ry
aW5nSW1wbChzdHJpbmcuaW1wbCgpKTsKLSAgICAgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhl
eGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLml0ZW0oaW5kZXgp
KSk7CisgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSB0b0luZGV4RnJvbVN0
cmluZ0ltcGwoc3RyaW5nLmltcGwoKSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi5p
dGVtKGluZGV4LnZhbHVlKCkpKSk7CiAKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQu
aW1hZ2VzKCc8bmFtZT4nKSBldGMuCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFt
ZWRJdGVtcyhleGVjLCBqc0NvbGxlY3Rpb24sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
c3RyaW5nKSkpOwpAQCAtNzUsOSArNzQsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogCiAgICAgLy8g
VGhlIHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdhbnQK
ICAgICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gdG9VSW50MzJGcm9tU3RyaW5nSW1wbChl
eGVjLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhleGVjKS5pbXBsKCkpOwotICAgIGlmIChpbmRl
eCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgaWYgKGF1dG8qIGl0ZW0g
PSBjb2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4KSkKKyAgICBpZiAo
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gdG9JbmRleEZyb21TdHJpbmdJbXBsKGV4ZWMtPmFy
Z3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpLmltcGwoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29s
bGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGl0ZW0pKTsKICAgICB9CiAKQEAgLTEwMyw5ICsxMDEs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYQogCiBKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rp
b246Oml0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHVpbnQzMl90IGluZGV4ID0gdG9VSW50
MzJGcm9tU3RyaW5nSW1wbChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykuaW1wbCgpKTsKLSAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
KQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLml0ZW0o
aW5kZXgpKTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gdG9JbmRleEZyb21T
dHJpbmdJbXBsKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5p
bXBsKCkpKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgp
Lml0ZW0oaW5kZXgudmFsdWUoKSkpOwogICAgIHJldHVybiBuYW1lZEl0ZW1zKGV4ZWMsIHRoaXMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMmZiZDEwZTU3NGY0MjFkMDM4NzRj
ZGQzZjMzNTZkZmRkYTA3YWQxOC4uY2U3ZGY5NDNkMDkxNzRjY2NhMmEwZDYxNWUyMWQyNjgwYTcx
MDg4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KQEAgLTM3MywxNSArMzczLDE2IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3Bl
cnR5U2xvdEJvZHkKICAgICB9CiAKICAgICBpZiAoJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbikgewot
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIHVuc2lnbmVkIGluZGV4
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcbiIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eVNsb3RJbXBsLCAiICAgIE9wdGlvbmFsPHVpbnQzMl90PiBvcHRpb25hbEluZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTtcbiIpOwogCiAgICAgICAgICMgSWYgdGhlIGl0ZW0gZnVuY3Rp
b24gcmV0dXJucyBhIHN0cmluZyB0aGVuIHdlIGxldCB0aGUgVHJlYXRSZXR1cm5lZE51bGxTdHJp
bmdBcyBoYW5kbGUgdGhlIGNhc2VzCiAgICAgICAgICMgd2hlcmUgdGhlIGluZGV4IGlzIG91dCBv
ZiByYW5nZS4KICAgICAgICAgaWYgKCRpbmRleGVkR2V0dGVyRnVuY3Rpb24tPnNpZ25hdHVyZS0+
dHlwZSBlcSAiRE9NU3RyaW5nIikgewotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlT
bG90SW1wbCwgIiAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKG9w
dGlvbmFsSW5kZXgpIHtcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4ICYmIGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgpLmxlbmd0aCgpKSB7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKG9wdGlv
bmFsSW5kZXggJiYgb3B0aW9uYWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+aW1wbCgpLmxl
bmd0aCgpKSB7XG4iKTsKICAgICAgICAgfQorICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNs
b3RJbXBsLCAiICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTtc
biIpOwogICAgICAgICAjIEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBpbmRl
eCB3aWxsIGJlIHdyaXRhYmxlCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRP
d25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gJHtuYW1l
c3BhY2VNYXliZX1Eb250RGVsZXRlO1xuIik7CkBAIC0yNDYzLDkgKzI0NjQsOCBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNl
dHRlcihleGVjLCBpbmRleCwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCkpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1
ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAppbmRleCBkMjRhMmVhNzA2YWUyZDk0
NDJiNzA3NWY5NWUyODgzMzY1NjIwNjFhLi41YTUxNTlmNmEwMTdlY2I2Y2ExNTgyODg1NTJlYTIz
YjBlZWJhOWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAKQEAgLTE3NCw5ICsxNzQsOSBAQCBib29s
IEpTRmxvYXQ2NEFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZQogewogICAgIEpTRmxvYXQ2NEFycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxGbG9hdDY0QXJyYXkqPih0aGlzT2JqZWN0LT5pbXBs
KCkpLT5sZW5ndGgoKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4g
aW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52
YWx1ZSgpIDwgc3RhdGljX2Nhc3Q8RmxvYXQ2NEFycmF5Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+
bGVuZ3RoKCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNGbG9hdDY0QXJyYXksIEJh
c2U+KGV4ZWMsIGdldEpTRmxvYXQ2NEFycmF5VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CkBAIC0xODYsOSArMTg2LDkgQEAgYm9vbCBKU0Zsb2F0NjRBcnJheTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywKIHsKICAgICBKU0Zsb2F0NjRBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Zsb2F0NjRB
cnJheSo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
LSAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGluZGV4IDwgc3Rh
dGljX2Nhc3Q8RmxvYXQ2NEFycmF5Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHsK
LSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgo
ZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52YWx1ZSgp
IDwgc3RhdGljX2Nhc3Q8RmxvYXQ2NEFycmF5Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5
SW5kZXgoZXhlYywgaW5kZXgudmFsdWUoKSksIERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU0Zsb2F0
NjRBcnJheSwgQmFzZT4oZXhlYywgZ2V0SlNGbG9hdDY0QXJyYXlUYWJsZShleGVjKSwgdGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKQEAgLTIxNSw5ICsyMTUsOCBAQCB2b2lk
IEpTRmxvYXQ2NEFycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbQogewogICAgIEpTRmxvYXQ2NEFycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
KSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7
CisgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgaW5kZXgudmFsdWUo
KSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEJhc2U6OnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuY3BwCmluZGV4IGFiMjk4MTIyYTRmZDEwZDkxNGNiYWM5MTIyNTY4Y2I3YzMzZTA2YjEuLjI2
YWJiNTRhNDk0NTljZmYzZWEzOGFjMjA1ZGYzODg0YzdmM2Q4NGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcApAQCAtMTgwLDEwICsxODAsMTAgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHIK
ICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgZW50cnktPmF0dHJp
YnV0ZXMoKSwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAg
IGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgaW5kZXggPCB0aGlzT2Jq
ZWN0LT5pbXBsKCkubGVuZ3RoKCkpIHsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52YWx1ZSgpIDwg
dGhpc09iamVjdC0+aW1wbCgpLmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXMgPSBEb250RGVsZXRlIHwgUmVhZE9ubHk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgYXR0cmlidXRlcywgdG9KUyhleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwg
dGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdCwgYXR0cmlidXRlcywgdG9KUyhleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgudmFsdWUoKSkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChjYW5HZXRJdGVtc0Zvck5hbWUoZXhlYywgJnRo
aXNPYmplY3QtPmltcGwoKSwgcHJvcGVydHlOYW1lKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCmluZGV4IGRjNzU4YjM1ODQ1Y2YxYmY0MmY2MWFlZDQ3NDY1ODQxMzA1
MzE3Y2IuLmMyNzZjZTU3NzlhNjc2Y2M5ZWM2NWVmMzI5NDE5OGQ2Zjc3OTc2ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKQEAgLTg5LDExICs4OSwxMCBAQCBib29s
IFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0g
ICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRl
eCA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7Ci0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOworICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICYmIGluZGV4LnZhbHVlKCkg
PCB0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkgewogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNP
YmplY3QsIERvbnREZWxldGUgfCBEb250RW51bSwKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmdl
dENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpbmRleCkpOworICAgICAgICAgICAgdGhp
c09iamVjdC0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGluZGV4LnZhbHVlKCkp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMTIwLDkgKzExOSw4IEBA
IHZvaWQgUnVudGltZUFycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRl
eCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgdGhpc09iamVjdC0+Z2V0
Q29uY3JldGVBcnJheSgpLT5zZXRWYWx1ZUF0KGV4ZWMsIGluZGV4LCB2YWx1ZSk7CisgICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCkpIHsKKyAg
ICAgICAgdGhpc09iamVjdC0+Z2V0Q29uY3JldGVBcnJheSgpLT5zZXRWYWx1ZUF0KGV4ZWMsIGlu
ZGV4LnZhbHVlKCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250164</attachid>
            <date>2015-04-05 13:24:34 -0700</date>
            <delta_ts>2015-04-05 19:57:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143422-20150406052345.patch</filename>
            <type>text/plain</type>
            <size>44261</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OWM3NzZmOGEwNGYwZjk5NTg1YWFlZGZmYTQ5NTc4ZDk1NzAxZjA1Li5lMzJhNmY3NmRiYTI0NDBi
MjJmNTNhY2U1NzM3ODk2MzI3ZWNhMjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxNS0wNC0wNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBSZXR1cm4gT3B0aW9uYWw8dWludDMyX3Q+IGZyb20gUHJvcGVydHlO
YW1lOjphc0luZGV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDM0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQcm9wZXJ0eU5hbWU6OmFzSW5kZXggcmV0dXJucyB1aW50MzJfdCBhbmQgdXNlIFVJTlQz
Ml9NQVggYXMgTm90QW5JbmRleC4KKyAgICAgICAgQnV0IGl0J3Mgbm90IG9idmlvdXMgdG8gY2Fs
bGVycy4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgUHJvcGVydHlOYW1lOjphc0luZGV4
KCkgdG8gcmV0dXJuIE9wdGlvbmFsPHVpbnQzMl90Pi4KKyAgICAgICAgSXQgZm9yY2VzIGNhbGxl
cnMgdG8gY2hlY2sgdGhlIHZhbHVlIGlzIGluZGV4IG9yIG5vdCBleHBsaWNpdGx5LgorCisgICAg
ICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdERpcmVjdFB1dEJ5SWQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xkU3RydWN0dXJl
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAqIHJ1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6cHV0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+
OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmg6Cisg
ICAgICAgIChKU0M6OnRvSW5kZXhGcm9tQ2hhcmFjdGVycyk6CisgICAgICAgIChKU0M6OnRvSW5k
ZXhGcm9tU3RyaW5nSW1wbCk6CisgICAgICAgIChKU0M6OklkZW50aWZpZXI6OmFzSW5kZXgpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAg
ICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6CisgICAgICAgICogcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQpOgorICAgICAgICAoSlND
OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVmaW5lT3duUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29y
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdE1heUJlSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50
aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0
eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZSk6CisgICAgICAgICogcnVudGltZS9Q
cm9wZXJ0eU5hbWUuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lOjphc0luZGV4KToKKyAg
ICAgICAgKEpTQzo6dG9VSW50MzJGcm9tQ2hhcmFjdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OnRvVUludDMyRnJvbVN0cmluZ0ltcGwpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
UHJvcGVydHlOYW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6
YWRkKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OlN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8pOgorCiAyMDE1LTA0LTA0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBMb2dpY2FsbHkgZW1wdHkgV2Vha0Jsb2NrcyBzaG91bGQgbm90IHBp
biBkb3duIHRoZWlyIE1hcmtlZEJsb2NrcyBpbmRlZmluaXRlbHkuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI1
YTEwYTMwZDJkZTUzNjQ5OTBjZTRjMWZlOGEzZDlmODEwYzdlMi4uMjc3ZWU1MmU5ZjQyYzc3MzZi
NDg5ZTg0ZTE2ODMyNmU0ZDA1NzgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE1
LTA0LTA1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAg
IFJldHVybiBPcHRpb25hbDx1aW50MzJfdD4gZnJvbSBQcm9wZXJ0eU5hbWU6OmFzSW5kZXgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzQyMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQWxsQ29s
bGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSFRNTEFsbENvbGxlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5l
cmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2NEFycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJyYXk6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0Zsb2F0NjRBcnJheTo6cHV0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1l
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6
cHV0KToKKwogMjAxNS0wNC0wNCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgW0NvbnRlbnQgRmlsdGVyaW5nXSBCbG9ja2VkIHBhZ2UgaXMgbm90IGFsd2F5cyBkaXNw
bGF5ZWQgd2hlbiBpdCBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAppbmRleCBhOWE0N2UwODEzYTIxNGIxMjE5NmZlNjJjMjJl
MTRlM2NjNmU1MzdjLi44YzllM2RlNzRkZGUwNzBlODNiMWEyOWE5Yzg2NjQ2MWU5MTBlZDJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3Bw
CkBAIC0yNzAsNyArMjcwLDcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBBdG9taWNTdHJpbmdJbXAKICAgICBpZiAoc2V0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoKTsKIAotICAgIGlmICh0
b1VJbnQzMkZyb21TdHJpbmdJbXBsKHVpZCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgIGlmICh0b0luZGV4RnJvbVN0cmluZ0ltcGwodWlkKSkKICAgICAgICAgcmV0dXJuIEdldEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
aW5kZXggYjdmZTVhMDA0NmUzZGU3YWY0NDFjZjQ2ZDllZDhkN2U1OTg2MTc0MS4uZjIxZGUzOGM4
Nzg1YzQyMGMxMGFlOWUwOWU2MjE5MTdjZDcwYmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAtMzEwLDcgKzMxMCw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5l
QmxvY2ssIENvZGVCbG9jayogZGZnCiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCwgQXRvbWljU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KQogewotICAgIGlmICh0
b1VJbnQzMkZyb21TdHJpbmdJbXBsKHVpZCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgIGlmICh0b0luZGV4RnJvbVN0cmluZ0ltcGwodWlkKSkKICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAKICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKaW5kZXggM2I5MmRkNThmNjBhY2IzY2I5MDc5NTRjYzNlMjc2NTQxZTllMGVhYi4u
MzUxYmVjOWY2M2NlMTIzZmU1MzFjMWM5NWExNjc3ZjMyNmI0YjY2OCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKQEAgLTE1MTMsNyArMTUxMyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0RGlyZWN0UHV0QnlJZChSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmCiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHB1
dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCAocHJvcGVydHkgIT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvICYmIFByb3BlcnR5TmFtZShwcm9wZXJ0eSku
YXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgKHByb3Bl
cnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90byAmJiAhcHJvcGVydHku
YXNJbmRleCgpKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAppbmRleCA5NGQ2OGRkMGJmZTM2Y2RiZTk3OGNlODFmYjFkZDQ4MmFiZTUz
NzA0Li4wOTNmMzgwMTZiZjBmZDc4YzY4OWQ0MGE1YTNkNTAzMzljZDcxZjExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTk5OSw3ICs5OTksNyBAQCBzdGF0aWMgU3Ry
dWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRl
KiBleGVjLCBWTSogdgogewogICAgIFByb3BlcnR5TmFtZSBwbmFtZShpZGVudCk7CiAgICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgaWYgKCFvbGRTdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkgfHwgb2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSB8fCBwbmFtZS5hc0lu
ZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgIGlmICghb2xkU3RydWN0dXJl
LT5pc09iamVjdCgpIHx8IG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgfHwgcG5hbWUuYXNJ
bmRleCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFByb3BlcnR5T2Zmc2V0IHBy
b3BlcnR5T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA2OTA1YThiNTJlMTMwZTEyZTcz
ZWY2OTZjYjA4ODRhYjcyYmYwYTdkLi45MWIzMzI1NTlhZmI3YmNiZTBiNWYyNTJmZGQ2ODQxOTUy
YzZmMDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMzM3LDEwICszMzcsOSBAQCBjbGFzcyBS
dW50aW1lQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKLSAgICAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwotICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RGVsZXRlIHwgRG9udEVudW0s
IGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fdmVjdG9yW2luZGV4XSkpOworICAgICAgICBPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgICAgICBpZiAo
aW5kZXggJiYgaW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSB7CisgICAg
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnREZWxldGUgfCBEb250RW51bSwg
anNOdW1iZXIodGhpc09iamVjdC0+bV92ZWN0b3JbaW5kZXgudmFsdWUoKV0pKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAppbmRleCA2ZjhlY2Q5OTE0MmI2MmE4MzUzMzVm
NDMzODJkYTgwNmRkOWExZDA2Li5mYzgwMzg5NDkxNjRlMGMzOWJiOTQ2MWQ5YjUwZDk4ZjhhMGE4
OGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCkBAIC03NjAsMTAgKzc2MCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVmVjdG9yPHVpbnQzMl90
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4ga2V5czsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG5hbWVBcnJheS5zaXplKCk7ICsraSkgewogICAgICAgICBQcm9wZXJ0eU5hbWUgbmFtZSA9
IG5hbWVBcnJheVtpXTsKLSAgICAgICAgdWludDMyX3QgaW5kZXggPSBuYW1lLmFzSW5kZXgoKTsK
LSAgICAgICAgaWYgKGluZGV4ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
T3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5kZXggPSBuYW1lLmFzSW5kZXgoKTsKKyAgICAg
ICAgaWYgKCFvcHRpb25hbEluZGV4KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAor
CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpOwogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZ2V0T3JIb2xlKHRoaXNPYmosIGV4ZWMsIGluZGV4KTsKICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCmluZGV4IDcxOWRjODgwMGM1NWJk
MTBmZmFjOWVjZDhkMWNjODkyYTExNDk0MjcuLjQ0Nzc5YzQzNDExMjBhZDc2MGRlYTFiNDczOGFk
NDI0ZjQzNWQyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaApAQCAtNDksOSArNDksOSBAQAogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOwotICAg
IGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7Ci0gICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlj
a2x5KGluZGV4KSk7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gaWRlbnQuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHko
aW5kZXgudmFsdWUoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25l
LCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgudmFsdWUoKSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0xMTMsOSArMTEzLDkgQEAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsK
LSAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewotICAg
ICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CisgICAg
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gaWRlbnQuYXNJbmRleCgpOworICAgIGlmIChpbmRl
eCAmJiB0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgudmFsdWUoKSkpIHsK
KyAgICAgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleC52YWx1ZSgpLCB2
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xNDcsOSArMTQ3LDkgQEAK
ICAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSkpCiAgICAg
ICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlVGhpbmdzKHZtKTsKICAgICAKLSAgICB1bnNpZ25lZCBp
bmRleCA9IGlkZW50LmFzSW5kZXgoKTsKLSAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5k
ZXhRdWlja2x5KGluZGV4KSkgewotICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZUFyZ3VtZW50
KHZtLCBpbmRleCk7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gaWRlbnQuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHko
aW5kZXgudmFsdWUoKSkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+b3ZlcnJpZGVBcmd1bWVudCh2
bSwgaW5kZXgudmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAg
LTE4MCw4ICsxODAsOSBAQAogICAgICAgICB8fCBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5j
YWxsZWUpCiAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nhcnkodm0p
OwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGlkZW50LmFzSW5kZXgoKTsK
LSAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsK
KyAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5kZXggPSBpZGVudC5hc0luZGV4
KCk7CisgICAgICAgIGlmIChvcHRpb25hbEluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkFjY2Vzc0lu
ZGV4UXVpY2tseShvcHRpb25hbEluZGV4LnZhbHVlKCkpKSB7CisgICAgICAgICAgICB1aW50MzJf
dCBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTsKICAgICAgICAgICAgIGlmICghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByb3BlcnR5IGlzIG5vdCBkZWxldGVkIGFuZCB3ZSBhcmUgdXNpbmcgYSBub24tYWNjZXNzb3Ig
ZGVzY3JpcHRvciwgdGhlbgogICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBh
bGlhc2VkIGFyZ3VtZW50IHNlZXMgdGhlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSWRlbnRpZmllci5oCmluZGV4IGRlNGFjYmMyYTU3NWI2NjgwOWU0MjcxNjBhYWE0ZDM5
NjY5OWM5MTcuLjcyYzM4MjY3ZjlhZDc1YzJiMDlkNTI2M2ZmMDk0MDI3MzkwNjM4OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKQEAgLTIyLDYgKzIyLDcg
QEAKICNkZWZpbmUgSWRlbnRpZmllcl9oCiAKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAt
MzEsNiArMzIsNTMgQEAKIAogY2xhc3MgRXhlY1N0YXRlOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhclR5cGU+CitBTFdBWVNfSU5MSU5FIE9wdGlvbmFsPHVpbnQzMl90PiB0b0luZGV4RnJvbUNo
YXJhY3RlcnMoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICAvLyBBbiBlbXB0eSBzdHJpbmcgaXMgbm90IGEgbnVtYmVyLgorICAgIGlmICghbGVuZ3Ro
KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIC8vIEdldCB0aGUgZmlyc3QgY2hhcmFj
dGVyLCB0dXJuaW5nIGl0IGludG8gYSBkaWdpdC4KKyAgICB1aW50MzJfdCB2YWx1ZSA9IGNoYXJh
Y3RlcnNbMF0gLSAnMCc7CisgICAgaWYgKHZhbHVlID4gOSkKKyAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CisKKyAgICAvLyBDaGVjayBmb3IgbGVhZGluZyB6ZXJvcy4gSWYgdGhlIGZpcnN0IGNoYXJh
Y2hlciBpcyAwLCB0aGVuIHRoZQorICAgIC8vIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG11c3QgYmUg
b25lIC0gZS5nLiAiMDQyIiBpcyBub3QgZXF1YWwgdG8gIjQyIi4KKyAgICBpZiAoIXZhbHVlICYm
IGxlbmd0aCA+IDEpCisgICAgICAgIHJldHVybiBOdWxsb3B0OworCisgICAgd2hpbGUgKC0tbGVu
Z3RoKSB7CisgICAgICAgIC8vIE11bHRpcGx5IHZhbHVlIGJ5IDEwLCBjaGVja2luZyBmb3Igb3Zl
cmZsb3cgb3V0IG9mIDMyIGJpdHMuCisgICAgICAgIGlmICh2YWx1ZSA+IDB4RkZGRkZGRkZVIC8g
MTApCisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgdmFsdWUgKj0gMTA7CisK
KyAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3RlciwgdHVybmluZyBpdCBpbnRvIGEgZGln
aXQuCisgICAgICAgIHVpbnQzMl90IG5ld1ZhbHVlID0gKigrK2NoYXJhY3RlcnMpIC0gJzAnOwor
ICAgICAgICBpZiAobmV3VmFsdWUgPiA5KQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisK
KyAgICAgICAgLy8gQWRkIGluIHRoZSBvbGQgdmFsdWUsIGNoZWNraW5nIGZvciBvdmVyZmxvdyBv
dXQgb2YgMzIgYml0cy4KKyAgICAgICAgbmV3VmFsdWUgKz0gdmFsdWU7CisgICAgICAgIGlmIChu
ZXdWYWx1ZSA8IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIHZh
bHVlID0gbmV3VmFsdWU7CisgICAgfQorCisgICAgaWYgKHZhbHVlID09IFVJTlRfTUFYKQorICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0FMV0FZU19JTkxJ
TkUgT3B0aW9uYWw8dWludDMyX3Q+IHRvSW5kZXhGcm9tU3RyaW5nSW1wbChjb25zdCBTdHJpbmdJ
bXBsKiBpbXBsKQoreworICAgIGlmIChpbXBsLT5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHRv
SW5kZXhGcm9tQ2hhcmFjdGVycyhpbXBsLT5jaGFyYWN0ZXJzOCgpLCBpbXBsLT5sZW5ndGgoKSk7
CisgICAgcmV0dXJuIHRvSW5kZXhGcm9tQ2hhcmFjdGVycyhpbXBsLT5jaGFyYWN0ZXJzMTYoKSwg
aW1wbC0+bGVuZ3RoKCkpOworfQorCiBjbGFzcyBJZGVudGlmaWVyIHsKICAgICBmcmllbmQgY2xh
c3MgU3RydWN0dXJlOwogcHVibGljOgpAQCAtMTA1LDYgKzE1MywxMyBAQCBjbGFzcyBJZGVudGlm
aWVyIHsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChW
TSosIGNvbnN0IGNoYXIqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFN0cmlu
Z0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBjaGFyKik7CiAKKyAgICBzdGF0aWMgY29uc3Qg
dWludDMyX3QgTm90QW5JbmRleCA9IFVJTlRfTUFYOworCisgICAgT3B0aW9uYWw8dWludDMyX3Q+
IGFzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1N5bWJvbCgpID8gdG9J
bmRleEZyb21TdHJpbmdJbXBsKG1fc3RyaW5nLmltcGwoKSkgOiBOdWxsb3B0OworICAgIH0KKwog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCBjNmY5MjEwYTUxZWE5N2YzM2Ni
ODVmMTQ0Y2Y1MTY3Y2MzYTc1Y2E0Li42NWJlODdiYzExMmI1MzFiODMyNmQ5ODM2OWQ4ZTQ3YWFk
MGZiNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAt
MTU4LDkgKzE1OCw5IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUKIAogICAgIC8vIDQuIEVsc2Ug
aWYgUCBpcyBhbiBhcnJheSBpbmRleCAoMTUuNCksIHRoZW4KICAgICAvLyBhLiBMZXQgaW5kZXgg
YmUgVG9VaW50MzIoUCkuCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICBp
ZiAoT3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpKSB7CiAgICAgICAgIC8vIGIuIFJlamVjdCBpZiBpbmRleCA+PSBvbGRMZW4gYW5kIG9sZExl
bkRlc2MuW1tXcml0YWJsZV1dIGlzIGZhbHNlLgorICAgICAgICB1aW50MzJfdCBpbmRleCA9IG9w
dGlvbmFsSW5kZXgudmFsdWUoKTsKICAgICAgICAgaWYgKGluZGV4ID49IGFycmF5LT5sZW5ndGgo
KSAmJiAhYXJyYXktPmlzTGVuZ3RoV3JpdGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBudW1lcmljIHBy
b3BlcnR5IG9uIGFycmF5IHdpdGggbm9uLXdyaXRhYmxlIGxlbmd0aCBwcm9wZXJ0eS4iKTsKICAg
ICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRl
ZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBB
IHBhc3NpbmcgUCwgRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5kZXggN2Q2MWNhMmQ5MDIxZDgwYzdl
MmM5NjcwZGZkYjIxNTY3MGNlMjU0Yi4uMjA0ZTA4NDYwZmQ5ZTAzZDQzNWJiZDkyZjYwMTU3MzI0
MTFmNGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAKQEAgLTEyMSw5ICsxMjEsOCBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewot
ICAgICAgICBwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoZXhlYywgaW5kZXgsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKSkgeworICAgICAgICBwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoZXhlYywg
aW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCmluZGV4IDIwZDk1YWNiYmY3
MTg5MGEzNDU0OTYxMjkyOWU3Yzg0ODQ3ZTA0OTguLjJhNzg4YjVjYzM1NmI2MDlkNzhkN2JlZGFm
ZTVlYmMxYjY3YzQwN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCkBAIC0zMDIsOSAr
MzAyLDkgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVk
IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRl
eCkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBEb250RGVsZXRlIHwgUmVh
ZE9ubHksIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgIE9wdGlvbmFs
PHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4
ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleC52YWx1ZSgpKSkgeworICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnREZWxldGUgfCBSZWFkT25seSwgdGhp
c09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIApAQCAtMzI0LDkgKzMyNCw4IEBACiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAg
cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpKSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgu
dmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApAQCAtMzQzLDggKzM0Miw3IEBACiAgICAgLy8gVGhpcyBpcyBtYXRjaGluZyBG
aXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBpdCByZWplY3RzIGFsbCBhdHRlbXB0cyB0
bwogICAgIC8vIGRlZmluZU93blByb3BlcnR5IGZvciBpbmRleGVkIHByb3BlcnRpZXMgb24gdHlw
ZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUgb3V0CiAgICAgLy8gb2YgYm91bmRzLgotICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAotICAgICAgICB8
fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGggfHwgcHJv
cGVydHlOYW1lLmFzSW5kZXgoKSkKICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRU
aHJvdywgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJv
cGVydHkuIik7CiAgICAgCiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwpAQCAt
MzU2LDggKzM1NCw3IEBACiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKICAgICAKLSAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKLSAgICAgICAg
fHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoIHx8IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBy
ZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCBlMWZm
ZTViMWU1MDBjNGQwYWFhYWUzNTg0Zjc1NjZlMmNlMDcxOGMzLi5kMWRkYzRiYmQ2Y2RkYTgyYzM2
YWNkNjM3ZGU2OTkwN2Q0NzFkYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCkBAIC0zNzksOSArMzc5LDggQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1YK
ICAgICAKICAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9y
IGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBs
aWtlCiAgICAgLy8gdmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHBy
b3BlcnR5IHN0b3JhZ2UuCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5
SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwor
ICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgudmFsdWUoKSwg
dmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApAQCAtMTIzOCw5ICsxMjM3LDggQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3Io
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1YKIHsKICAgICBB
U1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7
CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBwdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCwgdmFsdWUsIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCk7CisgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCkpIHsKKyAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgudmFsdWUo
KSwgdmFsdWUsIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyNDksNyArMTI0Nyw3IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dERpcmVjdEFjY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWCiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKLSAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpOworICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmFzSW5kZXgoKSk7
CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKICAgICBwdXREaXJlY3RJbnRlcm5h
bDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzLCBzbG90KTsKQEAgLTEyOTcsOSArMTI5NSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVyCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKICAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBp
ZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNP
YmplY3QsIGV4ZWMsIGkpOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBp
bmRleC52YWx1ZSgpKTsKIAogICAgIGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVp
ZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0
ZShleGVjKTsKQEAgLTI1NTIsMTEgKzI1NDksMTAgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0YXJnZXQsIFByb3BlcnR5TmFtZSBwcm9wZXIK
IAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleChFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgdW5zaWduZWQg
YXNJbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGFzSW5kZXggPT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSk7CisgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCkpCisgICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4
LnZhbHVlKCksIHZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMs
IGFzSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5
TmFtZSwgdmFsdWUpOwogfQogCiBjbGFzcyBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHsKQEAgLTI3
MDksMTUgKzI3MDUsMTQgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU4KIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5k
ZXgsIHRoZW4gdXNlIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgdW5zaWduZWQg
aW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKSkgewogICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0g
aW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2Ug
YXMgYXJndW1lbnRzLgogICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNl
LgogICAgICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KICAgICAgICAgLy8gZS5pLiBTZXQg
b2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgogICAgICAgICAvLyBlLmlpLiBDYWxs
IHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIu
OSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1l
bnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgIC8vIGYuIFJl
dHVybiB0cnVlLgotICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAgcmV0
dXJuIG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LnZhbHVlKCks
IGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIG9i
amVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHRocm93RXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCmluZGV4IDc4Njc3NWEwZGM0OWMxMjMwN2RhZjQ1MjIxNmFiNzgzNGUxYWI4N2YuLjUz
M2I3ZDRmNjA4NTczNDEzODZmYzI1OGMzMzdhZGVkOWYxZWYzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtMTI0Niw5ICsxMjQ2LDggQEAgQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGUKICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpvYmplY3QtPnN0cnVj
dHVyZSh2bSk7CiAgICAgaWYgKG9iamVjdC0+aW5saW5lR2V0T3duUHJvcGVydHlTbG90KHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaW5kZXgg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTsKKyAgICBpZiAoT3B0aW9u
YWw8dWludDMyX3Q+IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKSkKKyAgICAgICAgcmV0
dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleC52YWx1ZSgp
LCBzbG90KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyNzYsOSArMTI3NSw4IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlCiAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlw
ZSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJl
dHVybiBnZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpOworICAgIGlmIChPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpKQorICAgICAgICByZXR1
cm4gZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LnZhbHVlKCksIHNsb3QpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtMTMyMiw3ICsxMzIwLDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWwKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigp
ID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2
YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7Ci0gICAgQVNT
RVJUKHByb3BlcnR5TmFtZS5hc0luZGV4KCkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsK
KyAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5hc0luZGV4KCkpOwogCiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAK
aW5kZXggZjZkODRiYzNlZTY1MjRhM2EzOTFhZjM0ZTI4MTIyOWVjNWM3MjFlMi4uNGIxYTZlNTVj
OTJmOWM5MzI4OTVhNmY1ZTc3NjkzNWNiOWE2NGI2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmNwcApAQCAtNDI1LDEwICs0MjUsOSBAQCBib29sIEpTU3RyaW5n
OjpnZXRTdHJpbmdQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdW5zaWdu
ZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgPCBtX2xlbmd0aCkgewot
ICAgICAgICBBU1NFUlQoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOyAvLyBObyBuZWVk
IGZvciBhbiBleHBsaWNpdCBjaGVjaywgdGhlIGFib3ZlIHRlc3Qgd291bGQgYWx3YXlzIGZhaWwh
Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihnZXRJbmRleChleGVjLCBpKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52YWx1ZSgpIDwgbV9s
ZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4KGV4ZWMs
IGluZGV4LnZhbHVlKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAppbmRleCBjMWFmMGNhZTFjNjIzYjM2MmNmNGRiMzYyYjVjOTU0OTVlOGM3NDM5Li5mM2I0MTUz
NTcxNTdlNWQ3N2Q3ZTZjNTczNzk4YzJiYWM4YjViN2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgKQEAgLTYyNiwxMCArNjI2LDkgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgPCBtX2xlbmd0aCkgewotICAgICAg
ICBBU1NFUlQoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOyAvLyBObyBuZWVkIGZvciBh
biBleHBsaWNpdCBjaGVjaywgdGhlIGFib3ZlIHRlc3Qgd291bGQgYWx3YXlzIGZhaWwhCi0gICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCBnZXRJbmRleChl
eGVjLCBpKSk7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKKyAgICBpZiAoaW5kZXggJiYgaW5kZXgudmFsdWUoKSA8IG1fbGVuZ3RoKSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCBnZXRJbmRl
eChleGVjLCBpbmRleC52YWx1ZSgpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAppbmRl
eCBkNDU0NGE0ZjZmMjZjYWE4YzM4NDVkYWYwZmNhZmU3MzIzMjhiZGNjLi5kYzI0NTJhMzZhNzE0
YWU3YzAwMjE4OTA0NGM4ZWU2MzRkYmMyNzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcApAQCAtNjQ5LDkgKzY0OSw4IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0pTT05XaGl0ZVNwYWNlKGNvbnN0IENoYXJUeXBlJiBjKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmplY3RT
dGFjay5sYXN0KCkpOwogICAgICAgICAgICAgICAgIFByb3BlcnR5TmFtZSBpZGVudCA9IGlkZW50
aWZpZXJTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IGlkZW50LmFz
SW5kZXgoKTsKLSAgICAgICAgICAgICAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBp
LCBsYXN0VmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBpZGVudC5hc0luZGV4KCkpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGly
ZWN0SW5kZXgobV9leGVjLCBpbmRleC52YWx1ZSgpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52
bSgpLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2su
cmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlOYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5h
bWUuaAppbmRleCA2NTVlNzRkNjJhYzM2MTIwYTE5NjFhYmQ3MDExZmY2YmVjNTIxNWIzLi4yN2Uw
ZDE4NGVjNjliNGNjN2Q1MWFhMDQ2ZDNlYzhlYTgxOTk3OWMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWUuaApAQCAtMjgsNTQgKzI4LDEwIEBACiAKICNp
bmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZU5hbWUuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KLUFMV0FZU19JTkxJTkUgdWludDMyX3QgdG9VSW50MzJGcm9tQ2hhcmFjdGVy
cyhjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8v
IEFuIGVtcHR5IHN0cmluZyBpcyBub3QgYSBudW1iZXIuCi0gICAgaWYgKCFsZW5ndGgpCi0gICAg
ICAgIHJldHVybiBVSU5UX01BWDsKLQotICAgIC8vIEdldCB0aGUgZmlyc3QgY2hhcmFjdGVyLCB0
dXJuaW5nIGl0IGludG8gYSBkaWdpdC4KLSAgICB1aW50MzJfdCB2YWx1ZSA9IGNoYXJhY3RlcnNb
MF0gLSAnMCc7Ci0gICAgaWYgKHZhbHVlID4gOSkKLSAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwot
ICAgIAotICAgIC8vIENoZWNrIGZvciBsZWFkaW5nIHplcm9zLiBJZiB0aGUgZmlyc3QgY2hhcmFj
aGVyIGlzIDAsIHRoZW4gdGhlCi0gICAgLy8gbGVuZ3RoIG9mIHRoZSBzdHJpbmcgbXVzdCBiZSBv
bmUgLSBlLmcuICIwNDIiIGlzIG5vdCBlcXVhbCB0byAiNDIiLgotICAgIGlmICghdmFsdWUgJiYg
bGVuZ3RoID4gMSkKLSAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgIAotICAgIHdoaWxlICgt
LWxlbmd0aCkgewotICAgICAgICAvLyBNdWx0aXBseSB2YWx1ZSBieSAxMCwgY2hlY2tpbmcgZm9y
IG92ZXJmbG93IG91dCBvZiAzMiBiaXRzLgotICAgICAgICBpZiAodmFsdWUgPiAweEZGRkZGRkZG
VSAvIDEwKQotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgICAgICB2YWx1ZSAqPSAx
MDsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIsIHR1cm5pbmcg
aXQgaW50byBhIGRpZ2l0LgotICAgICAgICB1aW50MzJfdCBuZXdWYWx1ZSA9ICooKytjaGFyYWN0
ZXJzKSAtICcwJzsKLSAgICAgICAgaWYgKG5ld1ZhbHVlID4gOSkKLSAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKLSAgICAgICAgCi0gICAgICAgIC8vIEFkZCBpbiB0aGUgb2xkIHZhbHVlLCBj
aGVja2luZyBmb3Igb3ZlcmZsb3cgb3V0IG9mIDMyIGJpdHMuCi0gICAgICAgIG5ld1ZhbHVlICs9
IHZhbHVlOwotICAgICAgICBpZiAobmV3VmFsdWUgPCB2YWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKLSAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHZhbHVlOwotfQotCi1BTFdBWVNfSU5MSU5FIHVpbnQzMl90IHRvVUludDMyRnJvbVN0
cmluZ0ltcGwoU3RyaW5nSW1wbCogaW1wbCkKLXsKLSAgICBpZiAoaW1wbC0+aXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiB0b1VJbnQzMkZyb21DaGFyYWN0ZXJzKGltcGwtPmNoYXJhY3RlcnM4KCks
IGltcGwtPmxlbmd0aCgpKTsKLSAgICByZXR1cm4gdG9VSW50MzJGcm9tQ2hhcmFjdGVycyhpbXBs
LT5jaGFyYWN0ZXJzMTYoKSwgaW1wbC0+bGVuZ3RoKCkpOwotfQotCiBjbGFzcyBQcm9wZXJ0eU5h
bWUgewogcHVibGljOgogICAgIFByb3BlcnR5TmFtZShBdG9taWNTdHJpbmdJbXBsKiBwcm9wZXJ0
eU5hbWUpCkBAIC0xMDYsMTMgKzYyLDEzIEBAIGNsYXNzIFByb3BlcnR5TmFtZSB7CiAgICAgICAg
IHJldHVybiAoIW1faW1wbCB8fCBtX2ltcGwtPmlzU3ltYm9sKCkpID8gbnVsbHB0ciA6IG1faW1w
bDsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgTm90QW5JbmRleCA9IFVJTlRf
TUFYOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBOb3RBbkluZGV4ID0gSWRlbnRpZmllcjo6
Tm90QW5JbmRleDsKIAotICAgIHVpbnQzMl90IGFzSW5kZXgoKQorICAgIE9wdGlvbmFsPHVpbnQz
Ml90PiBhc0luZGV4KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAobV9pbXBsICYmICFt
X2ltcGwtPmlzU3ltYm9sKCkpID8gdG9VSW50MzJGcm9tU3RyaW5nSW1wbChtX2ltcGwpIDogTm90
QW5JbmRleDsKKyAgICAgICAgcmV0dXJuIChtX2ltcGwgJiYgIW1faW1wbC0+aXNTeW1ib2woKSkg
PyB0b0luZGV4RnJvbVN0cmluZ0ltcGwobV9pbXBsKSA6IE51bGxvcHQ7CiAgICAgfQotICAgIAor
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAobV9pbXBsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlOYW1lQXJyYXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlOYW1lQXJyYXkuY3BwCmluZGV4IGU0ZTVlMjdhMDRmYTA0ZjY4NWU2YzdiM2NlZWY5N2JkNWEx
MWI0NzMuLjRmM2RlM2QxNTVlYzA2NTFmYmNjZWE2NjdiZjdhYTJkOTU0OTU0ZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAK
QEAgLTMzLDggKzMzLDggQEAgdm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKFN0cmluZ0ltcGwq
IGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpZGVudGlmaWVyIHx8IChpZGVudGlmaWVyID09
IFN0cmluZ0ltcGw6OmVtcHR5KCkgfHwgaWRlbnRpZmllci0+aXNBdG9taWMoKSB8fCBpZGVudGlm
aWVyLT5pc1N5bWJvbCgpKSk7CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAg
dWludDMyX3QgaW5kZXggPSBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVVpZChtX3ZtLCBp
ZGVudGlmaWVyKSkuYXNJbmRleCgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCBpbmRl
eCA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggfHwgaW5kZXggPj0gbV9wcmV2aW91c2x5RW51
bWVyYXRlZExlbmd0aCk7CisgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IElkZW50
aWZpZXI6OmZyb21VaWQobV92bSwgaWRlbnRpZmllcikuYXNJbmRleCgpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGluZGV4LCAhaW5kZXggfHwgaW5kZXgudmFsdWUoKSA+PSBtX3ByZXZpb3VzbHlF
bnVtZXJhdGVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBpZiAobV9hbHRlcm5hdGVTZXQgJiYgbV9h
bHRlcm5hdGVTZXQtPmNvbnRhaW5zKGlkZW50aWZpZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKaW5kZXggMjU1NjkwZmY0OGM4ZGIwNzQyNTVi
ZTk5MzRhOTZhNDcyMjY1OWM2MS4uN2I4MGQyNzk2NjJmODc4YjAyZTNiMTFkYjM4YjA0NzFjMGYx
ZjEwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCkBAIC0xMjgsOSArMTI4LDggQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHIKICAgICBTdHJp
bmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CiAgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgoaSkpIHsK
LSAgICAgICAgQVNTRVJUKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsgLy8gTm8gbmVl
ZCBmb3IgYW4gZXhwbGljaXQgY2hlY2ssIHRoZSBhYm92ZSB0ZXN0IHdvdWxkIGFsd2F5cyBmYWls
IQorICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
CisgICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5k
ZXgoaW5kZXgudmFsdWUoKSkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRl
eCA1NjNhNWI1NTA4ZGVmY2UzNzE5MTMzODc1ZjI1MTNjNzExODM0NjJlLi5iY2MxMmM3NjhlOTQ1
MzEzZTQxNjYxM2JmY2YxMDRjNzY5OWJhYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTEwMDQsOCArMTAwNCw3IEBAIHZvaWQgU3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKIGJv
b2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICBpZiAocHJvcGVydHlOYW1lLmFzSW5kZXgoKSkKICAgICAgICAgcmV0dXJuIGFueU9iamVjdElu
Q2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKTsKICAgICAKICAgICBmb3IgKFN0cnVj
dHVyZSogY3VycmVudCA9IHRoaXM7IDspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCBiZTc3N2EyODUwYTM4MTdkZjVmZjIzYzJh
NWJjMGYwMmQwZWQ5MjlhLi41OWNiMDQ0Mjc0MDA0YTU0NTc3OTI5YjllNTUyZjlkNDBlMTE3NWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwCkBAIC0yMTQsMTEgKzIxNCwxMCBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eQogICAgIC8v
IFdlIG5lZWQgdG8gdGVzdCB0aGUgY29ycmVjdCBwcmlvcml0eSBvcmRlci4KIAogICAgIC8vIGFs
bG93IHdpbmRvd1sxXSBvciBwYXJlbnRbMV0gZXRjLiAoIzU2OTgzKQotICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpIDwgdGhpc09iamVjdC0+aW1wbCgp
LmZyYW1lKCktPnRyZWUoKS5zY29wZWRDaGlsZENvdW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52YWx1
ZSgpIDwgdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCktPnRyZWUoKS5zY29wZWRDaGlsZENvdW50
KCkpIHsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnRE
ZWxldGUgfCBEb250RW51bSwKLSAgICAgICAgICAgIHRvSlMoZXhlYywgdGhpc09iamVjdC0+aW1w
bCgpLmZyYW1lKCktPnRyZWUoKS5zY29wZWRDaGlsZChpKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCkpKTsKKyAgICAgICAgICAgIHRvSlMoZXhlYywgdGhpc09iamVjdC0+aW1wbCgpLmZyYW1lKCkt
PnRyZWUoKS5zY29wZWRDaGlsZChpbmRleC52YWx1ZSgpKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4
IDNlYmE0MjFiYzczNDE3NzNhYzhmNmFhNmIxMjFlYWNkMWU4MmE3YjIuLjhmOGYyMjk4MzYwNTY5
ZDQwMWVmYzMyNWEwNzU5NGNhZWRhOTg2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC02NSw5ICs2
NSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsQ29s
bGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9
PSAxKSB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMu
CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gdG9VSW50MzJGcm9tU3Ry
aW5nSW1wbChzdHJpbmcuaW1wbCgpKTsKLSAgICAgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhl
eGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLml0ZW0oaW5kZXgp
KSk7CisgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSB0b0luZGV4RnJvbVN0
cmluZ0ltcGwoc3RyaW5nLmltcGwoKSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi5p
dGVtKGluZGV4LnZhbHVlKCkpKSk7CiAKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQu
aW1hZ2VzKCc8bmFtZT4nKSBldGMuCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFt
ZWRJdGVtcyhleGVjLCBqc0NvbGxlY3Rpb24sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
c3RyaW5nKSkpOwpAQCAtNzUsOSArNzQsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogCiAgICAgLy8g
VGhlIHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdhbnQK
ICAgICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gdG9VSW50MzJGcm9tU3RyaW5nSW1wbChl
eGVjLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhleGVjKS5pbXBsKCkpOwotICAgIGlmIChpbmRl
eCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgaWYgKGF1dG8qIGl0ZW0g
PSBjb2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4KSkKKyAgICBpZiAo
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gdG9JbmRleEZyb21TdHJpbmdJbXBsKGV4ZWMtPmFy
Z3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpLmltcGwoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29s
bGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGl0ZW0pKTsKICAgICB9CiAKQEAgLTEwMyw5ICsxMDEs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYQogCiBKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rp
b246Oml0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIHVpbnQzMl90IGluZGV4ID0gdG9VSW50
MzJGcm9tU3RyaW5nSW1wbChleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykuaW1wbCgpKTsKLSAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
KQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLml0ZW0o
aW5kZXgpKTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gdG9JbmRleEZyb21T
dHJpbmdJbXBsKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5p
bXBsKCkpKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgp
Lml0ZW0oaW5kZXgudmFsdWUoKSkpOwogICAgIHJldHVybiBuYW1lZEl0ZW1zKGV4ZWMsIHRoaXMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMmZiZDEwZTU3NGY0MjFkMDM4NzRj
ZGQzZjMzNTZkZmRkYTA3YWQxOC4uY2U3ZGY5NDNkMDkxNzRjY2NhMmEwZDYxNWUyMWQyNjgwYTcx
MDg4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KQEAgLTM3MywxNSArMzczLDE2IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3Bl
cnR5U2xvdEJvZHkKICAgICB9CiAKICAgICBpZiAoJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbikgewot
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIHVuc2lnbmVkIGluZGV4
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcbiIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eVNsb3RJbXBsLCAiICAgIE9wdGlvbmFsPHVpbnQzMl90PiBvcHRpb25hbEluZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTtcbiIpOwogCiAgICAgICAgICMgSWYgdGhlIGl0ZW0gZnVuY3Rp
b24gcmV0dXJucyBhIHN0cmluZyB0aGVuIHdlIGxldCB0aGUgVHJlYXRSZXR1cm5lZE51bGxTdHJp
bmdBcyBoYW5kbGUgdGhlIGNhc2VzCiAgICAgICAgICMgd2hlcmUgdGhlIGluZGV4IGlzIG91dCBv
ZiByYW5nZS4KICAgICAgICAgaWYgKCRpbmRleGVkR2V0dGVyRnVuY3Rpb24tPnNpZ25hdHVyZS0+
dHlwZSBlcSAiRE9NU3RyaW5nIikgewotICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlT
bG90SW1wbCwgIiAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKG9w
dGlvbmFsSW5kZXgpIHtcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4ICYmIGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgpLmxlbmd0aCgpKSB7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKG9wdGlv
bmFsSW5kZXggJiYgb3B0aW9uYWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+aW1wbCgpLmxl
bmd0aCgpKSB7XG4iKTsKICAgICAgICAgfQorICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNs
b3RJbXBsLCAiICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTtc
biIpOwogICAgICAgICAjIEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBzZXR0ZXIsIHRoZSBpbmRl
eCB3aWxsIGJlIHdyaXRhYmxlCiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CiAgICAgICAgICAgICBwdXNoKEBnZXRP
d25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gJHtuYW1l
c3BhY2VNYXliZX1Eb250RGVsZXRlO1xuIik7CkBAIC0yNDYzLDkgKzI0NjQsOCBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNl
dHRlcihleGVjLCBpbmRleCwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCkpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1
ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAppbmRleCBkMjRhMmVhNzA2YWUyZDk0
NDJiNzA3NWY5NWUyODgzMzY1NjIwNjFhLi41YTUxNTlmNmEwMTdlY2I2Y2ExNTgyODg1NTJlYTIz
YjBlZWJhOWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAKQEAgLTE3NCw5ICsxNzQsOSBAQCBib29s
IEpTRmxvYXQ2NEFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZQogewogICAgIEpTRmxvYXQ2NEFycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXggJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxGbG9hdDY0QXJyYXkqPih0aGlzT2JqZWN0LT5pbXBs
KCkpLT5sZW5ndGgoKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4g
aW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52
YWx1ZSgpIDwgc3RhdGljX2Nhc3Q8RmxvYXQ2NEFycmF5Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+
bGVuZ3RoKCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNGbG9hdDY0QXJyYXksIEJh
c2U+KGV4ZWMsIGdldEpTRmxvYXQ2NEFycmF5VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CkBAIC0xODYsOSArMTg2LDkgQEAgYm9vbCBKU0Zsb2F0NjRBcnJheTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywKIHsKICAgICBKU0Zsb2F0NjRBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Zsb2F0NjRB
cnJheSo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
LSAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGluZGV4IDwgc3Rh
dGljX2Nhc3Q8RmxvYXQ2NEFycmF5Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHsK
LSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgo
ZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTsKKyAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAmJiBpbmRleC52YWx1ZSgp
IDwgc3RhdGljX2Nhc3Q8RmxvYXQ2NEFycmF5Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5
SW5kZXgoZXhlYywgaW5kZXgudmFsdWUoKSksIERvbnREZWxldGUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU0Zsb2F0
NjRBcnJheSwgQmFzZT4oZXhlYywgZ2V0SlNGbG9hdDY0QXJyYXlUYWJsZShleGVjKSwgdGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKQEAgLTIxNSw5ICsyMTUsOCBAQCB2b2lk
IEpTRmxvYXQ2NEFycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbQogewogICAgIEpTRmxvYXQ2NEFycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
KSB7Ci0gICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7
CisgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCkpIHsKKyAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgaW5kZXgudmFsdWUo
KSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEJhc2U6OnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJn
ZXQuY3BwCmluZGV4IGFiMjk4MTIyYTRmZDEwZDkxNGNiYWM5MTIyNTY4Y2I3YzMzZTA2YjEuLjY2
NGZlYTI1ODVlMzJlOGE5YmNkNjg0ZTQwNDExYjc2OWJiNmFjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcApAQCAtMTgwLDggKzE4MCw5IEBAIGJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByCiAg
ICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIGVudHJ5LT5hdHRyaWJ1
dGVzKCksIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGluZGV4IDwgdGhpc09iamVj
dC0+aW1wbCgpLmxlbmd0aCgpKSB7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5k
ZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChvcHRpb25hbEluZGV4ICYmIG9w
dGlvbmFsSW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPmltcGwoKS5sZW5ndGgoKSkgeworICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTsKICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBSZWFkT25seTsKICAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzT2JqZWN0LCBhdHRyaWJ1dGVzLCB0b0pTKGV4ZWMsIHRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpLCB0aGlzT2JqZWN0LT5pbXBsKCkuaXRlbShpbmRleCkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKaW5kZXgg
ZGM3NThiMzU4NDVjZjFiZjQyZjYxYWVkNDc0NjU4NDEzMDUzMTdjYi4uYzI3NmNlNTc3OWE2NzZj
YzllYzY1ZWYzMjk0MTk4ZDZmNzc5NzY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfYXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmNwcApAQCAtODksMTEgKzg5LDEwIEBAIGJvb2wgUnVudGltZUFycmF5OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBpbmRleCA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVu
Z3RoKCkpIHsKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCk7CisgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgo
KTsKKyAgICBpZiAoaW5kZXggJiYgaW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPmdldExlbmd0
aCgpKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udERlbGV0ZSB8IERv
bnRFbnVtLAotICAgICAgICAgICAgdGhpc09iamVjdC0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1
ZUF0KGV4ZWMsIGluZGV4KSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5nZXRDb25jcmV0ZUFy
cmF5KCktPnZhbHVlQXQoZXhlYywgaW5kZXgudmFsdWUoKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCkBAIC0xMjAsOSArMTE5LDggQEAgdm9pZCBSdW50aW1lQXJyYXk6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBpbmRleCA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkgewotICAgICAgICB0aGlzT2JqZWN0LT5nZXRDb25jcmV0ZUFycmF5KCktPnNldFZh
bHVlQXQoZXhlYywgaW5kZXgsIHZhbHVlKTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKSkgeworICAgICAgICB0aGlzT2JqZWN0LT5nZXRD
b25jcmV0ZUFycmF5KCktPnNldFZhbHVlQXQoZXhlYywgaW5kZXgudmFsdWUoKSwgdmFsdWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAo=
</data>
<flag name="review"
          id="274984"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>