<?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>71382</bug_id>
          
          <creation_ts>2011-11-02 12:09:51 -0700</creation_ts>
          <short_desc>Devirtualize CSSRule.</short_desc>
          <delta_ts>2011-11-03 05:15:52 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>darin</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494789</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-02 12:09:51 -0700</bug_when>
    <thetext>The only remaining virtual method in CSSRule is the destructor.
If we make it non-virtual, each instance will shrink by one pointer (the vptr.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494794</commentid>
    <comment_count>1</comment_count>
      <attachid>113347</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-02 12:12:53 -0700</bug_when>
    <thetext>Created attachment 113347
Possibly a patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494810</commentid>
    <comment_count>2</comment_count>
      <attachid>113347</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-02 12:30:14 -0700</bug_when>
    <thetext>Comment on attachment 113347
Possibly a patch

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

r=me with a few comments.

&gt; Source/WebCore/css/CSSImportRule.h:60
&gt; +    class ImportedStyleSheetClient : public CachedStyleSheetClient {

This could use a comment explaining why the class itself can&apos;t implement the interface.

&gt; Source/WebCore/css/CSSRule.cpp:76
&gt; +void CSSRule::deref()
&gt; +{
&gt; +    if (!derefBase())
&gt; +        return;
&gt; +    switch (type()) {
&gt; +    case UNKNOWN_RULE:

The deletion part should be factored into a function. deref() can be inlined.

&gt; Source/WebCore/css/CSSRule.h:40
&gt; +    // Override RefCounted&apos;s deref() to ensure operator delete is called on
&gt; +    // the appropriate subclass type.
&gt; +    void deref();

You should explain that this class is non-virtual for a reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494933</commentid>
    <comment_count>3</comment_count>
      <attachid>113347</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 14:46:57 -0700</bug_when>
    <thetext>Comment on attachment 113347
Possibly a patch

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

&gt; Source/WebCore/css/CSSRule.h:36
&gt; +    ~CSSRule() { }

This base class destructor should be protected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495014</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-02 16:15:09 -0700</bug_when>
    <thetext>Maybe it would make sense to have RefCounted do deleting by calling

static_cast&lt;T*&gt;(this)-&gt;destruct();

instead of calling delete directly (with the default implementation just doing delete)? This way you would only need to override destruct() in cases like this. We may want to devirtualize some more in the future...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495022</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 16:28:25 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Maybe it would make sense to have RefCounted do deleting by calling
&gt; 
&gt; static_cast&lt;T*&gt;(this)-&gt;destruct();
&gt; 
&gt; instead of calling delete directly (with the default implementation just doing delete)? This way you would only need to override destruct() in cases like this. We may want to devirtualize some more in the future.

Seems OK.

I would call the function “destroy”, not “destruct”, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495369</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-03 05:15:52 -0700</bug_when>
    <thetext>Committed r99171: &lt;http://trac.webkit.org/changeset/99171&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113347</attachid>
            <date>2011-11-02 12:12:53 -0700</date>
            <delta_ts>2011-11-02 14:46:56 -0700</delta_ts>
            <desc>Possibly a patch</desc>
            <filename>bug-71382.diff</filename>
            <type>text/plain</type>
            <size>10414</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YjI5NmFiLi4xMzY4NTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDMg
QEAKIDIwMTEtMTEtMDIgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCisgICAg
ICAgIERldmlydHVhbGl6ZSBDU1NSdWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzEzODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIHZpcnR1YWwgZGVzdHJ1Y3RvciBmcm9tIENTU1J1
bGUsIGFuZCByZWltcGxlbWVudCBSZWZDb3VudGVkJ3MgZGVyZWYoKQorICAgICAgICB0byBpbnZv
a2Ugb3BlcmF0b3IgZGVsZXRlIG9uIHRoZSBhcHByb3ByaWF0ZSBzdWJjbGFzcyB0eXBlLgorCisg
ICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgQ1NTUnVsZSB2dGFibGUgYW5kIHNocmlua3MgZWFjaCBp
bnN0YW5jZSBieSBvbmUgQ1BVIHdvcmQuCisKKyAgICAgICAgKiBjc3MvQ1NTQ2hhcnNldFJ1bGUu
aDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VSdWxlLmg6CisgICAgICAgICogY3NzL0NTU01l
ZGlhUnVsZS5oOgorICAgICAgICAqIGNzcy9DU1NQYWdlUnVsZS5oOgorICAgICAgICAqIGNzcy9D
U1NSZWdpb25TdHlsZVJ1bGUuaDoKKyAgICAgICAgKiBjc3MvQ1NTUnVsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NSdWxlOjpkZXJlZik6CisgICAgICAgICogY3NzL0NTU1J1bGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1J1bGU6On5DU1NSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVSdWxlLmg6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oOgorCisgICAg
ICAgICAgICBEZXZpcnR1YWxpemUhCisKKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ltcG9ydFJ1bGU6OnJlcXVlc3RTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3Mv
Q1NTSW1wb3J0UnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVsZTo6SW1wb3J0
ZWRTdHlsZVNoZWV0Q2xpZW50OjpJbXBvcnRlZFN0eWxlU2hlZXRDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTSW1wb3J0UnVsZTo6SW1wb3J0ZWRTdHlsZVNoZWV0Q2xpZW50Ojp+SW1wb3J0
ZWRTdHlsZVNoZWV0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6Oklt
cG9ydGVkU3R5bGVTaGVldENsaWVudDo6c2V0Q1NTU3R5bGVTaGVldCk6CisKKyAgICAgICAgICAg
IEJyZWFrIG91dCB0aGUgaW5oZXJpdGFuY2UgZnJvbSBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50IGlu
dG8gYSBtZW1iZXIgdmFyaWFibGUKKyAgICAgICAgICAgIHRoYXQgc2ltcGx5IHJlZGlyZWN0cyB0
aGUgc2V0Q1NTU3R5bGVTaGVldCgpIGNhbGxiYWNrIHRvIHRoZSBDU1NJbXBvcnRSdWxlLgorCisy
MDExLTExLTAyICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKwogICAgICAgICBD
U1NTdHlsZVJ1bGU6IERldmlydHVhbGl6ZSBzZWxlY3RvclRleHQoKQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzNjQKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NoYXJzZXRSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2hhcnNldFJ1bGUuaAppbmRleCAwOTEwMzk5Li42ZWI3NGNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2hhcnNldFJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2hhcnNldFJ1bGUuaApAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTQ2hhcnNldFJ1bGUocGFyZW50LCBlbmNvZGluZykpOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgfkNTU0NoYXJzZXRSdWxlKCk7CisgICAgfkNTU0NoYXJzZXRSdWxlKCk7CiAK
ICAgICBjb25zdCBTdHJpbmcmIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsg
fQogICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9u
Q29kZSYpIHsgbV9lbmNvZGluZyA9IGVuY29kaW5nOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VSdWxlLmgKaW5kZXggM2QzNzBkYi4uYWQwNzZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVJ1bGUuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTRm9udEZhY2VSdWxlKHBhcmVudCkpOwogICAgIH0KIAotICAgIHZpcnR1YWwg
fkNTU0ZvbnRGYWNlUnVsZSgpOworICAgIH5DU1NGb250RmFjZVJ1bGUoKTsKIAogICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0
KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCmluZGV4IGI4MDFiMjEuLjVm
NTc5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKQEAgLTMzLDYgKzMzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRSdWxlKENT
U1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlh
TGlzdD4gbWVkaWEpCiAgICAgOiBDU1NSdWxlKHBhcmVudCwgQ1NTUnVsZTo6SU1QT1JUX1JVTEUp
CisgICAgLCBtX3N0eWxlU2hlZXRDbGllbnQodGhpcykKICAgICAsIG1fc3RySHJlZihocmVmKQog
ICAgICwgbV9sc3RNZWRpYShtZWRpYSkKICAgICAsIG1fY2FjaGVkU2hlZXQoMCkKQEAgLTUxLDcg
KzUyLDcgQEAgQ1NTSW1wb3J0UnVsZTo6fkNTU0ltcG9ydFJ1bGUoKQogICAgIGlmIChtX3N0eWxl
U2hlZXQpCiAgICAgICAgIG1fc3R5bGVTaGVldC0+c2V0UGFyZW50UnVsZSgwKTsKICAgICBpZiAo
bV9jYWNoZWRTaGVldCkKLSAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMp
OworICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQoJm1fc3R5bGVTaGVldENsaWVu
dCk7CiB9CiAKIHZvaWQgQ1NTSW1wb3J0UnVsZTo6c2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJp
bmcmIGhyZWYsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29u
c3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCkBAIC0xNDYsNyArMTQ3LDcgQEAgdm9pZCBD
U1NJbXBvcnRSdWxlOjpyZXF1ZXN0U3R5bGVTaGVldCgpCiAgICAgICAgIGlmIChwYXJlbnRTaGVl
dCAmJiBwYXJlbnRTaGVldC0+bG9hZENvbXBsZXRlZCgpICYmIHJvb3RTaGVldCA9PSBwYXJlbnRT
aGVldCkKICAgICAgICAgICAgIHBhcmVudFNoZWV0LT5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQo
KTsKICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgbV9jYWNoZWRTaGVldC0+YWRk
Q2xpZW50KHRoaXMpOworICAgICAgICBtX2NhY2hlZFNoZWV0LT5hZGRDbGllbnQoJm1fc3R5bGVT
aGVldENsaWVudCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1wb3J0UnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaAppbmRl
eCA1YjUyOGRiLi41MWRjMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1w
b3J0UnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVl
dDsKIGNsYXNzIE1lZGlhTGlzdDsKIAotY2xhc3MgQ1NTSW1wb3J0UnVsZSA6IHB1YmxpYyBDU1NS
dWxlLCBwcml2YXRlIENhY2hlZFN0eWxlU2hlZXRDbGllbnQgeworY2xhc3MgQ1NTSW1wb3J0UnVs
ZSA6IHB1YmxpYyBDU1NSdWxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NJbXBvcnRSdWxlPiBjcmVhdGUoQ1NTU3R5bGVT
aGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFMaXN0PiBt
ZWRpYSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENTU0ltcG9ydFJ1bGUocGFyZW50LCBocmVmLCBtZWRpYSkpOwogICAgIH0KIAotICAgIHZp
cnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKKyAgICB+Q1NTSW1wb3J0UnVsZSgpOwogCiAgICAgU3Ry
aW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX3N0ckhyZWY7IH0KICAgICBNZWRpYUxpc3QqIG1l
ZGlhKCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYS5nZXQoKTsgfQpAQCAtNTcsMTEgKzU3LDI0
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcXVlc3RTdHlsZVNoZWV0KCk7CiAKIHByaXZhdGU6Ci0g
ICAgQ1NTSW1wb3J0UnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJl
ZiwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+KTsKKyAgICBjbGFzcyBJbXBvcnRlZFN0eWxlU2hlZXRD
bGllbnQgOiBwdWJsaWMgQ2FjaGVkU3R5bGVTaGVldENsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICBJbXBvcnRlZFN0eWxlU2hlZXRDbGllbnQoQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKSA6
IG1fb3duZXJSdWxlKG93bmVyUnVsZSkgeyB9CisgICAgICAgIHZpcnR1YWwgfkltcG9ydGVkU3R5
bGVTaGVldENsaWVudCgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fb3duZXJSdWxlLT5zZXRDU1NTdHlsZVNoZWV0KGhyZWYsIGJhc2VVUkwsIGNo
YXJzZXQsIHNoZWV0KTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIENTU0ltcG9y
dFJ1bGUqIG1fb3duZXJSdWxlOworICAgIH07CisKKyAgICB2b2lkIHNldENTU1N0eWxlU2hlZXQo
Y29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKKyAgICBmcmllbmQgY2xhc3MgSW1w
b3J0ZWRTdHlsZVNoZWV0Q2xpZW50OwogCi0gICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVu
dAotICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwg
Y29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBDYWNoZWRD
U1NTdHlsZVNoZWV0Kik7CisgICAgQ1NTSW1wb3J0UnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQs
IGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+KTsKIAorICAgIEltcG9y
dGVkU3R5bGVTaGVldENsaWVudCBtX3N0eWxlU2hlZXRDbGllbnQ7CiAgICAgU3RyaW5nIG1fc3Ry
SHJlZjsKICAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1lZGlhOwogICAgIFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTTWVkaWFSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmgKaW5kZXgg
YzZiZmM3MC4uYTU5MTE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlh
UnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuaApAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU01l
ZGlhUnVsZShwYXJlbnQsIG1lZGlhLCBydWxlcykpOwogICAgIH0KLSAgICB2aXJ0dWFsIH5DU1NN
ZWRpYVJ1bGUoKTsKKyAgICB+Q1NTTWVkaWFSdWxlKCk7CiAKICAgICBNZWRpYUxpc3QqIG1lZGlh
KCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYS5nZXQoKTsgfQogICAgIENTU1J1bGVMaXN0KiBj
c3NSdWxlcygpIHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
Z2VSdWxlLmgKaW5kZXggNGMzMTM2ZC4uMGIyODc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhZ2VSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxl
LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU1BhZ2VSdWxlKHBhcmVudCwgc291cmNlTGluZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwg
fkNTU1BhZ2VSdWxlKCk7CisgICAgfkNTU1BhZ2VSdWxlKCk7CiAKICAgICBTdHJpbmcgcGFnZVNl
bGVjdG9yVGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UmVnaW9uU3R5bGVSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVnaW9uU3R5bGVSdWxl
LmgKaW5kZXggNmE2ZjEwMi4uMDVlODA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1JlZ2lvblN0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWdpb25T
dHlsZVJ1bGUuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTUmVnaW9uU3R5bGVSdWxlKHBhcmVudCwgc2VsZWN0b3JzLCBydWxlcykpOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgfkNTU1JlZ2lvblN0eWxlUnVsZSgpOworICAgIH5DU1NSZWdp
b25TdHlsZVJ1bGUoKTsKIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgY29uc3Qg
Q1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9y
TGlzdDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCmluZGV4IDVhY2NkODUuLjAwMjZkZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUnVsZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NQYWdlUnVs
ZS5oIgogI2luY2x1ZGUgIkNTU1JlZ2lvblN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxl
UnVsZS5oIgorI2luY2x1ZGUgIkNTU1Vua25vd25SdWxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC02Nyw0ICs2OCw0MyBAQCBTdHJpbmcgQ1NTUnVs
ZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCit2b2lkIENTU1J1
bGU6OmRlcmVmKCkKK3sKKyAgICBpZiAoIWRlcmVmQmFzZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIFVOS05PV05fUlVMRToKKyAgICAgICAgZGVs
ZXRlIHN0YXRpY19jYXN0PENTU1Vua25vd25SdWxlKj4odGhpcyk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNUWUxFX1JVTEU6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NTdHls
ZVJ1bGUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUEFHRV9SVUxFOgorICAg
ICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPih0aGlzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ0hBUlNFVF9SVUxFOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8
Q1NTQ2hhcnNldFJ1bGUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSU1QT1JU
X1JVTEU6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4odGhpcyk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1FRElBX1JVTEU6CisgICAgICAgIGRlbGV0ZSBz
dGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRk9OVF9GQUNFX1JVTEU6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NGb250RmFj
ZVJ1bGUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV0VCS0lUX0tFWUZSQU1F
U19SVUxFOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVfUlVM
RToKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHRo
aXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfUkVHSU9OX1NUWUxFX1JVTEU6
CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NSZWdpb25TdHlsZVJ1bGUqPih0aGlzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1J1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgKaW5kZXggNmJlODBkZS4uYmY0
ZmI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCkBAIC0zMyw3ICszMywxMSBAQCB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCiBjbGFzcyBDU1NSdWxlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTUnVs
ZT4gewogcHVibGljOgotICAgIHZpcnR1YWwgfkNTU1J1bGUoKSB7IH0KKyAgICB+Q1NTUnVsZSgp
IHsgfQorCisgICAgLy8gT3ZlcnJpZGUgUmVmQ291bnRlZCdzIGRlcmVmKCkgdG8gZW5zdXJlIG9w
ZXJhdG9yIGRlbGV0ZSBpcyBjYWxsZWQgb24KKyAgICAvLyB0aGUgYXBwcm9wcmlhdGUgc3ViY2xh
c3MgdHlwZS4KKyAgICB2b2lkIGRlcmVmKCk7CiAKICAgICBlbnVtIFR5cGUgewogICAgICAgICBV
TktOT1dOX1JVTEUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgKaW5kZXggNzBhZmNjYi4uNWE3
ZmI1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaApAQCAtMzgsNyArMzgsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlUnVsZShwYXJl
bnQsIHNvdXJjZUxpbmUpKTsKICAgICB9Ci0gICAgdmlydHVhbCB+Q1NTU3R5bGVSdWxlKCk7Cisg
ICAgfkNTU1N0eWxlUnVsZSgpOwogCiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCmluZGV4IGZlNjFmZTMuLjA1MmM4NmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKQEAgLTQ3LDcgKzQ3LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYktpdENTU0tleWZyYW1l
UnVsZShwYXJlbnQpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5XZWJLaXRDU1NLZXlmcmFtZVJ1
bGUoKTsKKyAgICB+V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKCk7CiAKICAgICBTdHJpbmcga2V5VGV4
dCgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBtX2tleTsgfQogICAgIHZvaWQgc2V0S2V5
VGV4dChjb25zdCBTdHJpbmcmIHMpICAgIHsgbV9rZXkgPSBzOyB9Cg==
</data>
<flag name="review"
          id="111686"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>