<?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>73764</bug_id>
          
          <creation_ts>2011-12-03 21:46:49 -0800</creation_ts>
          <short_desc>DFG should optimize strict equality</short_desc>
          <delta_ts>2011-12-04 13:17:04 -0800</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>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>514638</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-03 21:46:49 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514639</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-03 21:47:17 -0800</bug_when>
    <thetext>Performance:


Benchmark report for SunSpider, V8, and Kraken on nitroflex.local (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r101941)
&quot;StrictEq&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc (r101941)

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

                                            TipOfTree                StrictEq                                    
SunSpider:
   3d-cube                                6.9323+-0.1950          6.8258+-0.1168         might be 1.0156x faster
   3d-morph                               7.7808+-0.1310          7.6057+-0.1444         might be 1.0230x faster
   3d-raytrace                            7.2095+-0.2285    ?     7.2449+-0.1412       ?
   access-binary-trees                    1.5190+-0.0531    ?     1.5205+-0.0456       ?
   access-fannkuch                        6.3998+-0.0992          6.3726+-0.0952       
   access-nbody                           3.1883+-0.0460    ?     3.2425+-0.1529       ? might be 1.0170x slower
   access-nsieve                          2.5078+-0.0444          2.4955+-0.0388       
   bitops-3bit-bits-in-byte               1.2539+-0.0331    ?     1.2702+-0.0271       ? might be 1.0130x slower
   bitops-bits-in-byte                    2.4069+-0.0753          2.3651+-0.0655         might be 1.0177x faster
   bitops-bitwise-and                     3.5193+-0.0955          3.4204+-0.0665         might be 1.0289x faster
   bitops-nsieve-bits                     5.3966+-0.1127          5.3858+-0.1208       
   controlflow-recursive                  2.0642+-0.0389          2.0570+-0.0374       
   crypto-aes                             6.9077+-0.1512    ?     6.9706+-0.3068       ?
   crypto-md5                             2.4144+-0.0995          2.3924+-0.0552       
   crypto-sha1                            2.1003+-0.0765    ?     2.1010+-0.0702       ?
   date-format-tofte                     10.6994+-0.4402         10.2068+-0.1852         might be 1.0483x faster
   date-format-xparb                      9.9395+-0.2505          9.8182+-0.3418         might be 1.0124x faster
   math-cordic                            6.2878+-0.0545    !     6.5924+-0.1110       ! definitely 1.0484x slower
   math-partial-sums                      7.5167+-0.1188    ?     7.6744+-0.1654       ? might be 1.0210x slower
   math-spectral-norm                     2.3594+-0.0652          2.2948+-0.0333         might be 1.0281x faster
   regexp-dna                            11.1150+-0.1390         11.0333+-0.2120       
   string-base64                          3.9360+-0.1301          3.9124+-0.1739       
   string-fasta                           6.5948+-0.0735          6.5943+-0.1124       
   string-tagcloud                       11.4289+-0.3142         11.1968+-0.2792         might be 1.0207x faster
   string-unpack-code                    19.7935+-0.6190         19.3594+-0.5112         might be 1.0224x faster
   string-validate-input                  5.2879+-0.0671    ?     5.4383+-0.1742       ? might be 1.0284x slower

   &lt;arithmetic&gt; *                         6.0215+-0.0333          5.9766+-0.0299         might be 1.0075x faster
   &lt;geometric&gt;                            4.7955+-0.0234          4.7752+-0.0210         might be 1.0043x faster
   &lt;harmonic&gt;                             3.7771+-0.0328          3.7673+-0.0228         might be 1.0026x faster

                                            TipOfTree                StrictEq                                    
V8:
   crypto                                70.3478+-0.4708    ?    71.1741+-0.7620       ? might be 1.0117x slower
   deltablue                            149.1885+-0.6366    ?   150.9677+-1.2435       ? might be 1.0119x slower
   earley-boyer                          86.1584+-1.5846    ^    81.2521+-0.8124       ^ definitely 1.0604x faster
   raytrace                              52.5449+-0.3174         52.5310+-0.2737       
   regexp                               105.8777+-0.9201    ^   103.9017+-0.3709       ^ definitely 1.0190x faster
   richards                             115.7194+-0.3089        115.6106+-0.3917       
   splay                                 74.4429+-0.7815         73.6127+-1.1551         might be 1.0113x faster

   &lt;arithmetic&gt;                          93.4685+-0.3186    ^    92.7214+-0.3343       ^ definitely 1.0081x faster
   &lt;geometric&gt; *                         88.7326+-0.3108    ^    87.8962+-0.3192       ^ definitely 1.0095x faster
   &lt;harmonic&gt;                            84.2457+-0.3011    ^    83.4420+-0.3066       ^ definitely 1.0096x faster

                                            TipOfTree                StrictEq                                    
Kraken:
   ai-astar                             497.9250+-6.0276    ?   498.8070+-5.3309       ?
   audio-beat-detection                 188.6153+-3.0431        185.4334+-0.5227         might be 1.0172x faster
   audio-dft                            272.5915+-7.7390        266.2961+-2.3100         might be 1.0236x faster
   audio-fft                            120.9801+-0.5541    ?   121.2349+-1.0772       ?
   audio-oscillator                     249.7702+-3.2990    ?   249.9946+-3.3012       ?
   imaging-darkroom                     307.3386+-6.3388        304.3757+-5.0748       
   imaging-desaturate                   216.9380+-0.7358    ?   218.1204+-1.2908       ?
   imaging-gaussian-blur                560.1900+-3.2296        557.8627+-4.5548       
   json-parse-financial                  58.9333+-0.6396         58.4186+-0.2120       
   json-stringify-tinderbox              74.3975+-0.1989    !    76.8076+-1.2100       ! definitely 1.0324x slower
   stanford-crypto-aes                   99.7420+-0.8033         97.7437+-1.8397         might be 1.0204x faster
   stanford-crypto-ccm                  101.9951+-0.5625    ?   103.5983+-1.6895       ? might be 1.0157x slower
   stanford-crypto-pbkdf2               192.2552+-1.4049        190.9705+-1.4355       
   stanford-crypto-sha256-iterative      85.3768+-1.4834         83.5442+-0.5721         might be 1.0219x faster

   &lt;arithmetic&gt; *                       216.2178+-1.0320        215.2291+-0.6276         might be 1.0046x faster
   &lt;geometric&gt;                          172.7627+-0.6533        172.1056+-0.5018         might be 1.0038x faster
   &lt;harmonic&gt;                           139.8906+-0.5159        139.5563+-0.5263         might be 1.0024x faster

                                            TipOfTree                StrictEq                                    
All benchmarks:
   &lt;arithmetic&gt;                          81.6572+-0.3329         81.2266+-0.1992         might be 1.0053x faster
   &lt;geometric&gt;                           21.5398+-0.0691         21.4347+-0.0654         might be 1.0049x faster
   &lt;harmonic&gt;                             6.6508+-0.0564          6.6330+-0.0394         might be 1.0027x faster

                                            TipOfTree                StrictEq                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                       48.7026+-0.1219    ^    48.3545+-0.1261       ^ definitely 1.0072x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514640</commentid>
    <comment_count>2</comment_count>
      <attachid>117783</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-03 21:52:46 -0800</bug_when>
    <thetext>Created attachment 117783
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514748</commentid>
    <comment_count>3</comment_count>
      <attachid>117783</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-04 13:17:00 -0800</bug_when>
    <thetext>Comment on attachment 117783
the patch

Clearing flags on attachment: 117783

Committed r101964: &lt;http://trac.webkit.org/changeset/101964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514749</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-04 13:17:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117783</attachid>
            <date>2011-12-03 21:52:46 -0800</date>
            <delta_ts>2011-12-04 13:17:00 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>stricteq_patch_1.diff</filename>
            <type>text/plain</type>
            <size>17564</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxOTQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDExLTEyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBzdHJpY3QgZXF1YWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNzY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAxJSBzcGVlZC11cCBvbiBWOC4KKwor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50ZWdlckNvbXBhcmUpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFyZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUludGVnZXJDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0xMi0wMyAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIEhhc2hNYXA8T3duUHRyPiBmb3IgU2NyaXB0U2Ft
cGxlUmVjb3JkTWFwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDEwMTk0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NTAsNDMgKzE3NTAsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaQogICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxl
SW5kZXgpOwogfQogCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0
aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2Rl
JiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBTX0RGR09wZXJh
dGlvbl9FSkogb3BlcmF0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJD
b21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKIHsKLSAgICBpZiAoY29tcGlsZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRpdGlv
biwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgp
KSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9k
ZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFBy
ZWRpY3Rpb24pOwotICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5v
ZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RF
cXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJl
ZGljdGlvbik7Ci0gICAgZWxzZSBpZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpICYmICFhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkK
LSAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9u
LCBvcGVyYXRpb24pOwotICAgIGVsc2UgaWYgKChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVj
dWxhdGVOdW1iZXIoKSB8fCBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIo
KSkgJiYgIU5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0
KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAgICAvLyBOb3JtYWwgY2FzZSwgbm90IGZ1c2VkIHRv
IGJyYW5jaC4KLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAg
ICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIoMSksIHJlc3VsdFBheWxvYWQuZ3ByKCkp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnVlQ2FzZSA9IG1faml0LmJyYW5jaERv
dWJsZShkb3VibGVDb25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKLSAgICAgICAgbV9q
aXQubW92ZShJbW0zMigwKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgIHRydWVDYXNl
LmxpbmsoJm1faml0KTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgIAor
ICAgIG1faml0LmNvbXBhcmUzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1
bHRQYXlsb2FkLmdwcigpKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9v
bCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgorICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9h
ZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworfQogCi0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVz
dWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIE5vcm1hbCBjYXNlLCBub3QgZnVzZWQgdG8gYnJhbmNoLgotICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5jb21w
YXJlMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ug
c2hvdWxkIHVzZSBpdCBoZXJlLgotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICB9Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRG91YmxlQ29tcGFyZShOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbikKK3sKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAK
KyAgICBtX2ppdC5tb3ZlKEltbTMyKDEpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCB0cnVlQ2FzZSA9IG1faml0LmJyYW5jaERvdWJsZShjb25kaXRpb24s
IG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKKyAgICBtX2ppdC5tb3ZlKEltbTMyKDApLCByZXN1bHRQ
YXlsb2FkLmdwcigpKTsKKyAgICB0cnVlQ2FzZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9k
ZSYgbm9kZSkKQEAgLTI1OTMsNyArMjU4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENvbXBhcmVTdHJpY3RF
cToKLSAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSkpCisgICAgICAgIGlm
IChjb21waWxlU3RyaWN0RXEobm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJy
ZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEwMTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NzUsNDEg
KzE3NzUsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRo
IGEgc3Vic2VxdWVudCBicmFuY2guCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUm
IG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0
aW9uX0VKSiBvcGVyYXRpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50ZWdlckNv
bXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewotICAgIGlmIChjb21waWxlUGVlcEhvbGVCcmFuY2gobm9kZSwgY29uZGl0aW9u
LCBkb3VibGVDb25kaXRpb24sIG9wZXJhdGlvbikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0
KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBvcDEsIG9wMik7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29uZGl0aW9u
LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0g
ICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERh
dGFGb3JtYXRKU0Jvb2xlYW4pOwotICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgdHJ1ZUNhc2UgPSBtX2ppdC5icmFuY2hEb3VibGUoZG91YmxlQ29uZGl0
aW9uLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7Ci0gICAgICAgIG1faml0LnhvclB0cihJbW0zMih0
cnVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQpOworICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CisgICAgCisgICAgbV9qaXQuY29tcGFy
ZTMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
CisgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVy
ZS4KKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0Lmdwcigp
KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOworfQogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0gICAgfSBlbHNlIGlmIChu
b2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChh
dChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2Jq
ZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwg
aXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwotICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFy
ZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChu
b2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlvbik7Ci0gICAgZWxz
ZQotICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRp
b24sIG9wZXJhdGlvbik7Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFy
ZShOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikK
K3sKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKFZhbHVlVHJ1ZSksIHJlc3VsdC5ncHIoKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgdHJ1ZUNhc2UgPSBtX2ppdC5icmFuY2hEb3VibGUoY29uZGl0aW9uLCBvcDEuZnByKCksIG9w
Mi5mcHIoKSk7CisgICAgbV9qaXQueG9yUHRyKEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOwor
ICAgIHRydWVDYXNlLmxpbmsoJm1faml0KTsKICAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZGUm
IG5vZGUpCkBAIC0yNTk4LDcgKzI1ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6
Ci0gICAgICAgIGlmIChub25TcGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUpKQorICAgICAgICBpZiAo
Y29tcGlsZVN0cmljdEVxKG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVh
azsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDEwMTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTg5LDYgKzIxODksMTc5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCitib29s
IFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlv
biBkb3VibGVDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCit7CisgICAg
aWYgKGNvbXBpbGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlv
biwgb3BlcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkp
KQorICAgICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9kZSwgY29uZGl0aW9uKTsKKyAgICBl
bHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0
KG5vZGUuY2hpbGQyKCkpKSkKKyAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgZG91
YmxlQ29uZGl0aW9uKTsKKyAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2Rl
OjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5j
aGlsZDIoKSkpKQorICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwor
ICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCisgICAgICAgIGNv
bXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
LCBpc0FycmF5UHJlZGljdGlvbik7CisgICAgZWxzZQorICAgICAgICBub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFG
b3JDb25zdGFudChOb2RlJiBub2RlLCBOb2RlSW5kZXggdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQp
Cit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIHZhbHVlKTsKKyAgICAKKyAgICBOb2Rl
SW5kZXggYnJhbmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKKyAgICBpZiAo
YnJhbmNoTm9kZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAgICBOb2RlJiBicmFuY2hOb2RlID0g
YXQoYnJhbmNoTm9kZUluZGV4KTsKKyAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5v
ZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CisgICAg
ICAgIAorICAgICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRo
ZSB0YWtlbiBibG9jay4KKyAgICAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2Vu
IHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZh
bGwgdGhyb3VnaC4KKyAgICAgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAg
ICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDsKKyAgICAgICAgICAg
IEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwor
ICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBvcDEuZ3By
KCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNW
YWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKSwgdGFrZW4pOworI2Vsc2UKKyAgICAgICAgR1BSUmVn
IHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOworICAgICAgICBHUFJSZWcgdGFnR1BSID0g
b3AxLnRhZ0dQUigpOworICAgICAgICBpZiAoY29uZGl0aW9uID09IE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCkgeworICAgICAgICAgICAgLy8gRHJvcCBkb3duIGlmIG5vdCBlcXVhbCwgZ28gZWxzZXdo
ZXJlIGlmIGVxdWFsLgorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90RXF1YWwg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgTWFjcm9B
c3NlbWJsZXI6OkltbTMyKGNvbnN0YW50LnRhZygpKSk7CisgICAgICAgICAgICBhZGRCcmFuY2go
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBwYXlsb2FkR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSksIHRha2VuKTsKKyAgICAgICAgICAg
IG5vdEVxdWFsLmxpbmsoJm1faml0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IERyb3AgZG93biBpZiBlcXVhbCwgZ28gZWxzZWh3ZXJlIGlmIG5vdCBlcXVhbC4KKyAgICAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRh
Z0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvbnN0YW50LnRhZygpKSksIHRha2VuKTsKKyAg
ICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb25zdGFudC5wYXlsb2FkKCkp
KSwgdGFrZW4pOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGlmIChub3RU
YWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAo
KSwgbm90VGFrZW4pOworICAgICAgICAKKyAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNo
Tm9kZUluZGV4OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEdQUlJl
ZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdEVxdWFsID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgb3AxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpKSk7CisgICAgbV9qaXQub3IzMihNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgbm90RXF1YWwubGluaygmbV9qaXQp
OworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1h
dEpTQm9vbGVhbik7CisjZWxzZQorICAgIEdQUlJlZyBvcDFQYXlsb2FkR1BSID0gb3AxLnBheWxv
YWRHUFIoKTsKKyAgICBHUFJSZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgbV9qaXQubW92ZShJbW0zMigwKSwgcmVz
dWx0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm90RXF1YWw7CisgICAgbm90
RXF1YWwuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3Ax
VGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY29uc3RhbnQudGFnKCkpKSk7CisgICAgbm90
RXF1YWwuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3Ax
UGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvbnN0YW50LnBheWxvYWQoKSkpKTsK
KyAgICBtX2ppdC5tb3ZlKEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgIG5vdEVxdWFsLmxpbmso
Jm1faml0KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwor
I2VuZGlmCisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlU3RyaWN0RXEoTm9kZSYgbm9kZSkKK3sKKyAgICAvLyAxKSBJZiBlaXRoZXIgb3Bl
cmFuZCBpcyBhIGNvbnN0YW50IGFuZCB0aGF0IGNvbnN0YW50IGlzIG5vdCBhIGRvdWJsZSwgaW50
ZWdlciwKKyAgICAvLyAgICBvciBzdHJpbmcsIHRoZW4gZG8gYSBKU1ZhbHVlIGNvbXBhcmlzb24u
CisgICAgCisgICAgaWYgKGlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkKKyAgICAgICAgICAg
IHJldHVybiBjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChub2RlLCBub2RlLmNoaWxkMigpLCB2
YWx1ZSk7CisgICAgfQorICAgIAorICAgIGlmIChpc0pTQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkp
IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQy
KCkpOworICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkp
CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQobm9kZSwgbm9k
ZS5jaGlsZDEoKSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICAvLyAyKSBJZiB0aGUgb3BlcmFu
ZHMgYXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBkbyBhbiBpbnRlZ2VyIGNvbXBhcmlzb24uCisgICAg
CisgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSks
IGF0KG5vZGUuY2hpbGQyKCkpKSkgeworICAgICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4
ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKKyAgICAgICAgaWYgKGJyYW5jaE5vZGVJbmRleCAh
PSBOb05vZGUpIHsKKyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9k
ZSwgYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpOworICAgICAgICAgICAg
dXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICAvLyAzKSBJZiB0aGUgb3BlcmFuZHMgYXJlIHByZWRpY3RlZCBkb3VibGUsIGRv
IGEgZG91YmxlIGNvbXBhcmlzb24uCisgICAgCisgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZU51bWJlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CisgICAgICAg
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOworICAg
ICAgICBpZiAoYnJhbmNoTm9kZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAgICAgICAgY29tcGls
ZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUVxdWFsKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0g
YnJhbmNoTm9kZUluZGV4OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVx
dWFsKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyA0KSBJZiB0
aGUgb3BlcmFuZHMgYXJlIHByZWRpY3RlZCBmaW5hbCBvYmplY3Qgb3IgYXJyYXksIHRoZW4gZG8g
YSBmaW5hbCBvYmplY3QKKyAgICAvLyAgICBvciBhcnJheSBjb21wYXJpc29uLgorICAgIAorICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwg
YXQobm9kZS5jaGlsZDIoKSkpKSB7CisgICAgICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgg
PSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOworICAgICAgICBpZiAoYnJhbmNoTm9kZUluZGV4ICE9
IE5vTm9kZSkgeworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9k
ZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRy
LCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEo
KSk7CisgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBtX2NvbXBp
bGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxE
YXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKKyAgICAg
ICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7Cisg
ICAgICAgIGlmIChicmFuY2hOb2RlSW5kZXggIT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBjb21w
aWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsKKyAgICAgICAgICAg
IHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5v
ZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyA1KSBGYWxsIGJhY2sg
dG8gbm9uLXNwZWN1bGF0aXZlIHN0cmljdCBlcXVhbGl0eS4KKyAgICAKKyAgICByZXR1cm4gbm9u
U3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDEwMTk0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0Miw2ICsxOTQyLDEz
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXgg
dmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIs
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgZW1pdEJyYW5jaChOb2RlJik7
CiAgICAgCisgICAgdm9pZCBjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVDb21wYXJl
KE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICAKKyAgICBib29s
IGNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KE5vZGUmLCBOb2RlSW5kZXggdmFsdWUsIEpTVmFs
dWUgY29uc3RhbnQpOworICAgIAorICAgIGJvb2wgY29tcGlsZVN0cmljdEVxKE5vZGUmKTsKKyAg
ICAKICAgICB2b2lkIGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmKTsKICAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVWYWx1ZVRvSW50MzIo
Tm9kZSYpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>