<?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>85825</bug_id>
          
          <creation_ts>2012-05-07 14:00:41 -0700</creation_ts>
          <short_desc>Shrink ElementAttributeData by factoring out Attr object count.</short_desc>
          <delta_ts>2012-06-08 08:54: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>DOM</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>InRadar</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>cmarcelo</cc>
    
    <cc>schenney</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>617915</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-07 14:00:41 -0700</bug_when>
    <thetext>Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617918</commentid>
    <comment_count>1</comment_count>
      <attachid>140584</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-07 14:03:20 -0700</bug_when>
    <thetext>Created attachment 140584
Pretentious patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617944</commentid>
    <comment_count>2</comment_count>
      <attachid>140584</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 14:23:13 -0700</bug_when>
    <thetext>Comment on attachment 140584
Pretentious patch

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

I think the storage should be bit more optimized for size. Looks great otherwise.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:36
&gt; +typedef HashMap&lt;QualifiedName, RefPtr&lt;Attr&gt; &gt; AttrMap;
&gt; +typedef HashMap&lt;Element*, OwnPtr&lt;AttrMap&gt; &gt; AttrMapMap;

I know Attrs are super rare and shouldn&apos;t really be used by anyone, but this still seems overly bloaty. HashMaps have high fixed initial cost (64 slots by default, lots of overhead). Since the name -&gt; Attr map is basically always tiny I think you should use Vector instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618468</commentid>
    <comment_count>3</comment_count>
      <attachid>140704</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-08 06:45:05 -0700</bug_when>
    <thetext>Created attachment 140704
Presumptuous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618507</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-08 07:16:45 -0700</bug_when>
    <thetext>Committed r116419: &lt;http://trac.webkit.org/changeset/116419&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618544</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-05-08 08:45:20 -0700</bug_when>
    <thetext>Committed r116427: &lt;http://trac.webkit.org/changeset/116427&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618545</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-05-08 08:45:44 -0700</bug_when>
    <thetext>Additional revision to fix Chrome ninja build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626284</commentid>
    <comment_count>7</comment_count>
      <attachid>140704</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-16 23:08:48 -0700</bug_when>
    <thetext>Comment on attachment 140704
Presumptuous patch

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

Nice patch! Just saw this in beverloo&apos;s weekly summary and had a few thoughts. Feel free to ignore them if you&apos;ve already investigated this. Although, I&apos;d be especially interested if you did find a perf issue that required the hasAttrList method. It would surprise me a little.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:47
&gt; +    if (!element-&gt;hasAttrList())

Do we even need the hasAttrList method? Could we just check attrListMap().contains? Are you worried that would be too slow? Could we try it with just using contains and see if it regresses any perf tests?

It&apos;s not a big deal, but it would remove a little bit of complexity from Node.h and save a bit from NodeFlags for something else, which is nice if we can get away with it.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:59
&gt; +    ASSERT(element);
&gt; +    if (element-&gt;hasAttrList()) {
&gt; +        ASSERT(attrListMap().contains(element));
&gt; +        return attrListMap().get(element);
&gt; +    }

Cleanup nit if you feel moved...this could just be:
if (AttrList* attrList = attrListForElement(element))
    return attrList;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627072</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-17 15:52:18 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 140704 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140704&amp;action=review
&gt; 
&gt; Nice patch! Just saw this in beverloo&apos;s weekly summary and had a few thoughts. Feel free to ignore them if you&apos;ve already investigated this. Although, I&apos;d be especially interested if you did find a perf issue that required the hasAttrList method. It would surprise me a little.
&gt; 
&gt; &gt; Source/WebCore/dom/ElementAttributeData.cpp:47
&gt; &gt; +    if (!element-&gt;hasAttrList())
&gt; 
&gt; Do we even need the hasAttrList method? Could we just check attrListMap().contains? Are you worried that would be too slow? Could we try it with just using contains and see if it regresses any perf tests?
&gt; 
&gt; It&apos;s not a big deal, but it would remove a little bit of complexity from Node.h and save a bit from NodeFlags for something else, which is nice if we can get away with it.

That would introduce a hash lookup on every Element teardown (assuming the element has or has had attributes.) This is measurable on tests like PerformanceTests/DOM/CloneNodes where a lot of elements are created and destroyed. Also, it&apos;s not really any different from e.g the HasRareData flag.

&gt; &gt; Source/WebCore/dom/ElementAttributeData.cpp:59
&gt; &gt; +    ASSERT(element);
&gt; &gt; +    if (element-&gt;hasAttrList()) {
&gt; &gt; +        ASSERT(attrListMap().contains(element));
&gt; &gt; +        return attrListMap().get(element);
&gt; &gt; +    }
&gt; 
&gt; Cleanup nit if you feel moved...this could just be:
&gt; if (AttrList* attrList = attrListForElement(element))
&gt;     return attrList;

Sure, I&apos;ll do that. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644702</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-06-08 08:54:01 -0700</bug_when>
    <thetext>&lt;rdar://problem/11625115&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140584</attachid>
            <date>2012-05-07 14:03:20 -0700</date>
            <delta_ts>2012-05-08 06:45:05 -0700</delta_ts>
            <desc>Pretentious patch</desc>
            <filename>bug-85825.diff</filename>
            <type>text/plain</type>
            <size>7781</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNjZmMGYyLi43NTY1OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDUtMDcgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFNocmluayBFbGVtZW50QXR0cmlidXRlRGF0YSBieSBmYWN0b3Jpbmcgb3V0IEF0dHIgb2Jq
ZWN0IGNvdW50LgorICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi84NTgyNT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdG9wIHRyYWNraW5nIHRo
ZSBudW1iZXIgb2YgQXR0ciBvYmplY3RzIHRoYXQgcG9pbnQgdG8gYSBnaXZlbiBFbGVtZW50IG9u
IHRoZQorICAgICAgICBFbGVtZW50IGl0c2VsZiBhbmQgbWFuYWdlIHRoaXMgYnkgaGF2aW5nIGEg
Z2xvYmFsIGhhc2htYXAgb2YgRWxlbWVudCA9PiBBdHRyTWFwLAorICAgICAgICB3aGVyZSBBdHRy
TWFwIGlzIGEgbWFwIG9mIGF0dHJpYnV0ZSBuYW1lcyB0byBBdHRyIG9iamVjdHMuCisKKyAgICAg
ICAgVGhpcyBzaHJpbmtzIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIGJ5IG9uZSBpbnRlZ2VyLCBlZmZl
Y3RpdmVseSByZWR1Y2luZyBtZW1vcnkKKyAgICAgICAgY29uc3VtcHRpb24gYnkgfjUzMGtCIHdo
ZW4gdmlld2luZyB0aGUgZnVsbCBIVE1MNSBzcGVjIGF0IDxodHRwOi8vd2hhdHdnLm9yZy9jPi4K
KworICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oOgorICAgICAgICAoRWxlbWVu
dEF0dHJpYnV0ZURhdGEpOgorCisgICAgICAgICAgICBSZW1vdmUgbV9hdHRyQ291bnQuLi4KKwor
ICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpoYXNBdHRyTWFw
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldEhhc0F0dHJNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6Y2xlYXJIYXNBdHRyTWFwKToKKworICAgICAgICAgICAgLi4ucmVwbGFjaW5n
IGl0IHdpdGggYSBOb2RlIGZsYWcgdGhhdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlJ3MgYW4gQXR0
cgorICAgICAgICAgICAgb2JqZWN0IG1hcCBmb3IgdGhpcyBOb2RlIChvbmx5IGFwcGxpZXMgdG8g
RWxlbWVudHMuKQorCisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmF0dHJNYXBNYXApOgorICAgICAgICAoV2ViQ29yZTo6YXR0ck1hcEZv
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQXR0ck1hcEZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlQXR0ck1hcEZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0dHJJZkV4aXN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6ZW5zdXJlQXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
QXR0cmlidXRlRGF0YTo6ZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KToKKworICAgICAgICAg
ICAgTWFwIEVsZW1lbnQgPT4gcGVyLUVsZW1lbnQgQXR0ciBtYXAgaW4gYSBnbG9iYWwgaGFzaC4K
KwogMjAxMi0wNS0wNyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwu
Y29tPgogCiAgICAgICAgIFtFRkxdIG1lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctc25h
cC10by1saW5lcy1ub3Qtc2V0Lmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IGNiODkxN2EuLmRkOGMzODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcApAQCAtMzIsNDMgKzMyLDc2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBIYXNoTWFwPHBhaXI8RWxlbWVudCosIFF1
YWxpZmllZE5hbWU+LCBSZWZQdHI8QXR0cj4gPiBBdHRyTWFwOwotc3RhdGljIEF0dHJNYXAmIGF0
dHJNYXAoKQordHlwZWRlZiBIYXNoTWFwPFF1YWxpZmllZE5hbWUsIFJlZlB0cjxBdHRyPiA+IEF0
dHJNYXA7Cit0eXBlZGVmIEhhc2hNYXA8RWxlbWVudCosIE93blB0cjxBdHRyTWFwPiA+IEF0dHJN
YXBNYXA7CisKK3N0YXRpYyBBdHRyTWFwTWFwJiBhdHRyTWFwTWFwKCkKIHsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0dHJNYXAsIG1hcCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
QXR0ck1hcE1hcCwgbWFwLCAoKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAorc3RhdGljIEF0dHJN
YXAqIGF0dHJNYXBGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVs
ZW1lbnQpOworICAgIGlmICghZWxlbWVudC0+aGFzQXR0ck1hcCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgQVNTRVJUKGF0dHJNYXBNYXAoKS5jb250YWlucyhlbGVtZW50KSk7CisgICAg
cmV0dXJuIGF0dHJNYXBNYXAoKS5nZXQoZWxlbWVudCk7Cit9CisKK3N0YXRpYyBBdHRyTWFwKiBl
bnN1cmVBdHRyTWFwRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChl
bGVtZW50KTsKKyAgICBpZiAoZWxlbWVudC0+aGFzQXR0ck1hcCgpKSB7CisgICAgICAgIEFTU0VS
VChhdHRyTWFwTWFwKCkuY29udGFpbnMoZWxlbWVudCkpOworICAgICAgICByZXR1cm4gYXR0ck1h
cE1hcCgpLmdldChlbGVtZW50KTsKKyAgICB9CisgICAgQVNTRVJUKCFhdHRyTWFwTWFwKCkuY29u
dGFpbnMoZWxlbWVudCkpOworICAgIGVsZW1lbnQtPnNldEhhc0F0dHJNYXAoKTsKKyAgICBBdHRy
TWFwTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYXR0ck1hcE1hcCgpLmFkZChlbGVtZW50LCBhZG9w
dFB0cihuZXcgQXR0ck1hcCkpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5n
ZXQoKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlQXR0ck1hcEZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgQVNTRVJUKGVsZW1lbnQtPmhh
c0F0dHJNYXAoKSk7CisgICAgQVNTRVJUKGF0dHJNYXBNYXAoKS5jb250YWlucyhlbGVtZW50KSk7
CisgICAgYXR0ck1hcE1hcCgpLnJlbW92ZShlbGVtZW50KTsKKyAgICBlbGVtZW50LT5jbGVhckhh
c0F0dHJNYXAoKTsKK30KKwogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6
YXR0cklmRXhpc3RzKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
CiB7Ci0gICAgaWYgKCFtX2F0dHJDb3VudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGF0dHJNYXAoKS5nZXQoc3RkOjptYWtlX3BhaXIoZWxlbWVudCwgbmFtZSkpLmdldCgpOworICAg
IGlmIChBdHRyTWFwKiBhdHRyTWFwID0gYXR0ck1hcEZvckVsZW1lbnQoZWxlbWVudCkpCisgICAg
ICAgIHJldHVybiBhdHRyTWFwLT5nZXQobmFtZSkuZ2V0KCk7CisgICAgcmV0dXJuIDA7CiB9CiAK
IFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUF0dHIoRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAgICBBdHRyTWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gYXR0ck1hcCgpLmFkZChzdGQ6Om1ha2VfcGFpcihlbGVtZW50LCBu
YW1lKSwgMCk7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgQXR0ck1hcCogYXR0
ck1hcCA9IGVuc3VyZUF0dHJNYXBGb3JFbGVtZW50KGVsZW1lbnQpOworICAgIEF0dHJNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBhdHRyTWFwLT5hZGQobmFtZSwgMCk7CisgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IEF0dHI6OmNyZWF0
ZShlbGVtZW50LCBuYW1lKTsKLSAgICAgICAgKyttX2F0dHJDb3VudDsKLSAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOwogfQogCiB2b2lkIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpzZXRBdHRyKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIEF0dHIqIGF0dHIpCiB7Ci0gICAgQVNTRVJUKCFhdHRyTWFwKCkuY29udGFpbnMoc3Rk
OjptYWtlX3BhaXIoZWxlbWVudCwgbmFtZSkpKTsKLSAgICBhdHRyTWFwKCkuYWRkKHN0ZDo6bWFr
ZV9wYWlyKGVsZW1lbnQsIG5hbWUpLCBhdHRyKTsKKyAgICBlbnN1cmVBdHRyTWFwRm9yRWxlbWVu
dChlbGVtZW50KS0+YWRkKG5hbWUsIGF0dHIpOwogICAgIGF0dHItPmF0dGFjaFRvRWxlbWVudChl
bGVtZW50KTsKLSAgICArK21fYXR0ckNvdW50OwogfQogCiB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpyZW1vdmVBdHRyKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpCiB7Ci0gICAgQVNTRVJUKGF0dHJNYXAoKS5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihlbGVt
ZW50LCBuYW1lKSkpOwotICAgIGF0dHJNYXAoKS5yZW1vdmUoc3RkOjptYWtlX3BhaXIoZWxlbWVu
dCwgbmFtZSkpOwotICAgIC0tbV9hdHRyQ291bnQ7CisgICAgQXR0ck1hcCogYXR0ck1hcCA9IGF0
dHJNYXBGb3JFbGVtZW50KGVsZW1lbnQpOworICAgIEFTU0VSVChhdHRyTWFwKTsKKyAgICBBU1NF
UlQoYXR0ck1hcC0+Y29udGFpbnMobmFtZSkpOworICAgIGF0dHJNYXAtPnJlbW92ZShuYW1lKTsK
KyAgICBpZiAoYXR0ck1hcC0+aXNFbXB0eSgpKQorICAgICAgICByZW1vdmVBdHRyTWFwRm9yRWxl
bWVudChlbGVtZW50KTsKIH0KIAogRWxlbWVudEF0dHJpYnV0ZURhdGE6On5FbGVtZW50QXR0cmli
dXRlRGF0YSgpCkBAIC0xNzAsMTMgKzIwMywxNiBAQCBib29sIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
Ojppc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIG90aGVyKSBjb25zdAog
CiB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW1fYXR0ckNvdW50KQorICAgIGlmICghZWxl
bWVudC0+aGFzQXR0ck1hcCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hdHRyaWJ1dGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChSZWZQ
dHI8QXR0cj4gYXR0ciA9IGF0dHJJZkV4aXN0cyhlbGVtZW50LCBtX2F0dHJpYnV0ZXNbaV0ubmFt
ZSgpKSkKICAgICAgICAgICAgIGF0dHItPmRldGFjaEZyb21FbGVtZW50V2l0aFZhbHVlKG1fYXR0
cmlidXRlc1tpXS52YWx1ZSgpKTsKICAgICB9CisKKyAgICAvLyBUaGUgbG9vcCBhYm92ZSBzaG91
bGQgaGF2ZSBjbGVhbmVkIG91dCB0aGlzIGVsZW1lbnQncyBBdHRyIG1hcC4KKyAgICBBU1NFUlQo
IWVsZW1lbnQtPmhhc0F0dHJNYXAoKSk7CiB9CiAKIHNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5oCmluZGV4IGE4NDliZmUuLjQxNmM3OWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCkBAIC0xMDYsNyArMTA2LDYgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgSFRNTENvbnN0cnVjdGlvblNpdGU7CiAKICAgICBFbGVtZW50
QXR0cmlidXRlRGF0YSgpCi0gICAgICAgIDogbV9hdHRyQ291bnQoMCkKICAgICB7CiAgICAgfQog
CkBAIC0xMjUsOCArMTI0LDYgQEAgcHJpdmF0ZToKICAgICBTcGFjZVNwbGl0U3RyaW5nIG1fY2xh
c3NOYW1lczsKICAgICBBdG9taWNTdHJpbmcgbV9pZEZvclN0eWxlUmVzb2x1dGlvbjsKICAgICBW
ZWN0b3I8QXR0cmlidXRlPiBtX2F0dHJpYnV0ZXM7Ci0KLSAgICB1bnNpZ25lZCBtX2F0dHJDb3Vu
dDsKIH07CiAKIGlubGluZSB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZW1vdmVBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CmluZGV4IGJkMjJjM2QuLjI0ZDkyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMjE2LDYgKzIxNiw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBpc1No
YWRvd1Jvb3QoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzU2hhZG93Um9vdEZsYWcpOyB9CiAg
ICAgYm9vbCBpbk5hbWVkRmxvdygpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSW5OYW1lZEZsb3dG
bGFnKTsgfQorICAgIGJvb2wgaGFzQXR0ck1hcCgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSGFz
QXR0ck1hcEZsYWcpOyB9CiAKICAgICBOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUoKSBjb25zdDsK
ICAgICAvLyBSZXR1cm5zIDAsIGEgU2hhZG93Um9vdCwgb3IgYSBsZWdhY3kgc2hhZG93IHJvb3Qu
CkBAIC0zMzAsNiArMzMxLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5OYW1lZEZsb3coKSB7
IHNldEZsYWcoSW5OYW1lZEZsb3dGbGFnKTsgfQogICAgIHZvaWQgY2xlYXJJbk5hbWVkRmxvdygp
IHsgY2xlYXJGbGFnKEluTmFtZWRGbG93RmxhZyk7IH0KIAorICAgIHZvaWQgc2V0SGFzQXR0ck1h
cCgpIHsgc2V0RmxhZyhIYXNBdHRyTWFwRmxhZyk7IH0KKyAgICB2b2lkIGNsZWFySGFzQXR0ck1h
cCgpIHsgY2xlYXJGbGFnKEhhc0F0dHJNYXBGbGFnKTsgfQorCiAgICAgZW51bSBTaG91bGRTZXRB
dHRhY2hlZCB7CiAgICAgICAgIFNldEF0dGFjaGVkLAogICAgICAgICBEb05vdFNldEF0dGFjaGVk
CkBAIC02ODcsMTAgKzY5MSwxMSBAQCBwcml2YXRlOgogI2Vsc2UKICAgICAgICAgRGVmYXVsdE5v
ZGVGbGFncyA9IElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFnIHwgSXNTdHlsZUF0dHJpYnV0
ZVZhbGlkRmxhZywKICNlbmRpZgotICAgICAgICBJbk5hbWVkRmxvd0ZsYWcgPSAxIDw8IDI5Cisg
ICAgICAgIEluTmFtZWRGbG93RmxhZyA9IDEgPDwgMjksCisgICAgICAgIEhhc0F0dHJNYXBGbGFn
ID0gMSA8PCAzMAogICAgIH07CiAKLSAgICAvLyAzIGJpdHMgcmVtYWluaW5nCisgICAgLy8gMiBi
aXRzIHJlbWFpbmluZwogCiAgICAgYm9vbCBnZXRGbGFnKE5vZGVGbGFncyBtYXNrKSBjb25zdCB7
IHJldHVybiBtX25vZGVGbGFncyAmIG1hc2s7IH0KICAgICB2b2lkIHNldEZsYWcoYm9vbCBmLCBO
b2RlRmxhZ3MgbWFzaykgY29uc3QgeyBtX25vZGVGbGFncyA9IChtX25vZGVGbGFncyAmIH5tYXNr
KSB8ICgtKGludDMyX3QpZiAmIG1hc2spOyB9IAo=
</data>
<flag name="review"
          id="146498"
          type_id="1"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140704</attachid>
            <date>2012-05-08 06:45:05 -0700</date>
            <delta_ts>2012-05-16 23:08:48 -0700</delta_ts>
            <desc>Presumptuous patch</desc>
            <filename>bug-85825.diff</filename>
            <type>text/plain</type>
            <size>8458</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNjZmMGYyLi41YmQ3MGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDUtMDggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFNocmluayBFbGVtZW50QXR0cmlidXRlRGF0YSBieSBmYWN0b3Jpbmcgb3V0IEF0dHIgb2Jq
ZWN0IGNvdW50LgorICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi84NTgyNT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdG9wIHRyYWNraW5nIHRo
ZSBudW1iZXIgb2YgQXR0ciBvYmplY3RzIHRoYXQgcG9pbnQgdG8gYSBnaXZlbiBFbGVtZW50IG9u
IHRoZQorICAgICAgICBFbGVtZW50IGl0c2VsZiBhbmQgbWFuYWdlIHRoaXMgYnkgaGF2aW5nIGEg
Z2xvYmFsIGhhc2htYXAgb2YgRWxlbWVudCA9PiBBdHRyTGlzdCwKKyAgICAgICAgd2hlcmUgQXR0
ckxpc3QgaXMgYSB2ZWN0b3Igb2YgKHBvaW50ZXJzIHRvKSB0aGUgYXNzb2NpYXRlZCBBdHRyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBzaHJpbmtzIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIGJ5IG9u
ZSBpbnRlZ2VyLCBlZmZlY3RpdmVseSByZWR1Y2luZyBtZW1vcnkKKyAgICAgICAgY29uc3VtcHRp
b24gYnkgfjUzMGtCIHdoZW4gdmlld2luZyB0aGUgZnVsbCBIVE1MNSBzcGVjIGF0IDxodHRwOi8v
d2hhdHdnLm9yZy9jPi4KKworICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oOgor
ICAgICAgICAoRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorCisgICAgICAgICAgICBSZW1vdmUgbV9h
dHRyQ291bnQuLi4KKworICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpoYXNBdHRyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRIYXNBdHRyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhckhhc0F0dHJMaXN0KToKKworICAgICAg
ICAgICAgLi4ucmVwbGFjaW5nIGl0IHdpdGggYSBOb2RlIGZsYWcgdGhhdCB0ZWxscyB1cyB3aGV0
aGVyIHRoZXJlJ3MgYW4gQXR0cgorICAgICAgICAgICAgb2JqZWN0IG1hcCBmb3IgdGhpcyBOb2Rl
IChvbmx5IGFwcGxpZXMgdG8gRWxlbWVudHMuKQorCisgICAgICAgICogZG9tL0VsZW1lbnRBdHRy
aWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmF0dHJMaXN0TWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OmF0dHJMaXN0Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVB
dHRyTGlzdEZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlQXR0ckxpc3RGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRySWZF
eGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnNldEF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmRldGFjaEF0dHJpYnV0ZXNGcm9t
RWxlbWVudCk6CisKKyAgICAgICAgICAgIE1hcCBFbGVtZW50ID0+IHBlci1FbGVtZW50IEF0dHJM
aXN0IGluIGEgZ2xvYmFsIGhhc2guCisKIDIwMTItMDUtMDcgIENocmlzdG9waGUgRHVtZXogIDxj
aHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBtZWRpYS90cmFjay90
cmFjay1jdWUtcmVuZGVyaW5nLXNuYXAtdG8tbGluZXMtbm90LXNldC5odG1sIGZhaWxzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRleCBjYjg5MTdhLi5j
ZTRjZjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAK
QEAgLTMyLDQzICszMiw5OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgSGFz
aE1hcDxwYWlyPEVsZW1lbnQqLCBRdWFsaWZpZWROYW1lPiwgUmVmUHRyPEF0dHI+ID4gQXR0ck1h
cDsKLXN0YXRpYyBBdHRyTWFwJiBhdHRyTWFwKCkKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxBdHRy
PiA+IEF0dHJMaXN0OwordHlwZWRlZiBIYXNoTWFwPEVsZW1lbnQqLCBPd25QdHI8QXR0ckxpc3Q+
ID4gQXR0ckxpc3RNYXA7CisKK3N0YXRpYyBBdHRyTGlzdE1hcCYgYXR0ckxpc3RNYXAoKQogewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXR0ck1hcCwgbWFwLCAoKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdHRyTGlzdE1hcCwgbWFwLCAoKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAor
c3RhdGljIEF0dHJMaXN0KiBhdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyTGlzdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGF0dHJMaXN0TWFwKCkuY29udGFpbnMo
ZWxlbWVudCkpOworICAgIHJldHVybiBhdHRyTGlzdE1hcCgpLmdldChlbGVtZW50KTsKK30KKwor
c3RhdGljIEF0dHJMaXN0KiBlbnN1cmVBdHRyTGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJMaXN0
KCkpIHsKKyAgICAgICAgQVNTRVJUKGF0dHJMaXN0TWFwKCkuY29udGFpbnMoZWxlbWVudCkpOwor
ICAgICAgICByZXR1cm4gYXR0ckxpc3RNYXAoKS5nZXQoZWxlbWVudCk7CisgICAgfQorICAgIEFT
U0VSVCghYXR0ckxpc3RNYXAoKS5jb250YWlucyhlbGVtZW50KSk7CisgICAgZWxlbWVudC0+c2V0
SGFzQXR0ckxpc3QoKTsKKyAgICBBdHRyTGlzdE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGF0dHJM
aXN0TWFwKCkuYWRkKGVsZW1lbnQsIGFkb3B0UHRyKG5ldyBBdHRyTGlzdCkpOworICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3Zl
QXR0ckxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1l
bnQpOworICAgIEFTU0VSVChlbGVtZW50LT5oYXNBdHRyTGlzdCgpKTsKKyAgICBBU1NFUlQoYXR0
ckxpc3RNYXAoKS5jb250YWlucyhlbGVtZW50KSk7CisgICAgYXR0ckxpc3RNYXAoKS5yZW1vdmUo
ZWxlbWVudCk7CisgICAgZWxlbWVudC0+Y2xlYXJIYXNBdHRyTGlzdCgpOworfQorCitzdGF0aWMg
QXR0ciogZmluZEF0dHJJbkxpc3QoQXR0ckxpc3QqIGF0dHJMaXN0LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyTGlzdC0+c2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGF0dHJMaXN0LT5hdChpKS0+cXVhbGlmaWVkTmFtZSgp
ID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gYXR0ckxpc3QtPmF0KGkpLmdldCgpOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKwogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50QXR0cmlidXRl
RGF0YTo6YXR0cklmRXhpc3RzKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpCiB7Ci0gICAgaWYgKCFtX2F0dHJDb3VudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGF0dHJNYXAoKS5nZXQoc3RkOjptYWtlX3BhaXIoZWxlbWVudCwgbmFtZSkpLmdldCgp
OworICAgIGlmIChBdHRyTGlzdCogYXR0ckxpc3QgPSBhdHRyTGlzdEZvckVsZW1lbnQoZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBmaW5kQXR0ckluTGlzdChhdHRyTGlzdCwgbmFtZSk7CisgICAg
cmV0dXJuIDA7CiB9CiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVu
c3VyZUF0dHIoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsK
LSAgICBBdHRyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYXR0ck1hcCgpLmFkZChzdGQ6Om1ha2Vf
cGFpcihlbGVtZW50LCBuYW1lKSwgMCk7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gQXR0cjo6Y3JlYXRlKGVsZW1lbnQsIG5h
bWUpOwotICAgICAgICArK21fYXR0ckNvdW50OworICAgIEF0dHJMaXN0KiBhdHRyTGlzdCA9IGVu
c3VyZUF0dHJMaXN0Rm9yRWxlbWVudChlbGVtZW50KTsKKyAgICBSZWZQdHI8QXR0cj4gYXR0ciA9
IGZpbmRBdHRySW5MaXN0KGF0dHJMaXN0LCBuYW1lKTsKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAg
ICAgYXR0ciA9IEF0dHI6OmNyZWF0ZShlbGVtZW50LCBuYW1lKTsKKyAgICAgICAgYXR0ckxpc3Qt
PmFwcGVuZChhdHRyKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
LmdldCgpOworICAgIHJldHVybiBhdHRyLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBFbGVtZW50QXR0
cmlidXRlRGF0YTo6c2V0QXR0cihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBBdHRyKiBhdHRyKQogewotICAgIEFTU0VSVCghYXR0ck1hcCgpLmNvbnRhaW5zKHN0
ZDo6bWFrZV9wYWlyKGVsZW1lbnQsIG5hbWUpKSk7Ci0gICAgYXR0ck1hcCgpLmFkZChzdGQ6Om1h
a2VfcGFpcihlbGVtZW50LCBuYW1lKSwgYXR0cik7CisgICAgQXR0ckxpc3QqIGF0dHJMaXN0ID0g
ZW5zdXJlQXR0ckxpc3RGb3JFbGVtZW50KGVsZW1lbnQpOworCisgICAgaWYgKGZpbmRBdHRySW5M
aXN0KGF0dHJMaXN0LCBuYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXR0ckxpc3QtPmFw
cGVuZChhdHRyKTsKICAgICBhdHRyLT5hdHRhY2hUb0VsZW1lbnQoZWxlbWVudCk7Ci0gICAgKytt
X2F0dHJDb3VudDsKIH0KIAogdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cihF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIEFTU0VS
VChhdHRyTWFwKCkuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoZWxlbWVudCwgbmFtZSkpKTsKLSAg
ICBhdHRyTWFwKCkucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGVsZW1lbnQsIG5hbWUpKTsKLSAgICAt
LW1fYXR0ckNvdW50OworICAgIEF0dHJMaXN0KiBhdHRyTGlzdCA9IGF0dHJMaXN0Rm9yRWxlbWVu
dChlbGVtZW50KTsKKyAgICBBU1NFUlQoYXR0ckxpc3QpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGF0dHJMaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYXR0ckxpc3Qt
PmF0KGkpLT5xdWFsaWZpZWROYW1lKCkgPT0gbmFtZSkgeworICAgICAgICAgICAgYXR0ckxpc3Qt
PnJlbW92ZShpKTsKKyAgICAgICAgICAgIGlmIChhdHRyTGlzdC0+aXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIHJlbW92ZUF0dHJMaXN0Rm9yRWxlbWVudChlbGVtZW50KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiBFbGVtZW50QXR0cmlidXRlRGF0YTo6fkVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKQEAgLTE3
MCwxMyArMjI2LDE2IEBAIGJvb2wgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmlzRXF1aXZhbGVudChj
b25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0CiAKIHZvaWQgRWxlbWVudEF0
dHJpYnV0ZURhdGE6OmRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudChFbGVtZW50KiBlbGVtZW50
KQogewotICAgIGlmICghbV9hdHRyQ291bnQpCisgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyTGlz
dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
dHRyaWJ1dGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8QXR0cj4gYXR0ciA9
IGF0dHJJZkV4aXN0cyhlbGVtZW50LCBtX2F0dHJpYnV0ZXNbaV0ubmFtZSgpKSkKICAgICAgICAg
ICAgIGF0dHItPmRldGFjaEZyb21FbGVtZW50V2l0aFZhbHVlKG1fYXR0cmlidXRlc1tpXS52YWx1
ZSgpKTsKICAgICB9CisKKyAgICAvLyBUaGUgbG9vcCBhYm92ZSBzaG91bGQgaGF2ZSBjbGVhbmVk
IG91dCB0aGlzIGVsZW1lbnQncyBBdHRyIG1hcC4KKyAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc0F0
dHJMaXN0KCkpOwogfQogCiBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0
ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRBdHRyaWJ1dGVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURh
dGEuaAppbmRleCBhODQ5YmZlLi40MTZjNzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuaApAQCAtMTA2LDcgKzEwNiw2IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOwogCiAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEo
KQotICAgICAgICA6IG1fYXR0ckNvdW50KDApCiAgICAgewogICAgIH0KIApAQCAtMTI1LDggKzEy
NCw2IEBAIHByaXZhdGU6CiAgICAgU3BhY2VTcGxpdFN0cmluZyBtX2NsYXNzTmFtZXM7CiAgICAg
QXRvbWljU3RyaW5nIG1faWRGb3JTdHlsZVJlc29sdXRpb247CiAgICAgVmVjdG9yPEF0dHJpYnV0
ZT4gbV9hdHRyaWJ1dGVzOwotCi0gICAgdW5zaWduZWQgbV9hdHRyQ291bnQ7CiB9OwogCiBpbmxp
bmUgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIEVsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBiZDIyYzNk
Li5iZDc4MjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIxNiw2ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0RvY3VtZW50Tm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTaGFkb3dSb290KCkgY29u
c3QgeyByZXR1cm4gZ2V0RmxhZyhJc1NoYWRvd1Jvb3RGbGFnKTsgfQogICAgIGJvb2wgaW5OYW1l
ZEZsb3coKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEluTmFtZWRGbG93RmxhZyk7IH0KKyAgICBi
b29sIGhhc0F0dHJMaXN0KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhIYXNBdHRyTGlzdEZsYWcp
OyB9CiAKICAgICBOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUoKSBjb25zdDsKICAgICAvLyBSZXR1
cm5zIDAsIGEgU2hhZG93Um9vdCwgb3IgYSBsZWdhY3kgc2hhZG93IHJvb3QuCkBAIC0zMzAsNiAr
MzMxLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5OYW1lZEZsb3coKSB7IHNldEZsYWcoSW5O
YW1lZEZsb3dGbGFnKTsgfQogICAgIHZvaWQgY2xlYXJJbk5hbWVkRmxvdygpIHsgY2xlYXJGbGFn
KEluTmFtZWRGbG93RmxhZyk7IH0KIAorICAgIHZvaWQgc2V0SGFzQXR0ckxpc3QoKSB7IHNldEZs
YWcoSGFzQXR0ckxpc3RGbGFnKTsgfQorICAgIHZvaWQgY2xlYXJIYXNBdHRyTGlzdCgpIHsgY2xl
YXJGbGFnKEhhc0F0dHJMaXN0RmxhZyk7IH0KKwogICAgIGVudW0gU2hvdWxkU2V0QXR0YWNoZWQg
ewogICAgICAgICBTZXRBdHRhY2hlZCwKICAgICAgICAgRG9Ob3RTZXRBdHRhY2hlZApAQCAtNjg3
LDEwICs2OTEsMTEgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgICAgIERlZmF1bHROb2RlRmxhZ3Mg
PSBJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyB8IElzU3R5bGVBdHRyaWJ1dGVWYWxpZEZs
YWcsCiAjZW5kaWYKLSAgICAgICAgSW5OYW1lZEZsb3dGbGFnID0gMSA8PCAyOQorICAgICAgICBJ
bk5hbWVkRmxvd0ZsYWcgPSAxIDw8IDI5LAorICAgICAgICBIYXNBdHRyTGlzdEZsYWcgPSAxIDw8
IDMwCiAgICAgfTsKIAotICAgIC8vIDMgYml0cyByZW1haW5pbmcKKyAgICAvLyAyIGJpdHMgcmVt
YWluaW5nCiAKICAgICBib29sIGdldEZsYWcoTm9kZUZsYWdzIG1hc2spIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZUZsYWdzICYgbWFzazsgfQogICAgIHZvaWQgc2V0RmxhZyhib29sIGYsIE5vZGVGbGFn
cyBtYXNrKSBjb25zdCB7IG1fbm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYgfm1hc2spIHwgKC0o
aW50MzJfdClmICYgbWFzayk7IH0gCg==
</data>
<flag name="review"
          id="146661"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>