<?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>154207</bug_id>
          
          <creation_ts>2016-02-12 18:50:57 -0800</creation_ts>
          <short_desc>Load + Register Extend should be simplified into Load</short_desc>
          <delta_ts>2016-04-26 11:21: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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>154319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1164461</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-12 18:50:57 -0800</bug_when>
    <thetext>This:
@1 = Load(@x);
@2 = SExt8(@1)

should be transformed as:
@3 = Load8(@x)

This must be done at B3 level instead of lowering in order to have the address go through legalizeMemoryOffsets().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168919</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-27 16:26:37 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; This:
&gt; @1 = Load(@x);
&gt; @2 = SExt8(@1)
&gt; 
&gt; should be transformed as:
&gt; @3 = Load8(@x)
&gt; 
&gt; This must be done at B3 level instead of lowering in order to have the
&gt; address go through legalizeMemoryOffsets().

Seems like we &quot;just&quot; need use counts to do this, so we prove that the Load is not used for anything else.  reduceStrength() could almost do it, but it would be dangerous, since that phase modifies the IR as it goes - so it will probably mess up any use count calculations.

That implies that we should add a new phase to do this.  This phase should probably also get other things that require use counts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170149</commentid>
    <comment_count>2</comment_count>
      <attachid>272741</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-03 01:21:46 -0800</bug_when>
    <thetext>Created attachment 272741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170150</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-03 01:23:06 -0800</bug_when>
    <thetext>Attachment 272741 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:5560:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5578:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5620:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5621:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5635:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5636:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5651:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5653:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5667:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5668:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5682:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5683:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5697:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5698:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5713:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5715:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5729:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:5730:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 18 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170154</commentid>
    <comment_count>4</comment_count>
      <attachid>272741</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-03 01:36:53 -0800</bug_when>
    <thetext>Comment on attachment 272741
Patch

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

&gt; Source/JavaScriptCore/b3/B3ReduceLoadStrength.cpp:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

nit: 2016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170330</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-03 14:50:17 -0800</bug_when>
    <thetext>Oddly, this looks neutral on ARM64.

                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                   10.4225+-0.0819     ?     10.4328+-0.0886        ?
   3d-morph                                   8.3399+-0.1316            8.3179+-0.0621        
   3d-raytrace                                9.5516+-0.3255            9.5405+-0.3488        
   access-binary-trees                        4.3262+-0.2322     ?      4.3801+-0.0600        ? might be 1.0125x slower
   access-fannkuch                           11.5094+-0.3124           11.4914+-0.2874        
   access-nbody                               4.7831+-0.0301            4.7522+-0.0290        
   access-nsieve                              3.4041+-0.0409     ?      3.4456+-0.0558        ? might be 1.0122x slower
   bitops-3bit-bits-in-byte                   1.7092+-0.0215     ?      1.7697+-0.1189        ? might be 1.0354x slower
   bitops-bits-in-byte                        4.1934+-0.0406            4.1794+-0.0285        
   bitops-bitwise-and                         3.2763+-0.0777            3.2463+-0.0582        
   bitops-nsieve-bits                         5.9133+-0.0633            5.9008+-0.0456        
   controlflow-recursive                      3.7743+-0.2521            3.7358+-0.3400          might be 1.0103x faster
   crypto-aes                                 6.4744+-0.0808            6.4397+-0.0534        
   crypto-md5                                 4.0788+-0.1389     ?      4.2801+-0.3735        ? might be 1.0494x slower
   crypto-sha1                                3.7694+-0.0639     ?      3.7959+-0.1367        ?
   date-format-tofte                         11.2938+-0.0841     ?     11.3011+-0.0991        ?
   date-format-xparb                          7.3490+-0.1118     ?      7.3584+-0.1007        ?
   math-cordic                                5.4631+-0.0912            5.4425+-0.1090        
   math-partial-sums                         11.6965+-0.1031     ?     11.7500+-0.0898        ?
   math-spectral-norm                         3.5078+-0.2203            3.3322+-0.2333          might be 1.0527x faster
   regexp-dna                                 9.7854+-0.0681            9.7693+-0.0664        
   string-base64                              6.5219+-0.0450            6.5099+-0.0299        
   string-fasta                               9.6279+-0.3293     ?      9.6350+-0.2924        ?
   string-tagcloud                           11.0055+-0.2440     ?     11.0197+-0.1790        ?
   string-unpack-code                        23.4390+-0.0882           23.3442+-0.0803        
   string-validate-input                      6.4305+-0.1878     ?      6.5413+-0.1407        ? might be 1.0172x slower

   &lt;arithmetic&gt;                               7.3710+-0.0179     ?      7.3735+-0.0319        ? might be 1.0003x slower

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.19687+-0.00067    ?     0.19781+-0.00148       ?
   decrypt                                   3.72317+-0.00911          3.71527+-0.00690       
   deltablue                        x2       0.17056+-0.00089    ?     0.17340+-0.00418       ? might be 1.0167x slower
   earley                                    0.42355+-0.00966    ?     0.42556+-0.01110       ?
   boyer                                     7.39531+-0.12680    ?     7.54110+-0.26902       ? might be 1.0197x slower
   navier-stokes                    x2       7.18109+-0.00599          7.17997+-0.00690       
   raytrace                         x2       1.28817+-0.00785    ?     1.30752+-0.03433       ? might be 1.0150x slower
   richards                         x2       0.11298+-0.00289    ?     0.11326+-0.00194       ?
   splay                            x2       0.72602+-0.01767    ?     0.72802+-0.01090       ?
   regexp                           x2      34.90936+-0.12731         34.81403+-0.12786       
   pdfjs                            x2      57.28040+-0.24741         57.15629+-0.34824       
   mandreel                         x2      71.03873+-0.86106         70.69574+-1.02180       
   gbemu                            x2      46.46087+-3.14811    ?    51.50368+-5.56189       ? might be 1.1085x slower
   closure                                   0.65471+-0.00954          0.65139+-0.00274       
   jquery                                    9.62274+-0.02646          9.62142+-0.04047       
   box2d                            x2      16.09526+-0.16333         16.02558+-0.09420       
   zlib                             x2     683.23024+-31.72146       672.21808+-37.34598        might be 1.0164x faster
   typescript                       x2    1141.30809+-4.78125    ?  1144.27098+-8.93657       ?

   &lt;geometric&gt;                               8.07399+-0.04610    ?     8.13484+-0.06335       ? might be 1.0075x slower

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                  156.768+-2.865            156.533+-2.479         
   audio-beat-detection                       77.603+-5.235      ?      79.476+-4.149         ? might be 1.0241x slower
   audio-dft                                 150.311+-6.566            142.803+-5.301           might be 1.0526x faster
   audio-fft                                  41.889+-0.106      ?      41.990+-0.211         ?
   audio-oscillator                           54.419+-0.656             54.144+-0.163         
   imaging-darkroom                           69.249+-0.222             69.208+-0.174         
   imaging-desaturate                         78.500+-0.796      ?      78.953+-1.253         ?
   imaging-gaussian-blur                      98.852+-0.486             98.127+-1.138         
   json-parse-financial                       47.499+-0.216             47.251+-0.261         
   json-stringify-tinderbox                   27.298+-0.118             27.089+-0.144         
   stanford-crypto-aes                        58.808+-0.255      ?      59.165+-0.511         ?
   stanford-crypto-ccm                        46.773+-0.881             46.543+-0.780         
   stanford-crypto-pbkdf2                    141.222+-0.537      ?     141.414+-1.004         ?
   stanford-crypto-sha256-iterative           51.213+-0.142             51.042+-0.168         

   &lt;arithmetic&gt;                               78.600+-0.522             78.124+-0.530           might be 1.0061x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               725.7208+-29.8290    ?    734.5102+-20.2056       ? might be 1.0121x slower
   cray.c                                   559.5356+-4.5890     ?    563.1744+-5.9183        ?
   dry.c                                    471.0161+-3.8902     ?    472.3592+-2.9768        ?
   FloatMM.c                                810.2771+-8.9211          805.1089+-9.3111        
   gcc-loops.cpp                           4675.4980+-24.6400        4661.7415+-3.5747        
   n-body.c                                1762.1646+-2.4270     ?   1762.2233+-3.8443        ?
   Quicksort.c                              561.8582+-2.4384          560.1319+-3.1790        
   stepanov_container.cpp                  5636.6802+-23.4988    ?   5639.4599+-17.3435       ?
   Towers.c                                 277.4103+-1.1818     ?    277.5199+-1.6721        ?

   &lt;geometric&gt;                             1012.6144+-5.2120     ?   1013.8331+-3.6487        ? might be 1.0012x slower

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           46.6509+-0.0970     ?     46.6853+-0.1113        ? might be 1.0007x slower</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272741</attachid>
            <date>2016-03-03 01:21:46 -0800</date>
            <delta_ts>2016-04-26 11:21:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154207-20160303012131.patch</filename>
            <type>text/plain</type>
            <size>26457</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MzM4ZTVlMGU4MWEzNjI5ODFhOTQ4MWZiMTdlYWVmYjM0YWU1NGM1Li4wYTAyYWY2NmVlYjliMWJh
ODkyZWI0YTQ0NzJjYTI2ZTY1NTcwOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxNi0wMy0wMyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBMb2FkICsgUmVnaXN0ZXIgRXh0ZW5kIHNob3VsZCBiZSBzaW1wbGlm
aWVkIGludG8gTG9hZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU0MjA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQyMDgK
KyAgICAgICAgZm9yIG1vcmUgY29udGV4dC4KKworICAgICAgICBPbiB4ODYsIFNvbWUgZm9ybXMg
b2YgTG9hZCtCaXRBbmQgYW5kIExvYWQrU2lnbkV4dGVuZAorICAgICAgICBhcmUgbG93ZXJlZCB0
byBhIHNtYWxsZXIgTG9hZHMuIEZvciBleGFtcGxlLAorICAgICAgICAgICAgQDEgPSBMb2FkKEB4
KQorICAgICAgICAgICAgQDIgPSBTRXh0OChAMSkKKyAgICAgICAgY2FuIGJlIGxvd2VyZWQgdG8g
YSBzaW5nbGUgQWlyIGluc3RydWN0aW9uOgorICAgICAgICAgICAgWmVyb0V4dGVuZDhUbzMyKFtA
eF0pCisKKyAgICAgICAgT24gQVJNLCB3ZSBjYW5ub3QgdGFrZSB0aGF0IHNob3J0Y3V0LiBBbiBh
ZGRyZXNzIHZhbGlkCisgICAgICAgIGZvciBhIDMyYml0IGxvYWQgbWF5IG5vdCBiZSB2YWxpZCBm
b3IgYSA4Yml0IGxvYWQKKyAgICAgICAgYW5kIHZpY2UgdmVyc2EuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIGJhY2sgdGhlIG9wdGltaXphdGlvbnMgcmVtb3ZlZCBpbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MjA4IHRocm91Z2gKKyAgICAg
ICAgYW4gb3B0aW1pemF0aW9uIHBoYXNlIGJlZm9yZSBsb3dlcmluZy4KKworICAgICAgICBUaGUg
bmV3IHBoYXNlIChSZWR1Y2VMb2FkU3RyZW5ndGgpIHNpbXBseSBnb2VzIG92ZXIKKyAgICAgICAg
dGhlIGNhc2VzIHRoYXQgY2FuIGJlIHNpbXBsaWZpZWQgYW5kIHJlZHVjZSB0aGUgbG9hZC4KKwor
ICAgICAgICBUaGlzIHBoYXNlIGlzIHVuZm9ydHVuYXRlbHkgbm90IHBhcnQgb2YgUmVkdWNlU3Ry
ZW5ndGgKKyAgICAgICAgYmVjYXVzZSBpdCBuZWVkcyBVc2VDb3VudHMgdG8ga25vdyBpZiB0aGUg
TG9hZCBoYXMgYSBzaW5nbGUKKyAgICAgICAgdXNlLiBVc2VDb3VudHMgaXMgYWxyZWFkeSBleHBl
bnNpdmUsIHVwZGF0aW5nIGl0CisgICAgICAgIGluIFJlZHVjZVN0cmVuZ3RoIHdvdWxkIGJlIHBy
b2hpYml0aXZlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9CM0dlbmVy
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAqIGIz
L0IzTWVtb3J5VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6OnJlcGxh
Y2VXaXRoV2Vha2VyTG9hZCk6CisgICAgICAgICogYjMvQjNNZW1vcnlWYWx1ZS5oOgorICAgICAg
ICAqIGIzL0IzUmVkdWNlTG9hZFN0cmVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpyZWR1Y2VMb2FkU3RyZW5ndGgpOgorICAgICAgICAqIGIzL0IzUmVkdWNlTG9hZFN0cmVuZ3Ro
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNw
cC4KKyAgICAgICAgKiBiMy9CM1ZhbHVlLmg6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkMzJCaXRNYXNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RMb2FkMzJVc2VkVHdpY2VCaXRNYXNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkMzJC
aXRNYXNrSW50b1NtYWxsZXJMb2FkUmVkdWN0aW9uSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0TG9hZFBsdXNCaXRNYXNrUmVkdWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2Fk
OEJpdE1hc2sxNik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TG9hZDMyU2lnbkV4dGVuZDgpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdExvYWQzMlNpZ25FeHRlbmQ4VXNlZFR3aWNlKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RMb2FkOFpTaWduRXh0ZW5kOCk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0TG9hZDMyU2lnbkV4dGVuZDE2KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkMTZaU2ln
bkV4dGVuZDE2KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkMzJTaWduRXh0ZW5kMTZVc2Vk
VHdpY2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExvYWQ4U2lnbkV4dGVuZDE2KToKKyAgICAg
ICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDMtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZWdFeHBFeGVjL1JlZ0V4cFRlc3Qgc2hvdWxkIG5vdCB1bmNv
bmRpdGlvbmFsbHkgc3BlY3VsYXRlIGNlbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCBjYWFmOTIyZGQwMGZmMDRjMjcyZDE5ZWRlOWMwYzY4YTI2ZDVjOGU2Li41ZjIzNWI1
ZWIwOWIzZGEyYTk1YWIyMDlkYTdmNjcyMjY5MzYyZWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC0xNDUsNiArMTQ1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBiMy9CM1Byb2NlZHVyZS5jcHAKICAgICBiMy9CM1B1cmVDU0UuY3BwCiAgICAgYjMv
QjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcAorICAgIGIzL0IzUmVkdWNlTG9hZFN0cmVuZ3RoLmNw
cAogICAgIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCiAgICAgYjMvQjNTU0FDYWxjdWxhdG9yLmNw
cAogICAgIGIzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzdmZGY3ZDJlMDRhMmRjYTAxMDAzMDU4YWE1YzhmYjM3YjlhNDEzMC4uMmVlMTlhMjhi
YzM2NTY0YmY0Zjc1NWNhNWM1ODdhZDUzNGQ0ZGY5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTExNTgsNiArMTE1OCw4IEBACiAJCTQzNkU1NDU0MUM0NjhFNzcwMEI1QUY3MyAv
KiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MzZFNTQ1MTFDNDY4RTVGMDBCNUFGNzMgLyogQjNMZWdhbGl6
ZU1lbW9yeU9mZnNldHMuY3BwICovOyB9OwogCQk0M0FCMjZDNjFDMUE1MzU5MDBEODJBRTYgLyog
QjNNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0M0FCMjZDNTFDMUE1MkY3MDBEODJBRTYgLyogQjNNYXRoRXh0cmFzLmggKi87IH07CiAJ
CTQzQUIyNkM3MUMxQTUzNUMwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNBQjI2QzQxQzFBNTJGNzAwRDgy
QUU2IC8qIEIzTWF0aEV4dHJhcy5jcHAgKi87IH07CisJCTQzQkFEQzY5MUM4N0REOTcwMDFGNThC
MSAvKiBCM1JlZHVjZUxvYWRTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0M0JBREM2NzFDODdERDdGMDAxRjU4QjEgLyogQjNSZWR1Y2VM
b2FkU3RyZW5ndGguY3BwICovOyB9OworCQk0M0JBREM2QTFDODdERDk3MDAxRjU4QjEgLyogQjNS
ZWR1Y2VMb2FkU3RyZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQzQkFEQzY4MUM4N0REN0YwMDFGNThCMSAvKiBCM1JlZHVjZUxvYWRTdHJlbmd0
aC5oICovOyB9OwogCQk0M0MzOTJBQjFDM0JFQjA1MDAyNDFGNTMgLyogQXNzZW1ibGVyQ29tbW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0MzOTJB
QTFDM0JFQjAwMDAyNDFGNTMgLyogQXNzZW1ibGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQ0M0FFMzMxNkUxODhEOTAwNzZGMTEw
IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrICovOyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5QjgxMkRD
OTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzI3Myw2ICszMjc1LDggQEAKIAkJNDM2RTU0NTIxQzQ2OEU1RjAw
QjVBRjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmg7IHBhdGggPSBiMy9CM0xlZ2Fs
aXplTWVtb3J5T2Zmc2V0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0FCMjZD
NDFDMUE1MkY3MDBEODJBRTYgLyogQjNNYXRoRXh0cmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzTWF0aEV4dHJhcy5jcHA7IHBhdGggPSBiMy9CM01hdGhFeHRy
YXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0FCMjZDNTFDMUE1MkY3MDBE
ODJBRTYgLyogQjNNYXRoRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzTWF0aEV4dHJhcy5oOyBwYXRoID0gYjMvQjNNYXRoRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzQkFEQzY3MUM4N0REN0YwMDFGNThCMSAvKiBCM1JlZHVjZUxvYWRT
dHJlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1JlZHVj
ZUxvYWRTdHJlbmd0aC5jcHA7IHBhdGggPSBiMy9CM1JlZHVjZUxvYWRTdHJlbmd0aC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzQkFEQzY4MUM4N0REN0YwMDFGNThCMSAvKiBC
M1JlZHVjZUxvYWRTdHJlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1JlZHVjZUxvYWRTdHJlbmd0aC5oOyBwYXRoID0gYjMvQjNSZWR1Y2VMb2FkU3RyZW5ndGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDNDMzkyQUExQzNCRUIwMDAwMjQxRjUzIC8q
IEFzc2VtYmxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3Nl
bWJsZXJDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk3RUUwRjhG
ODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyLmg7IHBhdGggPSB5YXJyL1lhcnIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MTUsNiArNDcxOSw4IEBACiAJCQkJMEY3MjVD
QTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovLAogCQkJCTQzNDIyQTY0MUMxNjIy
MUUwMEUyRUI5OCAvKiBCM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwICovLAogCQkJCTQzNDIyQTY1
MUMxNjIyMUUwMEUyRUI5OCAvKiBCM1JlZHVjZURvdWJsZVRvRmxvYXQuaCAqLywKKwkJCQk0M0JB
REM2NzFDODdERDdGMDAxRjU4QjEgLyogQjNSZWR1Y2VMb2FkU3RyZW5ndGguY3BwICovLAorCQkJ
CTQzQkFEQzY4MUM4N0REN0YwMDFGNThCMSAvKiBCM1JlZHVjZUxvYWRTdHJlbmd0aC5oICovLAog
CQkJCTBGRUM4NUI3MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywK
IAkJCQkwRkVDODVCODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovLAog
CQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovLApA
QCAtNzU0Myw2ICs3NTQ5LDcgQEAKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2
YVNjcmlwdENvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ5MzAw
RUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNCQURDNkExQzg3
REQ5NzAwMUY1OEIxIC8qIEIzUmVkdWNlTG9hZFN0cmVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTkxODgsNiArOTE5NSw3IEBACiAJCQkJOTVBQjgzNTYw
REE0M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0M0JBREM2OTFDODdERDk3MDAxRjU4QjEgLyogQjNSZWR1
Y2VMb2FkU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAw
OUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21w
aWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5jcHAKaW5kZXggNjNiZGFkYTYxMGM4YzgzNDE3MzAzNDExNTMxNjg3ZjRiZDMxMzY1
Ny4uZDdjMDdhYzYzNjI3ODZjMmY3M2EwMWQ0YmE1ZDQwYWY4YzJhNTAxZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUg
IkIzTW92ZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAi
QjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmgiCisjaW5jbHVkZSAiQjNSZWR1Y2VMb2FkU3RyZW5ndGgu
aCIKICNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgiCiAjaW5jbHVkZSAiQjNUaW1pbmdTY29w
ZS5oIgogI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKQEAgLTg1LDYgKzg2LDcgQEAgdm9pZCBnZW5l
cmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZlbCkKICAgICAg
ICAgZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKICAgICAgICAgZml4U1NBKHByb2NlZHVyZSk7
CiAgICAgICAgIGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7CisgICAgICAgIHJlZHVjZUxv
YWRTdHJlbmd0aChwcm9jZWR1cmUpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVt
b3J5VmFsdWUuY3BwCmluZGV4IDhmNzg3MTRmZGI5NmE3NzBiYzFiYmUwYWNkZTAyNjVhYmQzMjkx
MGYuLjg2ZWMxNTVhOTIwOWQyNzRiNWJiYWU4MWFiNjBmZTk3MjgwZDFiODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKQEAgLTU1LDYgKzU1LDQ1IEBAIHNp
emVfdCBNZW1vcnlWYWx1ZTo6YWNjZXNzQnl0ZVNpemUoKSBjb25zdAogICAgIH0KIH0KIAordm9p
ZCBNZW1vcnlWYWx1ZTo6cmVwbGFjZVdpdGhXZWFrZXJMb2FkKE9wY29kZSBvcGNvZGUpCit7Cisg
ICAgQVNTRVJUKGFjY2VwdHMob3Bjb2RlKSk7CisgICAgQVNTRVJUKGlzTG9hZCgpKTsKKyAgICBB
U1NFUlQoaXNMb2FkKG9wY29kZSkpOworCisgICAgaWYgKG9wY29kZSA9PSB0aGlzLT5vcGNvZGUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIExv
YWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2FkMTZa
OgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzQnl0ZVNp
emUoKSA+PSAyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBUeXBlIHR5cGUgPSB0aGlzLT50
eXBlKCk7CisgICAgT3JpZ2luIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOworICAgIFZhbHVlKiBw
b2ludGVyID0gY2hpbGQoMCk7CisgICAgaW50MzJfdCBvZmZzZXQgPSBtX29mZnNldDsKKyAgICBI
ZWFwUmFuZ2UgcmFuZ2UgPSBtX3JhbmdlOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+
b3duZXI7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworCisgICAgdGhpcy0+fk1lbW9y
eVZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIE1lbW9yeVZhbHVlKG9wY29kZSwgdHlwZSwgb3Jp
Z2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgIHNldFJhbmdlKHJhbmdlKTsKKworICAgIHRoaXMt
Pm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+bV9pbmRleCA9IGluZGV4OworCit9CisKIHZvaWQg
TWVtb3J5VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7CiAgICAgaWYgKG1fb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgKaW5kZXggNDBjODAwMjMxYjg1NDMyOGFjZTAxZDk2YzM2OGY0MTczNjZh
MzBkNS4uOWE1OTU0ZmMzYWU5ZGEzNTYxNTJmMzkzMGRmN2E1NWQyNjRkOWIxNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCkBAIC04Miw2ICs4MiwxMCBAQCBwdWJs
aWM6CiAKICAgICBzaXplX3QgYWNjZXNzQnl0ZVNpemUoKSBjb25zdDsKIAorICAgIC8vIFJlcGxh
Y2UgYSBsb2FkIG9wZXJhdGlvbiB3aXRoIGEgdmVyc2lvbiB0aGF0IGxvYWQgZmV3ZXIgYnl0ZXMu
CisgICAgLy8gaXQgaXMgYWxzbyB2YWxpZCB0byB1c2UgdGhpcyB0byBjaGFuZ2UgdGhlIFNpZ25F
eHRlbmQvWmVyb0V4dGVuZCBvZiBhIExvYWQuCisgICAgdm9pZCByZXBsYWNlV2l0aFdlYWtlckxv
YWQoT3Bjb2RlKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVy
JiBjb21tYSwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlTG9hZFN0cmVuZ3RoLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvYWRTdHJlbmd0aC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRl
MDQ3NGZmYWFkODFmODBjZDc3MzJmOWYzNzIzNGIyNDlkYjczZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvYWRTdHJlbmd0aC5jcHAKQEAgLTAs
MCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNSZWR1Y2VMb2FkU3RyZW5ndGguaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJC
M0luc2VydGlvblNldElubGluZXMuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5j
bHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgUmVk
dWNlTG9hZFN0cmVuZ3RoIHsKK3B1YmxpYzoKKyAgICBSZWR1Y2VMb2FkU3RyZW5ndGgoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUpCisgICAgICAgIDogbV9wcm9jKHByb2NlZHVyZSkKKyAgICAgICAgLCBt
X3VzZUNvdW50cyhwcm9jZWR1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAg
ICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAgICAgICAgICAgIHByb2Nlc3NW
YWx1ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9j
ZXNzVmFsdWUoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bj
b2RlKCkpIHsKKyAgICAgICAgY2FzZSBCaXRBbmQ6IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+
Y2hpbGQoMSktPmlzQ29uc3RhbnQoKQorICAgICAgICAgICAgICAgICYmIE1lbW9yeVZhbHVlOjpp
c0xvYWQodmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBtX3Vz
ZUNvdW50cy5udW1Vc2luZ0luc3RydWN0aW9ucyh2YWx1ZS0+Y2hpbGQoMCkpID09IDEpIHsKKwor
ICAgICAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnlWYWx1ZSA9IHZhbHVlLT5jaGlsZCgw
KS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgICAgICAgICAgaW50NjRfdCBtYXNrID0gdmFs
dWUtPmNoaWxkKDEpLT5hc0ludCgpOworICAgICAgICAgICAgICAgIGlmIChtYXNrID09IDB4ZmYg
JiYgbWVtb3J5VmFsdWUtPmFjY2Vzc0J5dGVTaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1lbW9yeVZhbHVlLT5yZXBsYWNlV2l0aFdlYWtlckxvYWQoTG9hZDhaKTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkodmFsdWUtPmNoaWxkKDApKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hc2sgPT0gMHhmZmZmICYmIG1lbW9yeVZhbHVl
LT5hY2Nlc3NCeXRlU2l6ZSgpID4gMikgeworICAgICAgICAgICAgICAgICAgICBtZW1vcnlWYWx1
ZS0+cmVwbGFjZVdpdGhXZWFrZXJMb2FkKExvYWQxNlopOworICAgICAgICAgICAgICAgICAgICB2
YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eSh2YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgU0V4dDg6IHsKKyAgICAgICAgICAgIGlmIChNZW1vcnlWYWx1ZTo6aXNMb2FkKHZh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCisgICAgICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSAhPSBMb2FkOFMKKyAgICAgICAgICAgICAgICAmJiBtX3VzZUNvdW50cy5u
dW1Vc2luZ0luc3RydWN0aW9ucyh2YWx1ZS0+Y2hpbGQoMCkpID09IDEpIHsKKyAgICAgICAgICAg
ICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5VmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCktPmFzPE1lbW9y
eVZhbHVlPigpOworICAgICAgICAgICAgICAgIG1lbW9yeVZhbHVlLT5yZXBsYWNlV2l0aFdlYWtl
ckxvYWQoTG9hZDhTKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0
eSh2YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBTRXh0MTY6IHsKKyAgICAgICAgICAgIGlmICgodmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBMb2FkIHx8IHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gTG9hZDE2WikKKyAgICAgICAgICAgICAgICAmJiBtX3VzZUNvdW50cy5udW1Vc2luZ0luc3Ry
dWN0aW9ucyh2YWx1ZS0+Y2hpbGQoMCkpID09IDEpIHsKKyAgICAgICAgICAgICAgICBNZW1vcnlW
YWx1ZSogbWVtb3J5VmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCktPmFzPE1lbW9yeVZhbHVlPigpOwor
ICAgICAgICAgICAgICAgIG1lbW9yeVZhbHVlLT5yZXBsYWNlV2l0aFdlYWtlckxvYWQoTG9hZDE2
Uyk7CisgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkodmFsdWUtPmNo
aWxkKDApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIFVzZUNvdW50cyBtX3VzZUNvdW50czsKK307CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHJlZHVjZUxvYWRTdHJlbmd0aChQcm9j
ZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJyZWR1Y2VM
b2FkU3RyZW5ndGgiKTsKKyAgICBSZWR1Y2VMb2FkU3RyZW5ndGggcmVkdWNlTG9hZFN0cmVuZ3Ro
KHByb2MpOworICAgIHJlZHVjZUxvYWRTdHJlbmd0aC5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb2FkU3RyZW5ndGguaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvYWRTdHJlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmMzhk
Zjk0MzcwOTk2ZWMyYjdkNmRkMDkwNDEyMmM2NTM0MGZkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb2FkU3RyZW5ndGguaApAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBCM1JlZHVjZUxvYWRTdHJlbmd0aF9oCisjZGVmaW5lIEIzUmVkdWNlTG9hZFN0cmVuZ3Ro
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFJlZHVjZSBhIHNpemUgb2YgYSBsb2FkIHdoZW4g
c29tZSBiaXRzIGFyZSBub3QgdXNlZC4KK3ZvaWQgcmVkdWNlTG9hZFN0cmVuZ3RoKFByb2NlZHVy
ZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM1JlZHVjZUxvYWRTdHJlbmd0aF9oCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5oCmluZGV4IDk4MWYwMDdhZjg4ZjRmMjhiNGU2ZWZjZTFkMTFmNGU2Y2YyZjY3
MTYuLjU4ZWVkNzMzNjJmNzg2YWM2YzA0M2U3MTc0OGM4YjFkMjMxZTVjYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuaApAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKLSAgICAvLyBOb3Rl
IHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVl
cyB3aXRoIElkZW50aXR5IG9yIE5vcC4KICAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9vcGNvZGU7IH0KIAogICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCA5YzEwMGQwNTk2MmYx
ZmNmODFlN2ViZDAyM2NkNDIxYjg4YTY3N2EzLi5mMWI5OGE3YzhhNzQwYzA5MDUyNjgwZGRjOTRm
MjNhMGFjYThkYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAtNTU0NCw2
ICs1NTQ0LDE5MiBAQCB2b2lkIHRlc3RTdG9yZUZsb2F0KGRvdWJsZSBpbnB1dCkKICAgICB9CiB9
CiAKK3ZvaWQgdGVzdExvYWQzMkJpdE1hc2soaW50MzJfdCBtYXNrSW1tKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogbG9hZGVkID0g
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBPcmlnaW4oKSwgYWRkcmVz
cywgNCk7CisgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBtYXNrSW1tKTsKKyAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsb2FkZWQsIG1hc2tWYWx1
ZSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcmVzdWx0KTsKKworICAgIGludDY0X3Qgc3RvcmFnZSA9IDB4MDEyMzQ1Njc4OWFiY2Rl
ZjsKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsICZzdG9yYWdlKSA9PSAo
MHgwMTIzNDU2NyAmIG1hc2tJbW0pKTsKKyAgICBDSEVDSyhzdG9yYWdlID09IDB4MDEyMzQ1Njc4
OWFiY2RlZik7Cit9CisKK3ZvaWQgdGVzdExvYWQzMlVzZWRUd2ljZUJpdE1hc2soaW50MzJfdCBt
YXNrSW1tKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBWYWx1ZSogbG9hZGVkID0gcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBM
b2FkLCBPcmlnaW4oKSwgYWRkcmVzcywgNCk7CisgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrSW1tKTsKKyAgICBW
YWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdp
bigpLCBsb2FkZWQsIG1hc2tWYWx1ZSk7CisKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgbG9hZGVkLCBhZGRyZXNzKTsKKyAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwor
CisgICAgaW50NjRfdCBzdG9yYWdlID0gMHgwMTIzNDU2Nzg5YWJjZGVmOworICAgIENIRUNLKGNv
bXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgJnN0b3JhZ2UpID09ICgweDAxMjM0NTY3ICYgbWFz
a0ltbSkpOworICAgIENIRUNLKHN0b3JhZ2UgPT0gMHgwMTIzNDU2NzAxMjM0NTY3KTsKK30KKwor
dm9pZCB0ZXN0TG9hZDMyQml0TWFza0ludG9TbWFsbGVyTG9hZFJlZHVjdGlvbkltcGwoaW50MzJf
dCBtYXNrSW1tKQoreworICAgIHRlc3RMb2FkMzJCaXRNYXNrKG1hc2tJbW0pOworICAgIHRlc3RM
b2FkMzJVc2VkVHdpY2VCaXRNYXNrKG1hc2tJbW0pOworfQorCit2b2lkIHRlc3RMb2FkUGx1c0Jp
dE1hc2tSZWR1Y3Rpb24oKQoreworICAgIC8vIEtlZXAgOCBiaXRzLgorICAgIHRlc3RMb2FkMzJC
aXRNYXNrSW50b1NtYWxsZXJMb2FkUmVkdWN0aW9uSW1wbCgweGZmKTsKKworICAgIC8vIEtlZXAg
MTYgYml0cy4KKyAgICB0ZXN0TG9hZDMyQml0TWFza0ludG9TbWFsbGVyTG9hZFJlZHVjdGlvbklt
cGwoMHhmZmZmKTsKKworICAgIC8vIFZhcmlvdXMgY2FzZXMgdGhhdCBjb3VsZCBiZSBtb2RpZmll
ZCB3aXRob3V0IGNoYW5naW5nIHRoZSBvdXRjb21lLgorICAgIHRlc3RMb2FkMzJCaXRNYXNrSW50
b1NtYWxsZXJMb2FkUmVkdWN0aW9uSW1wbCgxKTsKKyAgICB0ZXN0TG9hZDMyQml0TWFza0ludG9T
bWFsbGVyTG9hZFJlZHVjdGlvbkltcGwoMyk7CisgICAgdGVzdExvYWQzMkJpdE1hc2tJbnRvU21h
bGxlckxvYWRSZWR1Y3Rpb25JbXBsKDB4MWZmKTsKKyAgICB0ZXN0TG9hZDMyQml0TWFza0ludG9T
bWFsbGVyTG9hZFJlZHVjdGlvbkltcGwoMHhmMGYwKTsKKworICAgIC8vIFZhcmlvdXMgY2FzZXMg
dGhhdCBuZWVkIHRvIHJlbWFpbiBmdWxsIDMyYml0cy4KKyAgICB0ZXN0TG9hZDMyQml0TWFza0lu
dG9TbWFsbGVyTG9hZFJlZHVjdGlvbkltcGwoMHgxZmZmZik7CisgICAgdGVzdExvYWQzMkJpdE1h
c2tJbnRvU21hbGxlckxvYWRSZWR1Y3Rpb25JbXBsKDB4MTAwMDApOworICAgIHRlc3RMb2FkMzJC
aXRNYXNrSW50b1NtYWxsZXJMb2FkUmVkdWN0aW9uSW1wbCgweDEwMDAwMDAwKTsKKyAgICB0ZXN0
TG9hZDMyQml0TWFza0ludG9TbWFsbGVyTG9hZFJlZHVjdGlvbkltcGwoMHgxMDAwMDAwMSk7Cit9
CisKK3ZvaWQgdGVzdExvYWQ4Qml0TWFzazE2KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJl
c3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGxvYWRlZCA9IHJvb3QtPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZDhaLCBPcmlnaW4oKSwgYWRkcmVzcywgNCk7CisgICAg
VmFsdWUqIG1hc2tWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAweGZmZmYpOworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxvYWRlZCwgbWFza1ZhbHVlKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQp
OworCisgICAgaW50NjRfdCBzdG9yYWdlID0gMHgwMTIzNDU2Nzg5YWJjZGVmOworICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgJnN0b3JhZ2UpID09IDB4NjcpOworICAgIENI
RUNLKHN0b3JhZ2UgPT0gMHgwMTIzNDU2Nzg5YWJjZGVmKTsKK30KKwordm9pZCB0ZXN0TG9hZDMy
U2lnbkV4dGVuZDgoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBWYWx1ZSogbG9hZGVkID0gcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBPcmlnaW4oKSwgYWRkcmVzcywgNCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU0V4dDgsIE9yaWdpbigpLCBsb2FkZWQpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJl
c3VsdCk7CisKKyAgICBpbnQ2NF90IHN0b3JhZ2UgPSAweDAxMjM0NTg3ODlhYmNkZWY7CisgICAg
Q0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCAmc3RvcmFnZSkgPT0gMHhmZmZmZmY4
Nyk7CisgICAgQ0hFQ0soc3RvcmFnZSA9PSAweDAxMjM0NTg3ODlhYmNkZWYpOworfQorCit2b2lk
IHRlc3RMb2FkMzJTaWduRXh0ZW5kOFVzZWRUd2ljZSgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBh
ZGRyZXNzID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBsb2FkZWQgPSByb290LT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIE9yaWdpbigpLCBhZGRyZXNzLCA0KTsKKyAg
ICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTRXh0OCwgT3Jp
Z2luKCksIGxvYWRlZCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBT
dG9yZSwgT3JpZ2luKCksIGxvYWRlZCwgYWRkcmVzcyk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKKworICAgIGludDY0
X3Qgc3RvcmFnZSA9IDB4MDEyMzQ1ODc4OWFiY2RlZjsKKyAgICBDSEVDSyhjb21waWxlQW5kUnVu
PGludDY0X3Q+KHByb2MsICZzdG9yYWdlKSA9PSAweGZmZmZmZjg3KTsKKyAgICBXVEZMb2dBbHdh
eXMoInN0cm8gPSAlbGxkIiwgc3RvcmFnZSk7CisgICAgQ0hFQ0soc3RvcmFnZSA9PSAweDEyMzQ1
ODcwMTIzNDU4Nyk7Cit9CisKK3ZvaWQgdGVzdExvYWQ4WlNpZ25FeHRlbmQ4KCkKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
CisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGxvYWRl
ZCA9IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZDhaLCBPcmlnaW4oKSwg
YWRkcmVzcywgNCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgU0V4dDgsIE9yaWdpbigpLCBsb2FkZWQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250
cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBpbnQ2NF90
IHN0b3JhZ2UgPSAweDAxMjM0NTg3ODlhYmNkZWY7CisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQ2NF90Pihwcm9jLCAmc3RvcmFnZSkgPT0gMHhmZmZmZmY4Nyk7CisgICAgQ0hFQ0soc3RvcmFn
ZSA9PSAweDAxMjM0NTg3ODlhYmNkZWYpOworfQorCit2b2lkIHRlc3RMb2FkMzJTaWduRXh0ZW5k
MTYoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICBWYWx1ZSogbG9hZGVkID0gcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2Fk
LCBPcmlnaW4oKSwgYWRkcmVzcywgNCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU0V4dDE2LCBPcmlnaW4oKSwgbG9hZGVkKTsKKyAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwor
CisgICAgaW50NjRfdCBzdG9yYWdlID0gMHgwMTIzODU0Nzg5YWJjZGVmOworICAgIENIRUNLKGNv
bXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgJnN0b3JhZ2UpID09IDB4ZmZmZjg1NDcpOworICAg
IENIRUNLKHN0b3JhZ2UgPT0gMHgwMTIzODU0Nzg5YWJjZGVmKTsKK30KKwordm9pZCB0ZXN0TG9h
ZDE2WlNpZ25FeHRlbmQxNigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhZGRyZXNzID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgIFZhbHVlKiBsb2FkZWQgPSByb290LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIExvYWQxNlosIE9yaWdpbigpLCBhZGRyZXNzLCA0KTsKKyAgICBWYWx1ZSogcmVz
dWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTRXh0MTYsIE9yaWdpbigpLCBsb2Fk
ZWQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHJlc3VsdCk7CisKKyAgICBpbnQ2NF90IHN0b3JhZ2UgPSAweDAxMjM4NTQ3ODlhYmNk
ZWY7CisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCAmc3RvcmFnZSkgPT0g
MHhmZmZmODU0Nyk7CisgICAgQ0hFQ0soc3RvcmFnZSA9PSAweDAxMjM4NTQ3ODlhYmNkZWYpOwor
fQorCit2b2lkIHRlc3RMb2FkMzJTaWduRXh0ZW5kMTZVc2VkVHdpY2UoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICBWYWx1ZSogYWRkcmVzcyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogbG9hZGVkID0g
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBPcmlnaW4oKSwgYWRkcmVz
cywgNCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
U0V4dDE2LCBPcmlnaW4oKSwgbG9hZGVkKTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIFN0b3JlLCBPcmlnaW4oKSwgbG9hZGVkLCBhZGRyZXNzKTsKKyAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwor
CisgICAgaW50NjRfdCBzdG9yYWdlID0gMHgwMTIzODU0Nzg5YWJjZGVmOworICAgIENIRUNLKGNv
bXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgJnN0b3JhZ2UpID09IDB4ZmZmZjg1NDcpOworICAg
IFdURkxvZ0Fsd2F5cygic3RybyA9ICVsbGQiLCBzdG9yYWdlKTsKKyAgICBDSEVDSyhzdG9yYWdl
ID09IDB4MDEyMzg1NDcwMTIzODU0Nyk7Cit9CisKK3ZvaWQgdGVzdExvYWQ4U2lnbkV4dGVuZDE2
KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFkZHJlc3MgPSByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
VmFsdWUqIGxvYWRlZCA9IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZDha
LCBPcmlnaW4oKSwgYWRkcmVzcywgNCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU0V4dDE2LCBPcmlnaW4oKSwgbG9hZGVkKTsKKyAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwor
CisgICAgaW50NjRfdCBzdG9yYWdlID0gMHgwMTIzNDU2Nzg5YWJjZGVmOworICAgIENIRUNLKGNv
bXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgJnN0b3JhZ2UpID09IDB4NjcpOworICAgIENIRUNL
KHN0b3JhZ2UgPT0gMHgwMTIzNDU2Nzg5YWJjZGVmKTsKK30KKwogdm9pZCB0ZXN0U3BpbGxHUCgp
CiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMjA1Nyw2ICsxMjI0MywxNiBAQCB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RMb2FkPHVpbnQxNl90PihMb2FkMTZa
LCAxMDAwMDAwMDAwKSk7CiAgICAgUlVOKHRlc3RMb2FkPHVpbnQxNl90PihMb2FkMTZaLCAtMTAw
MDAwMDAwMCkpOwogCisgICAgUlVOKHRlc3RMb2FkUGx1c0JpdE1hc2tSZWR1Y3Rpb24oKSk7Cisg
ICAgUlVOKHRlc3RMb2FkOEJpdE1hc2sxNigpKTsKKyAgICBSVU4odGVzdExvYWQzMlNpZ25FeHRl
bmQ4KCkpOworICAgIFJVTih0ZXN0TG9hZDhaU2lnbkV4dGVuZDgoKSk7CisgICAgUlVOKHRlc3RM
b2FkMzJTaWduRXh0ZW5kOFVzZWRUd2ljZSgpKTsKKyAgICBSVU4odGVzdExvYWQzMlNpZ25FeHRl
bmQxNigpKTsKKyAgICBSVU4odGVzdExvYWQxNlpTaWduRXh0ZW5kMTYoKSk7CisgICAgUlVOKHRl
c3RMb2FkMzJTaWduRXh0ZW5kMTZVc2VkVHdpY2UoKSk7CisgICAgUlVOKHRlc3RMb2FkOFNpZ25F
eHRlbmQxNigpKTsKKwogICAgIFJVTih0ZXN0U3BpbGxHUCgpKTsKICAgICBSVU4odGVzdFNwaWxs
RlAoKSk7CiAK
</data>
<flag name="review"
          id="297505"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>