<?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>68580</bug_id>
          
          <creation_ts>2011-09-21 15:45:38 -0700</creation_ts>
          <short_desc>DFG JIT cannot compile op_new_object, op_new_array, op_new_array_buffer, or op_new_regexp</short_desc>
          <delta_ts>2011-09-28 21:48:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>471226</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 15:45:38 -0700</bug_when>
    <thetext>Not being able to compile these opcodes significantly reduces coverage in benchmarks and probably real websites.  The DFG should support them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474382</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 17:15:39 -0700</bug_when>
    <thetext>Looks like having op_new_object alone is a 3% win on Kraken.  I&apos;ll plow ahead and implement the others as well, though these will be fairly naive implementations designed to just give us more coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474479</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 21:18:13 -0700</bug_when>
    <thetext>Implementing op_new_object, op_new_array, and op_new_array_buffer is a win on Kraken and V8, and neutral on SunSpider.

But implementing op_new_regexp is a regression on SunSpider, because string-validate-input does things that fail speculation due to some static speculation logic on comparisons that&apos;s still hanging around.

Recommendation: reintroduce DFG_RESTRICTIONS and restrict op_new_regexp until we fix those regressions.



Benchmark report for SunSpider, V8, and Kraken.

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

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

                                            TipOfTree               NewObjArr                                    
SunSpider:
   3d-cube                                7.6069+-0.1990    ?     7.6847+-0.2081       ? might be 1.0102x slower
   3d-morph                               7.3532+-0.1059    ?     7.4783+-0.1642       ? might be 1.0170x slower
   3d-raytrace                            8.0790+-0.2086    ?     8.1011+-0.1652       ?
   access-binary-trees                    2.0403+-0.0725          2.0396+-0.0843       
   access-fannkuch                        6.2823+-0.1056    ?     6.2945+-0.0926       ?
   access-nbody                           3.8682+-0.1419          3.6726+-0.0948         might be 1.0533x faster
   access-nsieve                          2.6062+-0.0740    ?     2.6352+-0.0709       ? might be 1.0111x slower
   bitops-3bit-bits-in-byte               1.7547+-0.0213          1.7003+-0.0410         might be 1.0320x faster
   bitops-bits-in-byte                    2.7603+-0.0593    ?     2.7621+-0.1151       ?
   bitops-bitwise-and                     3.3824+-0.0945    ?     3.4179+-0.0806       ? might be 1.0105x slower
   bitops-nsieve-bits                     5.4669+-0.1184    ?     5.6133+-0.1420       ? might be 1.0268x slower
   controlflow-recursive                  2.1387+-0.0375          2.0752+-0.0489         might be 1.0306x faster
   crypto-aes                             6.1968+-0.1590    !     6.5941+-0.1909       ! definitely 1.0641x slower
   crypto-md5                             2.8109+-0.0801    ?     2.8470+-0.0919       ? might be 1.0128x slower
   crypto-sha1                            2.4519+-0.0526    ?     2.4965+-0.0925       ? might be 1.0182x slower
   date-format-tofte                     10.1652+-0.2940    ?    10.2501+-0.3256       ?
   date-format-xparb                      9.6200+-0.2456          9.4512+-0.4918         might be 1.0179x faster
   math-cordic                            6.3152+-0.1337    ?     6.3721+-0.1215       ?
   math-partial-sums                      7.4580+-0.0947    ?     7.5503+-0.1409       ? might be 1.0124x slower
   math-spectral-norm                     2.9994+-0.1077          2.9799+-0.0897       
   regexp-dna                            10.8572+-0.2331    ?    11.0281+-0.2246       ? might be 1.0157x slower
   string-base64                          5.8501+-0.1934    ?     5.9021+-0.1795       ?
   string-fasta                           6.9347+-0.1855    ?     6.9611+-0.1681       ?
   string-tagcloud                       11.8963+-0.3418         11.8376+-0.3378       
   string-unpack-code                    21.2604+-0.5087         21.0444+-0.3425         might be 1.0103x faster
   string-validate-input                  6.3037+-0.2205          6.2693+-0.1517       

   &lt;arithmetic&gt;                           6.3253+-0.0353    ?     6.3484+-0.0299       ?
   &lt;geometric&gt;                            5.2192+-0.0269    ?     5.2329+-0.0235       ?
   &lt;harmonic&gt;                             4.3191+-0.0305          4.3127+-0.0407       

                                            TipOfTree               NewObjArr                                    
V8:
   crypto                                70.8299+-0.2972         70.4997+-0.2495       
   deltablue                            231.4250+-0.8306    ?   231.6184+-1.4313       ?
   earley-boyer                          89.7968+-0.3721         89.2143+-0.3464       
   raytrace                              62.3036+-0.2579    ?    62.3904+-0.3775       ?
   regexp                               103.8305+-0.4649        103.6756+-0.3347       
   richards                             197.2494+-0.6818    ?   197.3745+-0.4847       ?
   splay                                 95.0562+-0.5740    ^    91.0451+-0.6727       ^ definitely 1.0441x faster

   &lt;arithmetic&gt;                         121.4988+-0.1952    ^   120.8311+-0.2861       ^ definitely 1.0055x faster
   &lt;geometric&gt;                          108.6305+-0.1401    ^   107.8119+-0.2417       ^ definitely 1.0076x faster
   &lt;harmonic&gt;                            98.8004+-0.1205    ^    97.9876+-0.2559       ^ definitely 1.0083x faster

                                            TipOfTree               NewObjArr                                    
Kraken:
   ai-astar                             546.8545+-3.6949        545.3186+-4.3388       
   audio-beat-detection                 204.9062+-1.9674    ^   190.9386+-0.9909       ^ definitely 1.0732x faster
   audio-dft                            424.9145+-2.3221    ^   296.9401+-3.0409       ^ definitely 1.4310x faster
   audio-fft                            139.2435+-0.4448    ^   125.6971+-0.4805       ^ definitely 1.1078x faster
   audio-oscillator                     255.0111+-1.8242    ?   256.7649+-1.8605       ?
   imaging-darkroom                     417.7086+-1.1558    ?   419.8134+-2.8078       ?
   imaging-desaturate                   223.0863+-0.6879        223.0231+-0.8260       
   imaging-gaussian-blur                579.0343+-1.2023    ?   579.4247+-1.3042       ?
   json-parse-financial                  48.6793+-0.3749         48.6245+-0.2575       
   json-stringify-tinderbox              68.1574+-0.2439    !    68.7362+-0.2441       ! definitely 1.0085x slower
   stanford-crypto-aes                  134.2218+-0.9676    ^   129.9201+-1.2568       ^ definitely 1.0331x faster
   stanford-crypto-ccm                  103.4385+-0.7074        103.2702+-0.5201       
   stanford-crypto-pbkdf2               200.0034+-0.7682    ^   194.1208+-0.8295       ^ definitely 1.0303x faster
   stanford-crypto-sha256-iterative      84.2175+-0.2737    ?    84.5064+-0.3092       ?

   &lt;arithmetic&gt;                         244.9626+-0.4782    ^   233.3642+-0.6612       ^ definitely 1.0497x faster
   &lt;geometric&gt;                          188.3567+-0.4424    ^   180.7748+-0.5055       ^ definitely 1.0419x faster
   &lt;harmonic&gt;                           142.8848+-0.4315    ^   139.4901+-0.3682       ^ definitely 1.0243x faster

                                            TipOfTree               NewObjArr                                    
All benchmarks:
   &lt;arithmetic&gt;                          94.5623+-0.1303    ^    91.0207+-0.2131       ^ definitely 1.0389x faster
   &lt;geometric&gt;                           23.8698+-0.0692    ^    23.5873+-0.0644       ^ definitely 1.0120x faster
   &lt;harmonic&gt;                             7.5946+-0.0522          7.5800+-0.0698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474481</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 21:31:49 -0700</bug_when>
    <thetext>Updated numbers after merging with https://bugs.webkit.org/show_bug.cgi?id=68932


Benchmark report for SunSpider, V8, and Kraken.

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

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

                                            TipOfTree               NewObjArr                                    
SunSpider:
   3d-cube                                7.6772+-0.2269    ?     7.6857+-0.2541       ?
   3d-morph                               7.3632+-0.1056    ?     7.3864+-0.1331       ?
   3d-raytrace                            8.0317+-0.1375    ?     8.2110+-0.2176       ? might be 1.0223x slower
   access-binary-trees                    2.0712+-0.0911    ?     2.1195+-0.1247       ? might be 1.0233x slower
   access-fannkuch                        6.3577+-0.1333          6.2040+-0.0759         might be 1.0248x faster
   access-nbody                           3.6669+-0.1079          3.6163+-0.0966         might be 1.0140x faster
   access-nsieve                          2.5418+-0.0462    ?     2.5684+-0.0595       ? might be 1.0105x slower
   bitops-3bit-bits-in-byte               1.7133+-0.0264          1.7003+-0.0275       
   bitops-bits-in-byte                    2.6883+-0.0732    ?     2.7248+-0.0730       ? might be 1.0136x slower
   bitops-bitwise-and                     3.4668+-0.1048    ?     3.4809+-0.1225       ?
   bitops-nsieve-bits                     5.4754+-0.1628          5.4635+-0.1165       
   controlflow-recursive                  2.0714+-0.0706          2.0702+-0.0485       
   crypto-aes                             6.1978+-0.2016    ?     6.6180+-0.2952       ? might be 1.0678x slower
   crypto-md5                             2.7825+-0.0954    ?     2.8597+-0.1406       ? might be 1.0277x slower
   crypto-sha1                            2.4214+-0.0911    ?     2.5091+-0.0638       ? might be 1.0362x slower
   date-format-tofte                     10.4897+-0.4051         10.0904+-0.3486         might be 1.0396x faster
   date-format-xparb                      9.7609+-0.2870          9.6647+-0.3170       
   math-cordic                            6.3127+-0.1011          6.2664+-0.1367       
   math-partial-sums                      7.7387+-0.1878          7.5655+-0.1525         might be 1.0229x faster
   math-spectral-norm                     2.8640+-0.0801          2.7946+-0.0654         might be 1.0249x faster
   regexp-dna                            10.8194+-0.2209         10.7082+-0.1562         might be 1.0104x faster
   string-base64                          5.8993+-0.2858    ?     6.0486+-0.3350       ? might be 1.0253x slower
   string-fasta                           7.0743+-0.2303          6.8448+-0.1370         might be 1.0335x faster
   string-tagcloud                       11.9568+-0.3840         11.9143+-0.4237       
   string-unpack-code                    21.5022+-0.5827         21.1597+-0.5363         might be 1.0162x faster
   string-validate-input                  6.3864+-0.2204          6.3736+-0.2340       

   &lt;arithmetic&gt;                           6.3589+-0.0511          6.3326+-0.0247       
   &lt;geometric&gt;                            5.2112+-0.0421    ?     5.2132+-0.0273       ?
   &lt;harmonic&gt;                             4.2797+-0.0500    ?     4.2961+-0.0374       ?

                                            TipOfTree               NewObjArr                                    
V8:
   crypto                                70.7538+-0.3176    ?    70.8774+-0.4921       ?
   deltablue                            228.2342+-0.9343    ?   230.8113+-1.7273       ? might be 1.0113x slower
   earley-boyer                          89.4177+-0.2268    ?    89.8321+-0.2482       ?
   raytrace                              62.4810+-0.3734    ?    62.9065+-1.0127       ?
   regexp                               105.0118+-0.3987    ^   103.5674+-0.3795       ^ definitely 1.0139x faster
   richards                             197.8091+-0.7066    ?   198.9686+-0.6894       ?
   splay                                 95.2704+-0.5647    ^    90.6923+-0.4400       ^ definitely 1.0505x faster

   &lt;arithmetic&gt;                         121.2826+-0.2835        121.0937+-0.2348       
   &lt;geometric&gt;                          108.6315+-0.2380    ^   108.1180+-0.2627       ^ definitely 1.0047x faster
   &lt;harmonic&gt;                            98.8972+-0.2291         98.3311+-0.3495       

                                            TipOfTree               NewObjArr                                    
Kraken:
   ai-astar                             491.0886+-3.5918        487.8834+-3.4151       
   audio-beat-detection                 204.7522+-1.0111    ^   189.3919+-0.7289       ^ definitely 1.0811x faster
   audio-dft                            425.8567+-4.5656    ^   279.1306+-3.2984       ^ definitely 1.5257x faster
   audio-fft                            139.6173+-0.3716    ^   126.9211+-0.8085       ^ definitely 1.1000x faster
   audio-oscillator                     256.7287+-1.8192        256.4727+-1.7237       
   imaging-darkroom                     437.8020+-1.4023    ^   417.0573+-1.2596       ^ definitely 1.0497x faster
   imaging-desaturate                   223.1644+-0.3189    ?   223.4193+-0.4615       ?
   imaging-gaussian-blur                581.3705+-2.0634        577.9954+-1.5586       
   json-parse-financial                  47.3499+-0.2833    !    48.3064+-0.3268       ! definitely 1.0202x slower
   json-stringify-tinderbox              68.4704+-0.2395    ?    69.0268+-0.3627       ?
   stanford-crypto-aes                  134.2183+-0.7291    ^   130.4393+-1.3538       ^ definitely 1.0290x faster
   stanford-crypto-ccm                  102.8529+-0.2783    ^   101.8995+-0.4736       ^ definitely 1.0094x faster
   stanford-crypto-pbkdf2               202.2117+-1.7048    ^   193.4944+-2.7995       ^ definitely 1.0451x faster
   stanford-crypto-sha256-iterative      83.9772+-0.2160    !    85.1002+-0.2948       ! definitely 1.0134x slower

   &lt;arithmetic&gt;                         242.8186+-0.6890    ^   227.6099+-0.6454       ^ definitely 1.0668x faster
   &lt;geometric&gt;                          187.4703+-0.4093    ^   178.3609+-0.4881       ^ definitely 1.0511x faster
   &lt;harmonic&gt;                           142.0359+-0.2941    ^   138.7646+-0.4057       ^ definitely 1.0236x faster

                                            TipOfTree               NewObjArr                                    
All benchmarks:
   &lt;arithmetic&gt;                          93.9100+-0.2349    ^    89.3371+-0.2000       ^ definitely 1.0512x faster
   &lt;geometric&gt;                           23.8160+-0.1179    ^    23.4539+-0.0750       ^ definitely 1.0154x faster
   &lt;harmonic&gt;                             7.5265+-0.0857    ?     7.5514+-0.0641       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474483</commentid>
    <comment_count>4</comment_count>
      <attachid>108959</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 21:33:56 -0700</bug_when>
    <thetext>Created attachment 108959
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474493</commentid>
    <comment_count>5</comment_count>
      <attachid>108959</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-27 22:13:38 -0700</bug_when>
    <thetext>Comment on attachment 108959
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474507</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 22:32:31 -0700</bug_when>
    <thetext>Landed in r96189.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475206</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-09-28 20:06:52 -0700</bug_when>
    <thetext>This broke some tests:https://bugs.webkit.org/show_bug.cgi?id=69038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475221</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-28 21:48:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; This broke some tests:https://bugs.webkit.org/show_bug.cgi?id=69038

Looking into it!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108959</attachid>
            <date>2011-09-27 21:33:56 -0700</date>
            <delta_ts>2011-09-27 22:13:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>newstuff_patch_1.diff</filename>
            <type>text/plain</type>
            <size>24583</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTEtMDktMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGNhbm5vdCBjb21waWxlIG9wX25ld19vYmplY3QsIG9wX25ld19hcnJheSwKKyAgICAg
ICAgb3BfbmV3X2FycmF5X2J1ZmZlciwgb3Igb3BfbmV3X3JlZ2V4cAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1ODAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBh
bGwgZm91ciBvcGNvZGVzLCBidXQgaGFzIG9wX25ld19yZWdleHAgdHVybnMgb2ZmCisgICAgICAg
IGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCB1bnZlaWxzIHNvbWUgYmFkIHNwZWN1bGF0aW9uIGxvZ2lj
IHdoZW4KKyAgICAgICAgY29tcGlsaW5nIHN0cmluZy12YWxpZGF0ZS1pbnB1dC4KKyAgICAgICAg
CisgICAgICAgIFdpdGggb3BfbmV3X3JlZ2V4cCB0dXJuZWQgb2ZmLCB0aGlzIGlzIGEgNSUgd2lu
IG9uIEtyYWtlbiBhbmQgYQorICAgICAgICAwLjclIHNwZWVkLXVwIG9uIFY4LiBOZXV0cmFsIG9u
IFN1blNwaWRlci4KKworICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRm
Zy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlT3Bjb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aGFzQ29uc3RhbnRCdWZmZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnN0YXJ0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bUNvbnN0YW50
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUmVnZXhwSW5kZXgpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnJlZ2V4cEluZGV4KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRl
Tm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmlzS25vd25BcnJheSk6CisKIDIwMTEtMDktMjcgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgSklUIHNob3VsZCBzcGVjdWxhdGUgbW9yZSBh
Z2dyZXNzaXZlbHkgb24gcmVhZHMgb2YgYXJyYXkubGVuZ3RoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTYxODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzI0LDYgKzcyNCwzMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfdGhpcyk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX25ld19vYmplY3Q6IHsK
KyAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dy
YXBoKE5ld09iamVjdCkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X29iamVjdCk7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX25ld19hcnJheTogewor
ICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworICAgICAgICAgICAgZm9yIChpbnQgb3BlcmFuZElkeCA9IHN0YXJ0T3Bl
cmFuZDsgb3BlcmFuZElkeCA8IHN0YXJ0T3BlcmFuZCArIG51bU9wZXJhbmRzOyArK29wZXJhbmRJ
ZHgpCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KG9wZXJhbmRJZHgpKTsKKyAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KE5vZGU6OlZhckFyZywgTmV3QXJyYXksIE9wSW5mbygwKSwgT3BJbmZvKDApKSk7CisgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9uZXdfYXJyYXkpOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOiB7CisgICAgICAgICAgICBpbnQgc3Rh
cnRDb25zdGFudCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgbnVtQ29uc3RhbnRzID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KE5ld0FycmF5QnVmZmVyLCBPcEluZm8oc3RhcnRDb25zdGFudCksIE9wSW5mbyhudW1Db25zdGFu
dHMpKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfYXJyYXlfYnVmZmVyKTsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogeworICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
TmV3UmVnZXhwLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKKyAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19yZWdleHApOworICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9nZXRfY2FsbGVlOiB7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChHZXRDYWxsZWUpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9jYWxsZWUpOwpAQCAtMTQwMSw4ICsxNDI3LDkg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAK
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEKLSAgICAgICAg
ICAgIEFTU0VSVCghY2FuQ29tcGlsZU9wY29kZShvcGNvZGVJRCkpOworICAgICAgICAgICAgLy8g
UGFyc2UgZmFpbGVkISBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGJlY2F1c2UgdGhlIGNhcGFiaWxp
dGllcyBjaGVja2VyCisgICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBjYXVnaHQgaXQuCisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gOTYxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorI2RlZmluZSBFTkFCTEVfREZH
X1JFU1RSSUNUSU9OUyAxCisKICNpZiBFTkFCTEUoREZHX0pJVCkKIC8vIEZhc3QgY2hlY2sgZnVu
Y3Rpb25zOyBpZiB0aGV5IHJldHVybiB0cnVlIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0bwogLy8g
Y2hlY2sgb3Bjb2Rlcy4KQEAgLTExOSwxMSArMTIxLDI4IEBAIGlubGluZSBib29sIGNhbkNvbXBp
bGVPcGNvZGUoT3Bjb2RlSUQgb3AKICAgICBjYXNlIG9wX3Jlc29sdmU6CiAgICAgY2FzZSBvcF9y
ZXNvbHZlX2Jhc2U6CiAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDoKKyAgICBjYXNlIG9wX25l
d19vYmplY3Q6CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlf
YnVmZmVyOgogICAgIGNhc2Ugb3Bfc3RyY2F0OgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgog
ICAgIGNhc2Ugb3BfdGhyb3c6CiAgICAgY2FzZSBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3I6CiAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAvLyBPcGNvZGVzIHdlIHN1cHBvcnQg
Y29uZGl0aW9uYWxseS4gRW5hYmxpbmcgdGhlc2Ugb3Bjb2RlcyBjdXJyZW50bHkgcmVzdWx0cyBp
bgorICAgIC8vIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zLiBFYWNoIG5vZGUgdGhhdCB3ZSBkaXNh
YmxlIHVuZGVyIHJlc3RyaWN0aW9ucyBoYXMgYQorICAgIC8vIGNvbW1lbnQgZGVzY3JpYmluZyB3
aGF0IHdlIGtub3cgYWJvdXQgdGhlIHJlZ3Jlc3Npb24gc28gZmFyLgorICAgICAgICAKKyAgICAv
LyBSZWdyZXNzZXMgc3RyaW5nLXZhbGlkYXRlLWlucHV0LCBwcm9iYWJseSBiZWNhdXNlIGl0IHVz
ZXMgY29tcGFyaXNvbnMgKDwgYW5kID4pCisgICAgLy8gb24gc3RyaW5ncywgd2hpY2ggY3VycmVu
dGx5IHdpbGwgY2F1c2Ugc3BlY3VsYXRpb24gZmFpbHVyZXMgaW4gc29tZSBjYXNlcy4KKyAgICBj
YXNlIG9wX25ld19yZWdleHA6IAorI2lmIEVOQUJMRShERkdfUkVTVFJJQ1RJT05TKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAg
ICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDk2MTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNjgsNiArMTA2OCwxNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICAg
ICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgdm9pZCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTUyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIobnVtQ29uc3RhbnRzKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsK
KyAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3Rh
bnQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworCisgICAgICAgIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICAgICAgbV9qaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICB9CiAgICAgdm9pZCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRmx1c2hl
ZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NjE4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yODcsNiArMjg3LDEyIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3MKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENvbnN0cnVj
dCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9k
ZUNsb2JiZXJzV29ybGQpIFwKICAgICBcCisgICAgLyogQWxsb2NhdGlvbnMuICovXAorICAgIG1h
Y3JvKE5ld09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oTmV3QXJyYXksIE5vZGVS
ZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oTmV3QXJyYXlCdWZmZXIsIE5v
ZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCisgICAg
XAogICAgIC8qIFJlc29sdmUgbm9kZXMuICovXAogICAgIG1hY3JvKFJlc29sdmUsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3Jv
KFJlc29sdmVCYXNlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpIFwKQEAgLTU2MCw2ICs1NjYsMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNDb25zdGFudEJ1ZmZlcigpCisg
ICAgeworICAgICAgICByZXR1cm4gb3AgPT0gTmV3QXJyYXlCdWZmZXI7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIHN0YXJ0Q29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0Nv
bnN0YW50QnVmZmVyKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm87CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG51bUNvbnN0YW50cygpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ29u
c3RhbnRCdWZmZXIoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzI7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaGFzUmVnZXhwSW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wID09IE5l
d1JlZ2V4cDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVnZXhwSW5kZXgoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc1JlZ2V4cEluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9vcElu
Zm87CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzVmFyTnVtYmVyKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBvcCA9PSBHZXRHbG9iYWxWYXIgfHwgb3AgPT0gUHV0R2xvYmFsVmFyIHx8IG9wID09
IEdldFNjb3BlZFZhciB8fCBvcCA9PSBQdXRTY29wZWRWYXI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDk2MTg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU3LDYgKzE1NywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25DcmVhdGVUaGlzKEV4
ZWNTCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
LCBzdHJ1Y3R1cmUpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uTmV3T2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uVmFsdWVBZGQo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKQogewogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpOwpAQCAtNzkwLDYgKzc5NSwyOSBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25TdHJD
YXQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHN0YXJ0KSwgc2l6ZSkpOwogfQogCitFbmNvZGVkSlNWYWx1
ZSBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIHN0YXJ0LCBzaXplX3Qg
c2l6ZSkKK3sKKyAgICBBcmdMaXN0IGFyZ0xpc3Qoc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihzdGFy
dCksIHNpemUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXkoZXhl
YywgYXJnTGlzdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25OZXdBcnJheUJ1ZmZl
cihFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBzdGFydCwgc2l6ZV90IHNpemUpCit7CisgICAgQXJn
TGlzdCBhcmdMaXN0KGV4ZWMtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFydCksIHNp
emUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXkoZXhlYywgYXJn
TGlzdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRl
KiBleGVjLCB2b2lkKiByZWdleHBQdHIpCit7CisgICAgUmVnRXhwKiByZWdleHAgPSBzdGF0aWNf
Y2FzdDxSZWdFeHAqPihyZWdleHBQdHIpOworICAgIGlmICghcmVnZXhwLT5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiSW52YWxp
ZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0
dXJlKCksIHJlZ2V4cCk7Cit9CisKIHZvaWQgb3BlcmF0aW9uVGhyb3dIYXNJbnN0YW5jZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpCiB7CiAgICAgSlNW
YWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5NjE4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw2ICs1MCw3IEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl8K
IHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpKX0RGR09wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgq
Sl9ERkdPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwg
c2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkpfREZHT3BlcmF0aW9u
X0VJKShFeGVjU3RhdGUqLCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIFJlZ2lzdGVyU2l6ZWRCb29s
ZWFuICgqWl9ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5
cGVkZWYgUmVnaXN0ZXJTaXplZEJvb2xlYW4gKCpaX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC02Miw2ICs2Myw3IEBAIHR5
cGVkZWYgdm9pZCAqKCpQX0RGR09wZXJhdGlvbl9FKShFeGVjU3QKIC8vIFRoZXNlIHJvdXRpbmVz
IGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVy
YXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkNvbnZl
cnRUaGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpOwogRW5jb2RlZEpT
VmFsdWUgb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqKTsK
IEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwogRW5jb2RlZEpTVmFs
dWUgb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBFbmNvZGVkSlNWYWx1ZSBv
cGVyYXRpb25Bcml0aEFkZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKTsKQEAgLTgyLDYgKzg0LDkgQEAgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9u
UmVzb2x2ZUJhc2VTdHJpYwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbChF
eGVjU3RhdGUqLCBHbG9iYWxSZXNvbHZlSW5mbyosIElkZW50aWZpZXIqKTsKIEVuY29kZWRKU1Zh
bHVlIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIEVu
Y29kZWRKU1ZhbHVlIG9wZXJhdGlvblN0ckNhdChFeGVjU3RhdGUqLCB2b2lkKiBzdGFydCwgc2l6
ZV90KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIHZvaWQq
IHN0YXJ0LCBzaXplX3QpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIo
RXhlY1N0YXRlKiwgc2l6ZV90LCBzaXplX3QpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uTmV3
UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKTsKIHZvaWQgb3BlcmF0aW9uVGhyb3dIYXNJbnN0YW5j
ZUVycm9yKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGJhc2UpOwogdm9pZCBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Owogdm9pZCBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSwxMSArNTA5
LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICBjYXNlIENyZWF0ZVRoaXM6
CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oUHJlZGljdEZpbmFsT2JqZWN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAgICAgY2FzZSBO
ZXdBcnJheUJ1ZmZlcjogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFBy
ZWRpY3RBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgTmV3UmVnZXhwOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdHJDYXQ6IHsKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0U3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNTM4LDcgKzU1MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRv
RG91YmxlOgogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7CiAgICAgICAgICAgICAvLyBU
aGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxh
dGlvbi4gSXQgaXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NjE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNiArNjg1
LDM2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBHUFJSZWcgcmVzdWx0R1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkK
K3sKKyAgICBNYXJrZWRTcGFjZTo6U2l6ZUNsYXNzKiBzaXplQ2xhc3MgPSAmbV9qaXQuZ2xvYmFs
RGF0YSgpLT5oZWFwLnNpemVDbGFzc0Zvck9iamVjdChzaXplb2YoSlNGaW5hbE9iamVjdCkpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoJnNpemVDbGFzcy0+Zmlyc3RGcmVlQ2VsbCwgcmVzdWx0
R1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgCisgICAgLy8gVGhlIG9iamVjdCBpcyBoYWxm
LWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVzaCBvYmplY3QsIGJ1dAor
ICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0LgorICAgIAorICAgIC8vIERp
dGNoIHRoZSBzdHJ1Y3R1cmUgYnkgcGxhY2luZyBpdCBpbnRvIHRoZSBzdHJ1Y3R1cmUgc2xvdCwg
c28gdGhhdCB3ZSBjYW4gcmV1c2UKKyAgICAvLyBzY3JhdGNoR1BSLgorICAgIG1faml0LnN0b3Jl
UHRyKHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVj
dDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKKyAgICAKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHNj
cmF0Y2hHUFIgYmFjaywgcmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0CisgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIpLCBzY3JhdGNo
R1BSKTsKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmc2l6ZUNsYXNzLT5maXJzdEZy
ZWVDZWxsKTsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIHRoZSBvYmplY3QncyB2dGFibGUKKyAg
ICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSKSk7CisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgaW5oZXJpdG9y
SUQuCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5o
ZXJpdG9ySUQoKSkpOworICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3Bl
cnR5IHN0b3JhZ2UgcG9pbnRlci4KKyAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzaXplb2YoSlNPYmplY3QpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIEpTRmluYWxPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpKTsKK30KKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewogICAgIE5vZGVUeXBl
IG9wID0gbm9kZS5vcDsKQEAgLTEzODYsOCArMTQxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4g
YXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwg
bV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFz
ZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIE5vZGUm
IGJhc2VOb2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgaWYgKGJh
c2VOb2RlLm9wICE9IEdldExvY2FsIHx8ICFpc0FycmF5UHJlZGljdGlvbihtX2ppdC5ncmFwaCgp
LmdldFByZWRpY3Rpb24oYmFzZU5vZGUubG9jYWwoKSkpKQorICAgICAgICBpZiAoIWlzS25vd25B
cnJheShub2RlLmNoaWxkMSgpKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OwogCkBAIC0xNDIxLDggKzE0NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQg
dGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVu
Z3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlw
ZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBOb2RlJiBiYXNlTm9kZSA9
IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07Ci0gICAgICAgIGlmIChiYXNlTm9kZS5vcCAh
PSBHZXRMb2NhbCB8fCAhaXNBcnJheVByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0
aW9uKGJhc2VOb2RlLmxvY2FsKCkpKSkKKyAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5j
aGlsZDEoKSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0xNjM3LDkgKzE2NjUsMTAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAgIC8vIFdlIHJlYWxs
eSBkb24ndCB3YW50IHRvIGdyb3cgdGhlIHJlZ2lzdGVyIGZpbGUganVzdCB0byBkbyBhIFN0ckNh
dC4gU2F5IHdlCi0gICAgICAgIC8vIGhhdmUgNTAgZnVuY3Rpb25zIG9uIHRoZSBzdGFjayB0aGF0
IGFsbCBoYXZlIGEgU3RyQ2F0IGluIHRoZW0gdGhhdCBoYXMKKyAgICBjYXNlIFN0ckNhdDoKKyAg
ICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgIC8vIFdlIHJlYWxseSBkb24ndCB3YW50IHRvIGdy
b3cgdGhlIHJlZ2lzdGVyIGZpbGUganVzdCB0byBkbyBhIFN0ckNhdCBvciBOZXdBcnJheS4KKyAg
ICAgICAgLy8gU2F5IHdlIGhhdmUgNTAgZnVuY3Rpb25zIG9uIHRoZSBzdGFjayB0aGF0IGFsbCBo
YXZlIGEgU3RyQ2F0IGluIHRoZW0gdGhhdCBoYXMKICAgICAgICAgLy8gdXB3YXJkcyBvZiAxMCBv
cGVyYW5kcy4gSW4gdGhlIERGRyB0aGlzIHdvdWxkIG1lYW4gdGhhdCBlYWNoIG9uZSBnZXRzCiAg
ICAgICAgIC8vIHNvbWUgcmFuZG9tIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB0aGVuIHRvIGRvIHRo
ZSBTdHJDYXQgd2UnZCBuZWVkIGEgc2Vjb25kCiAgICAgICAgIC8vIHNwYW4gb2YgMTAgb3BlcmFu
ZHMganVzdCB0byBoYXZlIHNvbWV3aGVyZSB0byBjb3B5IHRoZSAxMCBvcGVyYW5kcyB0bywgd2hl
cmUKQEAgLTE2NjksMTIgKzE2OTgsMzIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0LCByZXN1bHQuZ3By
KCksIGJ1ZmZlciwgbm9kZS5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cCA9PSBTdHJDYXQgPyBvcGVyYXRpb25TdHJDYXQgOiBvcGVyYXRpb25OZXdBcnJheSwgcmVzdWx0
LmdwcigpLCBidWZmZXIsIG5vZGUubnVtQ2hpbGRyZW4oKSk7CiAgICAgICAgIAotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2Fs
bGVkRXhwbGljaXRseSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotCisgICAgICAgIAorICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKKyAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdC5n
cHIoKSwgbm9kZS5zdGFydENvbnN0YW50KCksIG5vZGUubnVtQ29uc3RhbnRzKCkpOworICAgICAg
ICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIE5ld1JlZ2V4cDogeworICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwor
ICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIHJlc3Vs
dC5ncHIoKSwgbV9qaXQuY29kZUJsb2NrKCktPnJlZ2V4cChub2RlLnJlZ2V4cEluZGV4KCkpKTsK
KyAgICAgICAgCisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDb252ZXJ0VGhp
czogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAKQEAgLTE3MTgsNDYgKzE3NjcsNDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHByb3RvR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CiAgICAgICAgIAotICAgICAgICBNYXJr
ZWRTcGFjZTo6U2l6ZUNsYXNzKiBzaXplQ2xhc3MgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFw
LnNpemVDbGFzc0Zvck9iamVjdChzaXplb2YoSlNGaW5hbE9iamVjdCkpOworICAgICAgICBlbWl0
QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwg
c2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigmc2l6ZUNsYXNzLT5m
aXJzdEZyZWVDZWxsLCByZXN1bHRHUFIpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAotICAg
ICAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25v
dyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0Ci0gICAgICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdD
J3MgZnJlZSBsaXN0LgorICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIAot
ICAgICAgICAvLyBEaXRjaCB0aGUgaW5oZXJpdG9ySUQgYnkgcGxhY2luZyBpdCBpbnRvIHRoZSBz
dHJ1Y3R1cmUsIHNvIHRoYXQgd2UgY2FuIHJldXNlCi0gICAgICAgIC8vIHNjcmF0Y2hHUFIuCi0g
ICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgSlNPYmplY3Q6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUocHJvdG9H
UFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ3JlYXRlVGhpcyk7CisgICAgICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5v
dyB0aGF0IHdlIGhhdmUgc2NyYXRjaEdQUiBiYWNrLCByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRo
ZSBmcmVlIGxpc3QKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUiwgJnNpemVDbGFzcy0+Zmlyc3RGcmVlQ2VsbCk7CisgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOwogICAgICAgICAKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgdnRhYmxl
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgTmV3T2JqZWN0OiB7CisgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgLy8g
SW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgaW5oZXJpdG9ySUQuCi0gICAgICAgIG1faml0LnN0b3Jl
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZkluaGVyaXRvcklEKCkpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAKLSAgICAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgotICAg
ICAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNP
YmplY3QpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0ZpbmFsT2Jq
ZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpT
RmluYWxPYmplY3QoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgc2xvd1BhdGgubGlu
aygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKLSAgICAgICAgbV9qaXQubW92ZShwcm90b0dQUiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25DcmVhdGVUaGlzKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb25OZXdPYmplY3QpOwogICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAg
ICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTE4MzMs
MTQgKzE4ODUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewotICAgICAgICBOb2Rl
JiBiYXNlTm9kZSA9IG1faml0LmdyYXBoKClbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAg
ICAgICAgIAotICAgICAgICBpZiAoYmFzZU5vZGUub3AgIT0gR2V0TG9jYWwgfHwgIWlzQXJyYXlQ
cmVkaWN0aW9uKG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbihiYXNlTm9kZS5sb2NhbCgpKSkp
CisgICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQogICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk2MTg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MTIsMTEgKzUxMiwzMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgfHwgKHNob3Vs
ZFNwZWN1bGF0ZU9iamVjdChvcDEpICYmIHNob3VsZFNwZWN1bGF0ZUFycmF5KG9wMikpOwogICAg
IH0KICAgICAKKyAgICBib29sIGlzS25vd25BcnJheShOb2RlSW5kZXggb3AxKQorICAgIHsKKyAg
ICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbb3AxXTsKKyAgICAgICAgc3dpdGNoIChu
b2RlLm9wKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gaXNB
cnJheVByZWRpY3Rpb24obV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkp
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgIGNhc2UgTmV3
QXJyYXlCdWZmZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIAogICAgIGJvb2wgY29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFpfREZHT3BlcmF0
aW9uX0VKSik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlv
bik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYsIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24pOwogICAgIHZv
aWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIHZvaWQqIHZwdHIpOwogICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5v
ZGUmLCB2b2lkKiB2cHRyKTsKKyAgICAKKyAgICAvLyBJdCBpcyBhY2NlcHRhYmxlIHRvIGhhdmUg
c3RydWN0dXJlIGJlIGVxdWFsIHRvIHNjcmF0Y2gsIHNvIGxvbmcgYXMgeW91J3JlIGZpbmUKKyAg
ICAvLyB3aXRoIHRoZSBzdHJ1Y3R1cmUgR1BSIGJlaW5nIGNsb2JiZXJlZC4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVj
dHVyZSwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgc2xvd1BhdGgpOwogICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkgCiAgICAgSklU
Q29tcGlsZXI6Okp1bXAgY29udmVydFRvRG91YmxlKEdQUlJlZyB2YWx1ZSwgRlBSUmVnIHJlc3Vs
dCwgR1BSUmVnIHRtcCk7Cg==
</data>
<flag name="review"
          id="106061"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>