<?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>21703</bug_id>
          
          <creation_ts>2008-10-16 23:12:21 -0700</creation_ts>
          <short_desc>Devirtualize JSValue::toBoolean()</short_desc>
          <delta_ts>2011-09-09 20:18:26 -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>DUPLICATE</resolution>
          <dup_id>67727</dup_id>
          
          <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>20813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          <cc>barraclough</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95705</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-16 23:12:21 -0700</bug_when>
    <thetext>Currently JSValue::toBoolean() is implemented with a virtual call. While this is avoidable in general, due to the ability to override toBoolean() in the JavaScriptGlue API, we should be able to speed up the common case and use a bit in the StructureID TypeInfo for the slow case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95722</commentid>
    <comment_count>1</comment_count>
      <attachid>24456</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-17 02:49:22 -0700</bug_when>
    <thetext>Created attachment 24456
Patch for JavaScriptCore

Maciej sent me his earlier toBoolean() patch, which ignored the fact that JavaScriptGlue exposes the ability to overload toBoolean(). It was a small speedup, but this new patch, which adds a TypeInfo bit to account for that, is a small slowdown. The way to speed it up is probably to inline the fast cases into machine code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465204</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-09 20:18:26 -0700</bug_when>
    <thetext>This will now be fixed by 67727.

*** This bug has been marked as a duplicate of bug 67727 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24456</attachid>
            <date>2008-10-17 02:49:22 -0700</date>
            <delta_ts>2010-06-10 16:08:40 -0700</delta_ts>
            <desc>Patch for JavaScriptCore</desc>
            <filename>toboolean.diff</filename>
            <type>text/plain</type>
            <size>19702</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5l
eHAJKHJldmlzaW9uIDM3NjQ3KQorKysgSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDUsNyArMzQ1LDYgQEAgX19aTkszSlNDOEpTT2JqZWN0OHRvTnVtYmVyRVBOU185RXhl
Y1N0YQogX19aTkszSlNDOEpTT2JqZWN0OHRvT2JqZWN0RVBOU185RXhlY1N0YXRlRQogX19aTksz
SlNDOEpTT2JqZWN0OHRvU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOEpTT2JqZWN0
OWNsYXNzTmFtZUV2Ci1fX1pOSzNKU0M4SlNPYmplY3Q5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRl
RQogX19aTkszSlNDOUNvZGVCbG9jazE3ZGVyZWZTdHJ1Y3R1cmVJRHNFUE5TXzExSW5zdHJ1Y3Rp
b25FCiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVhdGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFF
CiBfX1pOSzNXVEY4Q29sbGF0b3I3Y29sbGF0ZUVQS3RtUzJfbQpJbmRleDogQVBJL0pTVmFsdWVS
ZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFQSS9KU1ZhbHVlUmVmLmNwcAkocmV2aXNpb24gMzc2NDcp
CisrKyBBUEkvSlNWYWx1ZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwxMSArMTg4LDkg
QEAgSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVN0cmluZyhKU0NvbnRleHRSZQogICAgIHJldHVybiB0
b1JlZihqc1N0cmluZyhleGVjLCBzdHJpbmctPnVzdHJpbmcoKSkpOwogfQogCi1ib29sIEpTVmFs
dWVUb0Jvb2xlYW4oSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK2Jvb2wgSlNW
YWx1ZVRvQm9vbGVhbihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZh
bHVlKTsKLSAgICByZXR1cm4ganNWYWx1ZS0+dG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVybiB0
b0pTKHZhbHVlKS0+dG9Cb29sZWFuKCk7CiB9CiAKIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlND
b250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJ
bmRleDogVk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDM3NjQ3KQorKysgVk0vSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXRQcmltaXRpdgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29u
c3QKK2Jvb2wgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6dG9Cb29sZWFuKCkgY29uc3QKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBWTS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oCShyZXZpc2lvbiAzNzY0NykKKysrIFZNL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVy
KEV4ZWNTdGF0ZSosIGRvdWJsZSYsIEpTVmFsdWUqJik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB0
b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIGJvb2wgdG9Cb29sZWFuKCkgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDog
Vk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM3
NjQ3KQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMjgsNyArMjEyOCw3
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8K
ICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFu
KCFjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvQm9vbGVhbihjYWxsRnJhbWUp
KTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJhbWVbc3JjXS5q
c1ZhbHVlKGNhbGxGcmFtZSktPnRvQm9vbGVhbigpKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogCkBAIC0yOTg1LDcgKzI5
ODUsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
ICAqLwogICAgICAgICBpbnQgY29uZCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50
IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNhbGxGcmFtZVtjb25k
XS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlm
IChjYWxsRnJhbWVbY29uZF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0Jvb2xlYW4oKSkgewogICAg
ICAgICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKQEAgLTMwMDIsNyArMzAwMiw3IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50
IGNvbmQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmIChjYWxsRnJhbWVbY29uZF0uanNWYWx1ZShjYWxsRnJh
bWUpLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoY2FsbEZyYW1lW2NvbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0
YXJnZXQ7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgfQpAQCAtMzAxOCw3ICsz
MDE4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICAqLwogICAgICAgICBpbnQgY29uZCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50
IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWVbY29u
ZF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBp
ZiAoIWNhbGxGcmFtZVtjb25kXS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvQm9vbGVhbigpKSB7CiAg
ICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgTkVYVF9PUENPREU7CiAgICAg
ICAgIH0KQEAgLTQ5NzIsOSArNDk3Miw3IEBAIGludCBNYWNoaW5lOjpjdGlfb3BfbG9vcF9pZl90
cnVlKENUSV9BUkcKIHsKICAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CiAKLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0KLSAgICBib29sIHJlc3VsdCA9IHNy
YzEtPnRvQm9vbGVhbihjYWxsRnJhbWUpOworICAgIGJvb2wgcmVzdWx0ID0gc3JjMS0+dG9Cb29s
ZWFuKCk7CiAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC01MDk5LDkgKzUwOTcsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3Bfbm90
KENUSV9BUkdTKQogewogICAgIEpTVmFsdWUqIHNyYyA9IEFSR19zcmMxOwogCi0gICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNCb29sZWFuKCFzcmMtPnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc0Jvb2xlYW4oIXNyYy0+dG9Cb29sZWFuKCkpOwogICAgIFZNX0NIRUNLX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTExMCw5ICs1MTA2LDcgQEAg
aW50IFNGWF9DQUxMIE1hY2hpbmU6OmN0aV9vcF9qdHJ1ZShDVElfQQogewogICAgIEpTVmFsdWUq
IHNyYzEgPSBBUkdfc3JjMTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKLQotICAgIGJvb2wgcmVzdWx0ID0gc3JjMS0+dG9Cb29sZWFuKGNhbGxGcmFtZSk7Cisg
ICAgYm9vbCByZXN1bHQgPSBzcmMxLT50b0Jvb2xlYW4oKTsKICAgICBWTV9DSEVDS19FWENFUFRJ
T05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IGtqcy9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
Mzc2NDcpCisrKyBranMvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODIs
NyArNTgyLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKgogCiAg
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKIAotICAgICAgICBpZiAocmVzdWx0
LT50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIGlmIChyZXN1bHQtPnRvQm9vbGVhbigpKQogICAg
ICAgICAgICAgcmVzdWx0QXJyYXktPnB1dChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwpAQCAtNjU2LDcgKzY1Niw3IEBAIEpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiAKICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBl
bmQoanNOdW1iZXIoZXhlYywgaykpOwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlz
T2JqKTsKIAotICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS0+dG9Cb29s
ZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS0+dG9C
b29sZWFuKCk7CiAKICAgICAgICAgaWYgKCFwcmVkaWNhdGVSZXN1bHQpIHsKICAgICAgICAgICAg
IHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CkBAIC03MjAsNyArNzIwLDcgQEAgSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZQogICAgICAgICBlYWNoQXJndW1lbnRzLmFw
cGVuZChqc051bWJlcihleGVjLCBrKSk7CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRo
aXNPYmopOwogCi0gICAgICAgIGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLT50b0Jv
b2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLT50
b0Jvb2xlYW4oKTsKIAogICAgICAgICBpZiAocHJlZGljYXRlUmVzdWx0KSB7CiAgICAgICAgICAg
ICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CkluZGV4OiBranMvQm9vbGVhbkNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBranMvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
Mzc2NDcpCisrKyBranMvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3RvcihFCiBK
U09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gbmV3IChleGVjKSBCb29sZWFuT2Jq
ZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgp
KTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUoanNCb29sZWFuKGFyZ3MuYXQoZXhlYywgMCkt
PnRvQm9vbGVhbihleGVjKSkpOworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShqc0Jvb2xlYW4o
YXJncy5hdChleGVjLCAwKS0+dG9Cb29sZWFuKCkpKTsKICAgICByZXR1cm4gb2JqOwogfQogCkBA
IC01OSw3ICs1OSw3IEBAIENvbnN0cnVjdFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDb24K
IC8vIEVDTUEgMTUuNi4xCiBzdGF0aWMgSlNWYWx1ZSogY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihhcmdzLmF0KGV4ZWMsIDApLT50b0Jvb2xlYW4oZXhl
YykpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYXJncy5hdChleGVjLCAwKS0+dG9Cb29sZWFuKCkp
OwogfQogCiBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKENhbGxEYXRh
JiBjYWxsRGF0YSkKSW5kZXg6IGtqcy9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtq
cy9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAzNzY0NykKKysrIGtqcy9HZXR0ZXJTZXR0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgR2V0dGVyU2V0dGVyOjpn
ZXRQcmltaXRpdmVOdW1iZXIoRXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHZXR0ZXJT
ZXR0ZXI6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAorYm9vbCBHZXR0ZXJTZXR0ZXI6OnRv
Qm9vbGVhbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IGZhbHNlOwpJbmRleDoga2pzL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9HZXR0
ZXJTZXR0ZXIuaAkocmV2aXNpb24gMzc2NDcpCisrKyBranMvR2V0dGVyU2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmly
dHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVlKTsKLSAgICAgICAgdmlydHVh
bCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xl
YW4oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25z
dDsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7
CkluZGV4OiBranMvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTQ2VsbC5oCShyZXZpc2lv
biAzNzY0NykKKysrIGtqcy9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCiAgICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVt
YmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYpID0gMDsKLSAgICAgICAg
dmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdCA9IDA7CisgICAgICAgIGJv
b2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4
ZWNTdGF0ZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4
ZWNTdGF0ZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3Qo
RXhlY1N0YXRlKikgY29uc3QgPSAwOwpAQCAtMjcyLDkgKzI3Miw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gYXNDZWxsKCktPmdldFByaW1pdGl2ZU51bWJlcihleGVjLCBudW1i
ZXIsIHZhbHVlKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4o
RXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIGlubGluZSBib29sIEpTVmFsdWU6OnRvQm9vbGVh
bigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRl
KHRoaXMpID8gSlNJbW1lZGlhdGU6OnRvQm9vbGVhbih0aGlzKSA6IGFzQ2VsbCgpLT50b0Jvb2xl
YW4oZXhlYyk7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykg
PyBKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKHRoaXMpIDogYXNDZWxsKCktPnRvQm9vbGVhbigpOwog
ICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIEpTVmFsdWU6OnRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKSW5kZXg6IGtqcy9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBranMvSlNOb3RBbk9iamVjdC5jcHAJKHJldmlzaW9uIDM3NjQ3KQorKysga2pzL0pTTm90
QW5PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMyArNTEsNiBAQCBib29sIEpTTm90
QW5PYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIEpTTm90QW5PYmplY3Q6OnRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSAm
JiBleGVjLT5leGNlcHRpb24oKSA9PSBtX2V4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiBkb3VibGUgSlNOb3RBbk9iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKSW5kZXg6IGtqcy9KU05vdEFuT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2pzL0pTTm90QW5PYmplY3QuaAkocmV2aXNpb24gMzc2NDcpCisrKyBr
anMvSlNOb3RBbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAvLyBKU1ZhbHVlIG1ldGhvZHMKICAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUq
LCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomKTsKLSAgICAgICAgdmlydHVhbCBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIo
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVj
U3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0
YXRlKikgY29uc3Q7CkluZGV4OiBranMvSlNOdW1iZXJDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
anMvSlNOdW1iZXJDZWxsLmNwcAkocmV2aXNpb24gMzc2NDcpCisrKyBranMvSlNOdW1iZXJDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDYgQEAgYm9vbCBKU051bWJlckNlbGw6
OmdldFByaW1pdGl2ZU51bWJlcihFeAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTTnVt
YmVyQ2VsbDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFs
dWUgPCAwLjAgfHwgbV92YWx1ZSA+IDAuMDsgLy8gZmFsc2UgZm9yIE5hTgotfQotCiBkb3VibGUg
SlNOdW1iZXJDZWxsOjp0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdAogewogICByZXR1cm4gbV92
YWx1ZTsKSW5kZXg6IGtqcy9KU051bWJlckNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNOdW1i
ZXJDZWxsLmgJKHJldmlzaW9uIDM3NjQ3KQorKysga2pzL0pTTnVtYmVyQ2VsbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0
YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSk7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIGJvb2wgdG9Cb29sZWFu
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA8IDAuMCB8fCBtX3ZhbHVlID4gMC4wOyAvKiBmYWxz
ZSBmb3IgTmFOICovIH0KICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKikgY29u
c3Q7CkluZGV4OiBranMvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU09iamVjdC5j
cHAJKHJldmlzaW9uIDM3NjQ3KQorKysga2pzL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMwLDExICs0MzAsNiBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNT
dGF0CiAgICAgbV9zdHJ1Y3R1cmVJRC0+Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoZXhlYywg
cHJvcGVydHlOYW1lcywgdGhpcyk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnRvQm9vbGVhbihFeGVj
U3RhdGUqKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiBkb3VibGUgSlNPYmplY3Q6
OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU1ZhbHVlKiBwcmltaXRp
dmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwpJbmRleDoga2pzL0pTT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2pzL0pTT2JqZWN0LmgJKHJldmlzaW9uIDM3NjQ3KQorKysga2pz
L0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJD
b21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIkpT
TnVtYmVyQ2VsbC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlN
YXAuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNs
b3QuaCIKQEAgLTEwOSw3ICsxMTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5
cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUpOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAg
ICBib29sIHRvQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuICFzdHJ1Y3R1cmVJRCgpLT50eXBlSW5m
bygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgY3Vz
dG9tVG9Cb29sZWFuKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIHRvQm9v
bGVhbigpOyB9CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwpA
QCAtMjUxLDYgKzI1MywyMSBAQCBpbmxpbmUgYm9vbCBKU0NlbGw6OmlzT2JqZWN0KGNvbnN0IENs
YXNzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgYm9vbCBKU0NlbGw6OnRvQm9vbGVh
bigpIGNvbnN0Cit7CisgICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmVJRCgpLT50eXBl
SW5mbygpOworICAgIGlmIChVTkxJS0VMWSh0eXBlSW5mby5vdmVycmlkZXNUb0Jvb2xlYW4oKSkp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU09iamVjdCo+KHRoaXMpLT5jdXN0
b21Ub0Jvb2xlYW4oKTsKKworICAgIEpTVHlwZSB0eXBlID0gc3RydWN0dXJlSUQoKS0+dHlwZUlu
Zm8oKS50eXBlKCk7CisgICAgaWYgKHR5cGUgPT0gTnVtYmVyVHlwZSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IEpTTnVtYmVyQ2VsbCo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKKyAg
ICBpZiAodHlwZSA9PSBPYmplY3RUeXBlKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgSlNPYmplY3QqPih0aGlzKS0+dG9Cb29sZWFuKCk7CisgICAgQVNTRVJUKHR5cGUgPT0gU3Ry
aW5nVHlwZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcykt
PnRvQm9vbGVhbigpOworfQorCiAvLyB0aGlzIG1ldGhvZCBpcyBoZXJlIHRvIGJlIGFmdGVyIHRo
ZSBpbmxpbmUgZGVjbGFyYXRpb24gb2YgSlNDZWxsOjppc09iamVjdAogaW5saW5lIGJvb2wgSlNW
YWx1ZTo6aXNPYmplY3QoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pIGNvbnN0CiB7CkluZGV4
OiBranMvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU1N0cmluZy5jcHAJKHJldmlz
aW9uIDM3NjQ3KQorKysga2pzL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEg
KzQyLDYgQEAgYm9vbCBKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU1N0cmluZzo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICFtX3ZhbHVlLmlzRW1wdHkoKTsKLX0KLQogZG91YmxlIEpTU3Ry
aW5nOjp0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdAogewogICAgIHJldHVybiBtX3ZhbHVlLnRv
RG91YmxlKCk7CkluZGV4OiBranMvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNTdHJp
bmcuaAkocmV2aXNpb24gMzc2NDcpCisrKyBranMvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNiArOTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG8pIHsgcmV0
dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE5lZWRz
VGhpc0NvbnZlcnNpb24pKTsgfQogCisgICAgICAgIGJvb2wgdG9Cb29sZWFuKCkgY29uc3QgeyBy
ZXR1cm4gIW1fdmFsdWUuaXNFbXB0eSgpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBlbnVt
IFZQdHJTdGVhbGluZ0hhY2tUeXBlIHsgVlB0clN0ZWFsaW5nSGFjayB9OwogICAgICAgICBKU1N0
cmluZyhWUHRyU3RlYWxpbmdIYWNrVHlwZSkgCkBAIC0xMDEsNyArMTAzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGdl
dFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZh
bHVlKTsKLSAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBranMv
SlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU1ZhbHVlLmgJKHJldmlzaW9uIDM3NjQ3KQor
Kysga2pzL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYpOwog
Ci0gICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29s
IHRvQm9vbGVhbigpIGNvbnN0OwogCiAgICAgICAgIC8vIHRvTnVtYmVyIGNvbnZlcnNpb24gaXMg
ZXhwZWN0ZWQgdG8gYmUgc2lkZSBlZmZlY3QgZnJlZSBpZiBhbiBleGNlcHRpb24gaGFzCiAgICAg
ICAgIC8vIGJlZW4gc2V0IGluIHRoZSBFeGVjU3RhdGUgYWxyZWFkeS4KSW5kZXg6IGtqcy9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMzc2NDcpCisrKyBranMvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTEsOSArMzExLDkgQEAgdm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0
KEV4ZWNTdGF0ZQogICAgIHN0YXRpY19jYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oYmFzZU9iamVj
dCktPnNldElucHV0KHZhbHVlLT50b1N0cmluZyhleGVjKSk7CiB9CiAKLXZvaWQgc2V0UmVnRXhw
Q29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVj
dCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBz
dGF0aWNfY2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KGJhc2VPYmplY3QpLT5zZXRNdWx0aWxpbmUo
dmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CisgICAgc3RhdGljX2Nhc3Q8UmVnRXhwQ29uc3RydWN0
b3IqPihiYXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLT50b0Jvb2xlYW4oKSk7CiB9CiAg
IAogLy8gRUNNQSAxNS4xMC40CkluZGV4OiBranMvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBranMvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMzc2NDcpCisrKyBranMvUmVnRXhw
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIGJvb2wgUmVnRXhw
T2JqZWN0OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgfQogICAgIH0KIAotICAgIGJv
b2wgZ2xvYmFsID0gZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpLT50b0Jv
b2xlYW4oZXhlYyk7CisgICAgYm9vbCBnbG9iYWwgPSBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmdsb2JhbCktPnRvQm9vbGVhbigpOwogICAgIGludCBsYXN0SW5kZXggPSAwOwogICAg
IGlmIChnbG9iYWwpIHsKICAgICAgICAgaWYgKGQtPmxhc3RJbmRleCA8IDAgfHwgZC0+bGFzdElu
ZGV4ID4gaW5wdXQuc2l6ZSgpKSB7CkluZGV4OiBranMvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzc2NDcpCisrKyBr
anMvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsxMDYsMTEg
QEAgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YQogCiAgICAgVVN0cmlu
ZyByZXN1bHQgPSAiLyIgKyBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPih0aGlzVmFsdWUpLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSktPnRvU3RyaW5nKGV4ZWMpOwog
ICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0
Kj4odGhpc1ZhbHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpLT50
b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KHRoaXNW
YWx1ZSktPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS0+dG9Cb29sZWFu
KCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ2cnKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8UmVn
RXhwT2JqZWN0Kj4odGhpc1ZhbHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5p
Z25vcmVDYXNlKS0+dG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmIChzdGF0aWNfY2FzdDxSZWdFeHBP
YmplY3QqPih0aGlzVmFsdWUpLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9y
ZUNhc2UpLT50b0Jvb2xlYW4oKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnaScpOwotICAgIGlm
IChzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPih0aGlzVmFsdWUpLT5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSktPnRvQm9vbGVhbihleGVjKSkKKyAgICBpZiAoc3Rh
dGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4odGhpc1ZhbHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5tdWx0aWxpbmUpLT50b0Jvb2xlYW4oKSkKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnbScpOwogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgcmVzdWx0KTsKIH0K
SW5kZXg6IGtqcy9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtqcy9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCShy
ZXZpc2lvbiAzNzY0NykKKysrIGtqcy9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9i
amVjdFR5cGUsIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsgCiAgICAgICAgIH0KIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgfTsKICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDoga2pzL1R5cGVJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2pzL1R5cGVJbmZvLmgJKHJldmlzaW9uIDM3NjQ3KQorKysga2pzL1R5
cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltcGxlbWVudHNIYXNJbnN0YW5jZSA9IDEgPDwg
MTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgPSAxIDw8
IDI7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE5lZWRzVGhpc0NvbnZlcnNpb24gPSAxIDw8
IDM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1RvQm9vbGVhbiA9IDEgPDwg
NDsKIAogICAgIGNsYXNzIFR5cGVJbmZvIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIENUSTsKQEAg
LTQ4LDggKzQ5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGltcGxlbWVudHNI
YXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBJbXBsZW1lbnRzSGFzSW5zdGFu
Y2U7IH0KICAgICAgICAgYm9vbCBvdmVycmlkZXNIYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmxhZ3MgJiBPdmVycmlkZXNIYXNJbnN0YW5jZTsgfQogICAgICAgICBib29sIG5lZWRzVGhp
c0NvbnZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgTmVlZHNUaGlzQ29udmVyc2lv
bjsgfQorICAgICAgICBib29sIG92ZXJyaWRlc1RvQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZmxhZ3MgJiBPdmVycmlkZXNUb0Jvb2xlYW47IH0KIAogICAgICAgICB1bnNpZ25lZCBmbGFncygp
IGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEpTVHlw
ZSBtX3R5cGU7CiAgICAgICAgIHVuc2lnbmVkIG1fZmxhZ3M7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>