<?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>51426</bug_id>
          
          <creation_ts>2010-12-21 14:58:53 -0800</creation_ts>
          <short_desc>CharacterData needs cleanup</short_desc>
          <delta_ts>2010-12-21 17:59:24 -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>DOM</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>51389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325217</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 14:58:53 -0800</bug_when>
    <thetext>CharacterData.cpp duplicates the following code over and over:

    if ((!renderer() || !rendererIsNeeded(renderer()-&gt;style())) &amp;&amp; attached()) {
        detach();
        attach();
    } else if (renderer())
        toRenderText(renderer())-&gt;setTextWithOffset(m_data, x, y);

        dispatchModifiedEvent(oldStr.get());

where x and y are some variable / constant.  We should extract it into a method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325224</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-21 15:09:22 -0800</bug_when>
    <thetext>Bleh, the whole manual re-attach is lame anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325226</commentid>
    <comment_count>2</comment_count>
      <attachid>77155</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 15:18:09 -0800</bug_when>
    <thetext>Created attachment 77155
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325234</commentid>
    <comment_count>3</comment_count>
      <attachid>77155</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-21 15:29:41 -0800</bug_when>
    <thetext>Comment on attachment 77155
cleanup

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

&gt; WebCore/ChangeLog:8
&gt; +        Extracted CharacterData::modified.

The new function is so abstract that we need to do our best to give it a good name and good argument names. I think modified is a bit vague. Perhaps we can rename the function after what it does rather than what happened? The two things it does are to update the renderer and send DOM events. I guess you’re going to change it to do more in the future.

It’s not clear what the offset and the length are. If you gave the arguments good enough names then they might be clear. I think they are the offset and length of new data within the character data object, but I’m not even sure!

&gt; WebCore/dom/CharacterData.cpp:40
&gt;      RefPtr&lt;StringImpl&gt; oldStr = m_data;

Given the other naming in this patch, it might read nicer if it was oldData instead of oldStr. Same below.

&gt; WebCore/dom/CharacterData.cpp:43
&gt; +    modified(0, oldLength, oldStr);

Might use oldStr.release() instead of oldStr for slightly better performance. Same below.

&gt; WebCore/dom/CharacterData.cpp:78
&gt; +    String newStr = m_data;
&gt; +    newStr.append(data);
&gt; +
&gt; +    RefPtr&lt;StringImpl&gt; oldStr = m_data;
&gt; +    m_data = newStr.impl();

There must be a clearer way to write this. How about:

    RefPtr&lt;StringImpl&gt; oldData = m_data;
    m_data = String(oldData.get()).append(data).impl();

The repeated use of the term “data” might be confusing, but I think that reads much more clearly in that order and without the local variables.

&gt; WebCore/dom/CharacterData.cpp:164
&gt; +void CharacterData::modified(int offset, int len, PassRefPtr&lt;StringImpl&gt; oldData)

I think unsigned might be better than int for these arguments. But maybe we already use int for this. Too bad.

Could you use the word length instead of the abbreviation len? And maybe names that make it clearer what the offset and length are the offset and length of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325239</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 15:37:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; The new function is so abstract that we need to do our best to give it a good name and good argument names. I think modified is a bit vague. Perhaps we can rename the function after what it does rather than what happened? The two things it does are to update the renderer and send DOM events. I guess you’re going to change it to do more in the future.

How about updateRendererAndDispatchModifiedEventIfPossible?  Or simply notifyModified?

&gt; It’s not clear what the offset and the length are. If you gave the arguments good enough names then they might be clear. I think they are the offset and length of new data within the character data object, but I’m not even sure!

They&apos;re offset &amp; length of old data, which is quite misleading.  I&apos;m not happy about the argument names but I couldn&apos;t come up with anything better.

&gt; &gt; WebCore/dom/CharacterData.cpp:40
&gt; &gt;      RefPtr&lt;StringImpl&gt; oldStr = m_data;
&gt; 
&gt; Given the other naming in this patch, it might read nicer if it was oldData instead of oldStr. Same below.

Will do.

&gt; &gt; WebCore/dom/CharacterData.cpp:43
&gt; &gt; +    modified(0, oldLength, oldStr);
&gt; 
&gt; Might use oldStr.release() instead of oldStr for slightly better performance. Same below.

Will do.

&gt; &gt; WebCore/dom/CharacterData.cpp:78
&gt; &gt; +    String newStr = m_data;
&gt; &gt; +    newStr.append(data);
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;StringImpl&gt; oldStr = m_data;
&gt; &gt; +    m_data = newStr.impl();
&gt; 
&gt; There must be a clearer way to write this. How about:
&gt; 
&gt;     RefPtr&lt;StringImpl&gt; oldData = m_data;
&gt;     m_data = String(oldData.get()).append(data).impl();
&gt; 
&gt; The repeated use of the term “data” might be confusing, but I think that reads much more clearly in that order and without the local variables.

Ah! that&apos;s much nicer will do.

&gt; &gt; WebCore/dom/CharacterData.cpp:164
&gt; &gt; +void CharacterData::modified(int offset, int len, PassRefPtr&lt;StringImpl&gt; oldData)
&gt; 
&gt; I think unsigned might be better than int for these arguments. But maybe we already use int for this. Too bad.

Oops. That&apos;s just my being careless.  Will fix.

&gt; Could you use the word length instead of the abbreviation len? And maybe names that make it clearer what the offset and length are the offset and length of.

How about modifiedOffset and modifiedLength?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325245</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 15:48:34 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; There must be a clearer way to write this. How about:
&gt; &gt; 
&gt; &gt;     RefPtr&lt;StringImpl&gt; oldData = m_data;
&gt; &gt;     m_data = String(oldData.get()).append(data).impl();
&gt; &gt; 
&gt; &gt; The repeated use of the term “data” might be confusing, but I think that reads much more clearly in that order and without the local variables.
&gt; 
&gt; Ah! that&apos;s much nicer will do.

Except that we can&apos;t do it because append()&apos;s return type is void.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325246</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-21 15:48:58 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; The new function is so abstract that we need to do our best to give it a good name and good argument names. I think modified is a bit vague. Perhaps we can rename the function after what it does rather than what happened? The two things it does are to update the renderer and send DOM events. I guess you’re going to change it to do more in the future.
&gt; 
&gt; How about updateRendererAndDispatchModifiedEventIfPossible?  Or simply notifyModified?

Both good tries, but neither rings the “perfect name” bell. Maybe respondToModification?

&gt; &gt; Could you use the word length instead of the abbreviation len? And maybe names that make it clearer what the offset and length are the offset and length of.
&gt; 
&gt; How about modifiedOffset and modifiedLength?

Well, it’s not a “modified offset” so I don’t think that is quite right. Maybe “modificationOffset” and “modificationLength”, with a comment somewhere that says that the offsets are the location within the old string that was modified.

But I think “modificationLength” might need a different name, because it’s the length of the old text, not the length of new existing text. Maybe “replacedCharactersLength”?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325247</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-21 15:50:46 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; &gt; There must be a clearer way to write this. How about:
&gt; &gt; &gt; 
&gt; &gt; &gt;     RefPtr&lt;StringImpl&gt; oldData = m_data;
&gt; &gt; &gt;     m_data = String(oldData.get()).append(data).impl();
&gt; &gt; &gt; 
&gt; &gt; &gt; The repeated use of the term “data” might be confusing, but I think that reads much more clearly in that order and without the local variables.
&gt; &gt; 
&gt; &gt; Ah! that&apos;s much nicer will do.
&gt; 
&gt; Except that we can&apos;t do it because append()&apos;s return type is void.

OK, then it can still be reordered at least, like this:

    RefPtr&lt;StringImpl&gt; oldData = m_data;

    String combinedData(oldData.get());
    combinedData.append(data);
    m_data = combinedData.impl();

It’s clearer if saving the old data is done first.

The reason there is no good API for append is that String::append is super-slow and deprecated. Otherwise, I’d suggest we add an append to StringImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325249</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 15:58:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; OK, then it can still be reordered at least, like this:
&gt; 
&gt;     RefPtr&lt;StringImpl&gt; oldData = m_data;
&gt; 
&gt;     String combinedData(oldData.get());
&gt;     combinedData.append(data);
&gt;     m_data = combinedData.impl();
&gt; 
&gt; It’s clearer if saving the old data is done first.
&gt; 
&gt; The reason there is no good API for append is that String::append is super-slow and deprecated. Otherwise, I’d suggest we add an append to StringImpl.

I just realized that we can put all of this into modified if we passed newStr instead of oldStr.  I&apos;ll submit a new patch in half an hour.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325261</commentid>
    <comment_count>9</comment_count>
      <attachid>77164</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 16:32:41 -0800</bug_when>
    <thetext>Created attachment 77164
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325262</commentid>
    <comment_count>10</comment_count>
      <attachid>77164</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 16:34:05 -0800</bug_when>
    <thetext>Comment on attachment 77164
cleanup

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

&gt; WebCore/dom/CharacterData.cpp:41
&gt; +    setDataAndUpdate(dataImpl, 0, oldLength);

I&apos;m not happy about the fact we have setData and setDataAndUpdate but I couldn&apos;t come up with a better name.  I also thought of updateData and setDataAndNotify but neither sounded right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325296</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 17:37:22 -0800</bug_when>
    <thetext>Thanks for the review, Darin.  Landing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325312</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-21 17:59:24 -0800</bug_when>
    <thetext>Committed r74444: &lt;http://trac.webkit.org/changeset/74444&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77155</attachid>
            <date>2010-12-21 15:18:09 -0800</date>
            <delta_ts>2010-12-21 16:32:37 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-51426-20101221151808.patch</filename>
            <type>text/plain</type>
            <size>6889</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTdjNGU3MzQ1YzJlMDU2ODEyMzNjMThlNTJlNWUxNTBiYzZjMDk0Ny4uYjZkZjFhY2IyYjNiM2Zl
ZGI1ZmViNjU4NzAyZTBmZDEyMDc5MGM3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0xMi0yMSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDaGFyYWN0ZXJEYXRhIG5lZWRzIGNsZWFudXAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDI2CisKKyAgICAg
ICAgRXh0cmFjdGVkIENoYXJhY3RlckRhdGE6Om1vZGlmaWVkLgorCisgICAgICAgICogZG9tL0No
YXJhY3RlckRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0
YSk6IENhbGxzIG1vZGlmaWVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6cGFy
c2VyQXBwZW5kRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6
YXBwZW5kRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6aW5z
ZXJ0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGVsZXRl
RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6cmVwbGFjZURh
dGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6Om1vZGlmaWVkKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVk
RXZlbnQpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6CisKIDIwMTAtMTItMTcgIENh
cm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAg
Yi9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAppbmRleCAwY2IyODQ3MmJkMjJmMWJhMDZi
ZDE4YmNkNjU4NzJiNWYzMzY4MjE1Li4xYWI0Y2NiMWVjMmFhOGM0NWFmMjlhYWI1M2JkOGY3N2E0
OWVlY2YyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtNDAsMTMgKzQwLDcgQEAgdm9pZCBDaGFy
YWN0ZXJEYXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9uQ29kZSYpCiAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKICAgICBtX2RhdGEgPSBkYXRh
SW1wbDsKIAotICAgIGlmICgoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVySXNOZWVkZWQocmVuZGVy
ZXIoKS0+c3R5bGUoKSkpICYmIGF0dGFjaGVkKCkpIHsKLSAgICAgICAgZGV0YWNoKCk7Ci0gICAg
ICAgIGF0dGFjaCgpOwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5k
ZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEsIDAsIG9sZExlbmd0
aCk7Ci0KLSAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKKyAgICBtb2Rp
ZmllZCgwLCBvbGRMZW5ndGgsIG9sZFN0cik7CiAKICAgICBkb2N1bWVudCgpLT50ZXh0UmVtb3Zl
ZCh0aGlzLCAwLCBvbGRMZW5ndGgpOwogfQpAQCAtNjAsMjYgKzU0LDE1IEBAIFN0cmluZyBDaGFy
YWN0ZXJEYXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQs
IEV4Y2VwdGlvbkNvCiAgICAgcmV0dXJuIG1fZGF0YS0+c3Vic3RyaW5nKG9mZnNldCwgY291bnQp
OwogfQogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IENoYXJhY3RlckRhdGE6OmFwcGVuZERhdGFD
b21tb24oY29uc3QgU3RyaW5nJiBkYXRhKQordm9pZCBDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBl
bmREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRh
OwogICAgIG5ld1N0ci5hcHBlbmQoZGF0YSk7CiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xk
U3RyID0gbV9kYXRhOworICAgIGludCBvbGRMZW5ndGggPSBtX2RhdGEtPmxlbmd0aCgpOwogICAg
IG1fZGF0YSA9IG5ld1N0ci5pbXBsKCk7CiAKLSAgICBpZiAoKCFyZW5kZXJlcigpIHx8ICFyZW5k
ZXJlcklzTmVlZGVkKHJlbmRlcmVyKCktPnN0eWxlKCkpKSAmJiBhdHRhY2hlZCgpKSB7Ci0gICAg
ICAgIGRldGFjaCgpOwotICAgICAgICBhdHRhY2goKTsKLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVy
KCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQo
bV9kYXRhLCBvbGRTdHItPmxlbmd0aCgpLCAwKTsKLQotICAgIHJldHVybiBvbGRTdHIucmVsZWFz
ZSgpOwotfQotCi12b2lkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBkYXRhKQotewotICAgIGFwcGVuZERhdGFDb21tb24oZGF0YSk7CisgICAgbW9kaWZpZWQo
b2xkTGVuZ3RoLCAwLCAwKTsKICAgICAvLyBXZSBkb24ndCBjYWxsIGRpc3BhdGNoTW9kaWZpZWRF
dmVudCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUKICAgICAvLyBwYXJzZXIgdG8gZGlz
cGF0Y2ggRE9NIG11dGF0aW9uIGV2ZW50cy4KICAgICBpZiAocGFyZW50Tm9kZSgpKQpAQCAtODgs
OCArNzEsMTMgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhKGNvbnN0IFN0
cmluZyYgZGF0YSkKIAogdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRhKGNvbnN0IFN0cmlu
ZyYgZGF0YSwgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0
ciA9IGFwcGVuZERhdGFDb21tb24oZGF0YSk7Ci0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9s
ZFN0ci5nZXQoKSk7CisgICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKKyAgICBuZXdTdHIuYXBw
ZW5kKGRhdGEpOworCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKKyAg
ICBtX2RhdGEgPSBuZXdTdHIuaW1wbCgpOworCisgICAgbW9kaWZpZWQob2xkU3RyLT5sZW5ndGgo
KSwgMCwgb2xkU3RyKTsKIH0KIAogdm9pZCBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTEw
NCwxNCArOTIsOCBAQCB2b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERhdGEodW5zaWduZWQgb2Zm
c2V0LCBjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZAogICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBvbGRTdHIgPSBtX2RhdGE7CiAgICAgbV9kYXRhID0gbmV3U3RyLmltcGwoKTsKIAotICAg
IGlmICgoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVySXNOZWVkZWQocmVuZGVyZXIoKS0+c3R5bGUo
KSkpICYmIGF0dGFjaGVkKCkpIHsKLSAgICAgICAgZGV0YWNoKCk7Ci0gICAgICAgIGF0dGFjaCgp
OwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRl
cmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEsIG9mZnNldCwgMCk7CisgICAgbW9kaWZp
ZWQob2Zmc2V0LCAwLCBvbGRTdHIpOwogCi0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0
ci5nZXQoKSk7Ci0gICAgCiAgICAgZG9jdW1lbnQoKS0+dGV4dEluc2VydGVkKHRoaXMsIG9mZnNl
dCwgZGF0YS5sZW5ndGgoKSk7CiB9CiAKQEAgLTEzMiwxNCArMTE0LDggQEAgdm9pZCBDaGFyYWN0
ZXJEYXRhOjpkZWxldGVEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIEV4Y2Vw
dGlvbkNvZGUmIGUKIAogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBtX2RhdGE7CiAg
ICAgbV9kYXRhID0gbmV3U3RyLmltcGwoKTsKLSAgICAKLSAgICBpZiAoKCFyZW5kZXJlcigpIHx8
ICFyZW5kZXJlcklzTmVlZGVkKHJlbmRlcmVyKCktPnN0eWxlKCkpKSAmJiBhdHRhY2hlZCgpKSB7
Ci0gICAgICAgIGRldGFjaCgpOwotICAgICAgICBhdHRhY2goKTsKLSAgICB9IGVsc2UgaWYgKHJl
bmRlcmVyKCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhP
ZmZzZXQobV9kYXRhLCBvZmZzZXQsIGNvdW50KTsKIAotICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVu
dChvbGRTdHIuZ2V0KCkpOworICAgIG1vZGlmaWVkKG9mZnNldCwgY291bnQsIG9sZFN0cik7CiAK
ICAgICBkb2N1bWVudCgpLT50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIHJlYWxDb3VudCk7CiB9
CkBAIC0xNjMsMTQgKzEzOSw4IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiBkCiAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKICAgICBtX2RhdGEgPSBuZXdTdHIuaW1wbCgp
OwogCi0gICAgaWYgKCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigp
LT5zdHlsZSgpKSkgJiYgYXR0YWNoZWQoKSkgewotICAgICAgICBkZXRhY2goKTsKLSAgICAgICAg
YXR0YWNoKCk7Ci0gICAgfSBlbHNlIGlmIChyZW5kZXJlcigpKQotICAgICAgICB0b1JlbmRlclRl
eHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zmc2V0LCBjb3VudCk7
Ci0gICAgCi0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0ci5nZXQoKSk7Ci0gICAgCisg
ICAgbW9kaWZpZWQob2Zmc2V0LCBjb3VudCwgb2xkU3RyKTsKKwogICAgIC8vIHVwZGF0ZSB0aGUg
bWFya2VycyBmb3Igc3BlbGwgY2hlY2tpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcKICAgICBkb2N1
bWVudCgpLT50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIHJlYWxDb3VudCk7CiAgICAgZG9jdW1l
bnQoKS0+dGV4dEluc2VydGVkKHRoaXMsIG9mZnNldCwgZGF0YS5sZW5ndGgoKSk7CkBAIC0xOTEs
MTIgKzE2MSwyNCBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJp
bmcmIG5vZGVWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgc2V0RGF0YShub2RlVmFsdWUs
IGVjKTsKIH0KIAotdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoU3Ry
aW5nSW1wbCogcHJldlZhbHVlKQordm9pZCBDaGFyYWN0ZXJEYXRhOjptb2RpZmllZChpbnQgb2Zm
c2V0LCBpbnQgbGVuLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9sZERhdGEpCit7CisgICAgaWYg
KCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5zdHlsZSgpKSkg
JiYgYXR0YWNoZWQoKSkgeworICAgICAgICBkZXRhY2goKTsKKyAgICAgICAgYXR0YWNoKCk7Cisg
ICAgfSBlbHNlIGlmIChyZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIo
KSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zmc2V0LCBsZW4pOworCisgICAgaWYgKG9s
ZERhdGEpCisgICAgICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGREYXRhLmdldCgpKTsKK30K
KyAgICAKK3ZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0lt
cGwqIG9sZERhdGEpCiB7CiAgICAgaWYgKHBhcmVudE5vZGUoKSkKICAgICAgICAgcGFyZW50Tm9k
ZSgpLT5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICBpZiAoZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJU
eXBlKERvY3VtZW50OjpET01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElTVEVORVIpKQotICAgICAg
ICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ2hh
cmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRydWUsIDAsIHByZXZWYWx1ZSwgbV9kYXRhKSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5E
T01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgdHJ1ZSwgMCwgb2xkRGF0YSwgbV9kYXRhKSk7
CiAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQo
ZG9jdW1lbnQoKSwgdGhpcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRh
LmggYi9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKaW5kZXggOTRlODEyYjYyOTYyNjdlYjBi
MDdiZDdhM2U4OTU3ZTQ2NTI2MWQ0My4uMmI3ZTgxZTY4YzJlYWE2MjQ1MDcyN2Q1NzU1NTk2N2Jl
Mzk5ZGRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCisrKyBiL1dl
YkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaApAQCAtNjQsOSArNjQsOCBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgaW50IG1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdDsKLQorICAgIHZvaWQgbW9kaWZpZWQo
aW50IG9mZnNldCwgaW50IGxlbiwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvbGREYXRhKTsKICAg
ICB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24odW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhcHBlbmREYXRhQ29tbW9uKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fZGF0YTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77164</attachid>
            <date>2010-12-21 16:32:41 -0800</date>
            <delta_ts>2010-12-21 17:10:42 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-51426-20101221163240.patch</filename>
            <type>text/plain</type>
            <size>7838</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTdjNGU3MzQ1YzJlMDU2ODEyMzNjMThlNTJlNWUxNTBiYzZjMDk0Ny4uODc4ODMyMzEzNTY5NDVh
MzlhMDVhZjNjZTYwMWJjNGQ5Y2VjNTcxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMi0yMSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDaGFyYWN0ZXJEYXRhIG5lZWRzIGNsZWFudXAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDI2CisKKyAgICAg
ICAgRXh0cmFjdGVkIENoYXJhY3RlckRhdGE6OnNldERhdGFBbmROb3RpZnkgYW5kIENoYXJhY3Rl
ckRhdGE6OnVwZGF0ZVJlbmRlcmVyLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YSk6IENhbGxzIHNldERh
dGFBbmRVcGRhdGUuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBl
bmREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjphcHBlbmRE
YXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkZWxldGVEYXRhKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpyZXBsYWNlRGF0YSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZE5vdGlmeSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6dXBkYXRlUmVuZGVyZXIp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZp
ZWRFdmVudCk6IFJlbmFtZWQgcHJldlZhbHVlIHRvIG9sZERhdGEuCisgICAgICAgICogZG9tL0No
YXJhY3RlckRhdGEuaDoKKwogMjAxMC0xMi0xNyAgQ2Fyb2wgU3phYm8gIDxjYXJvbC5zemFib0Bu
b2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRh
dGEuY3BwCmluZGV4IDBjYjI4NDcyYmQyMmYxYmEwNmJkMThiY2Q2NTg3MmI1ZjMzNjgyMTUuLjMz
NzJjNGMzNDVjZGI0ODJjZDczOTA0ZjkzNTg4MmYxODdkYmVhNjcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEu
Y3BwCkBAIC0zNiwxOCArMzYsOSBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3Qg
U3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJikKICAgICBpZiAoZXF1YWwobV9kYXRhLmdldCgp
LCBkYXRhSW1wbCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBvbGRMZW5ndGggPSBsZW5n
dGgoKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xkU3RyID0gbV9kYXRhOwotICAgIG1fZGF0
YSA9IGRhdGFJbXBsOwotCi0gICAgaWYgKCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRl
ZChyZW5kZXJlcigpLT5zdHlsZSgpKSkgJiYgYXR0YWNoZWQoKSkgewotICAgICAgICBkZXRhY2go
KTsKLSAgICAgICAgYXR0YWNoKCk7Ci0gICAgfSBlbHNlIGlmIChyZW5kZXJlcigpKQotICAgICAg
ICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgMCwg
b2xkTGVuZ3RoKTsKLQotICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOwor
ICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCisgICAgc2V0RGF0YUFuZFVwZGF0
ZShkYXRhSW1wbCwgMCwgb2xkTGVuZ3RoKTsKICAgICBkb2N1bWVudCgpLT50ZXh0UmVtb3ZlZCh0
aGlzLCAwLCBvbGRMZW5ndGgpOwogfQogCkBAIC02MCwyNiArNTEsMTUgQEAgU3RyaW5nIENoYXJh
Y3RlckRhdGE6OnN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwg
RXhjZXB0aW9uQ28KICAgICByZXR1cm4gbV9kYXRhLT5zdWJzdHJpbmcob2Zmc2V0LCBjb3VudCk7
CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YUNv
bW1vbihjb25zdCBTdHJpbmcmIGRhdGEpCit2b2lkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVu
ZERhdGEoY29uc3QgU3RyaW5nJiBkYXRhKQogewogICAgIFN0cmluZyBuZXdTdHIgPSBtX2RhdGE7
CiAgICAgbmV3U3RyLmFwcGVuZChkYXRhKTsKIAotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRT
dHIgPSBtX2RhdGE7CisgICAgaW50IG9sZExlbmd0aCA9IG1fZGF0YS0+bGVuZ3RoKCk7CiAgICAg
bV9kYXRhID0gbmV3U3RyLmltcGwoKTsKIAotICAgIGlmICgoIXJlbmRlcmVyKCkgfHwgIXJlbmRl
cmVySXNOZWVkZWQocmVuZGVyZXIoKS0+c3R5bGUoKSkpICYmIGF0dGFjaGVkKCkpIHsKLSAgICAg
ICAgZGV0YWNoKCk7Ci0gICAgICAgIGF0dGFjaCgpOwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXIo
KSkKLSAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldCht
X2RhdGEsIG9sZFN0ci0+bGVuZ3RoKCksIDApOwotCi0gICAgcmV0dXJuIG9sZFN0ci5yZWxlYXNl
KCk7Ci19Ci0KLXZvaWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBTdHJp
bmcmIGRhdGEpCi17Ci0gICAgYXBwZW5kRGF0YUNvbW1vbihkYXRhKTsKKyAgICB1cGRhdGVSZW5k
ZXJlcihvbGRMZW5ndGgsIDApOwogICAgIC8vIFdlIGRvbid0IGNhbGwgZGlzcGF0Y2hNb2RpZmll
ZEV2ZW50IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZQogICAgIC8vIHBhcnNlciB0byBk
aXNwYXRjaCBET00gbXV0YXRpb24gZXZlbnRzLgogICAgIGlmIChwYXJlbnROb2RlKCkpCkBAIC04
OCw4ICs2OCwxMiBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEoY29uc3Qg
U3RyaW5nJiBkYXRhKQogCiB2b2lkIENoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJikKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xk
U3RyID0gYXBwZW5kRGF0YUNvbW1vbihkYXRhKTsKLSAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQo
b2xkU3RyLmdldCgpKTsKKyAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOworICAgIG5ld1N0ci5h
cHBlbmQoZGF0YSk7CisKKyAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ci5pbXBsKCksIG1fZGF0
YS0+bGVuZ3RoKCksIDApOworCisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjYWxsIHRleHRJbnNl
cnRlZCBoZXJlPwogfQogCiB2b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERhdGEodW5zaWduZWQg
b2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTAxLDE3
ICs4NSw4IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQs
IGNvbnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9uQ29kCiAgICAgU3RyaW5nIG5ld1N0ciA9IG1f
ZGF0YTsKICAgICBuZXdTdHIuaW5zZXJ0KGRhdGEsIG9mZnNldCk7CiAKLSAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gb2xkU3RyID0gbV9kYXRhOwotICAgIG1fZGF0YSA9IG5ld1N0ci5pbXBsKCk7Cisg
ICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIuaW1wbCgpLCBvZmZzZXQsIDApOwogCi0gICAgaWYg
KCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5zdHlsZSgpKSkg
JiYgYXR0YWNoZWQoKSkgewotICAgICAgICBkZXRhY2goKTsKLSAgICAgICAgYXR0YWNoKCk7Ci0g
ICAgfSBlbHNlIGlmIChyZW5kZXJlcigpKQotICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIo
KSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zmc2V0LCAwKTsKLQotICAgIGRpc3BhdGNo
TW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOwotICAgIAogICAgIGRvY3VtZW50KCktPnRleHRJ
bnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogfQogCkBAIC0xMzAsMTYgKzEw
NSw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlCiAgICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0
YTsKICAgICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgcmVhbENvdW50KTsKIAotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBvbGRTdHIgPSBtX2RhdGE7Ci0gICAgbV9kYXRhID0gbmV3U3RyLmltcGwoKTsK
LSAgICAKLSAgICBpZiAoKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcklzTmVlZGVkKHJlbmRlcmVy
KCktPnN0eWxlKCkpKSAmJiBhdHRhY2hlZCgpKSB7Ci0gICAgICAgIGRldGFjaCgpOwotICAgICAg
ICBhdHRhY2goKTsKLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHRvUmVuZGVy
VGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvZmZzZXQsIGNvdW50
KTsKLQotICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOworICAgIHNldERh
dGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgb2Zmc2V0LCBjb3VudCk7CiAKICAgICBkb2N1bWVu
dCgpLT50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIHJlYWxDb3VudCk7CiB9CkBAIC0xNjAsMTcg
KzEyNiw4IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiBkCiAgICAgbmV3U3RyLnJlbW92ZShvZmZz
ZXQsIHJlYWxDb3VudCk7CiAgICAgbmV3U3RyLmluc2VydChkYXRhLCBvZmZzZXQpOwogCi0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKLSAgICBtX2RhdGEgPSBuZXdTdHIu
aW1wbCgpOworICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgb2Zmc2V0LCBjb3Vu
dCk7CiAKLSAgICBpZiAoKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcklzTmVlZGVkKHJlbmRlcmVy
KCktPnN0eWxlKCkpKSAmJiBhdHRhY2hlZCgpKSB7Ci0gICAgICAgIGRldGFjaCgpOwotICAgICAg
ICBhdHRhY2goKTsKLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHRvUmVuZGVy
VGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvZmZzZXQsIGNvdW50
KTsKLSAgICAKLSAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKLSAgICAK
ICAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFy
IGNoZWNraW5nCiAgICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQodGhpcywgb2Zmc2V0LCByZWFs
Q291bnQpOwogICAgIGRvY3VtZW50KCktPnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEu
bGVuZ3RoKCkpOwpAQCAtMTkxLDEyICsxNDgsMjkgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXRO
b2RlVmFsdWUoY29uc3QgU3RyaW5nJiBub2RlVmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
IHNldERhdGEobm9kZVZhbHVlLCBlYyk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGlzcGF0
Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIHByZXZWYWx1ZSkKK3ZvaWQgQ2hhcmFjdGVyRGF0
YTo6c2V0RGF0YUFuZFVwZGF0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0RhdGEsIHVuc2ln
bmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxhY2VkRGF0YSkK
K3sKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xkRGF0YSA9IG1fZGF0YTsKKyAgICBtX2RhdGEg
PSBuZXdEYXRhOworICAgIHVwZGF0ZVJlbmRlcmVyKG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5n
dGhPZlJlcGxhY2VkRGF0YSk7CisgICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZERhdGEuZ2V0
KCkpOworfQorCit2b2lkIENoYXJhY3RlckRhdGE6OnVwZGF0ZVJlbmRlcmVyKHVuc2lnbmVkIG9m
ZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxhY2VkRGF0YSkKK3sKKyAg
ICBpZiAoKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcklzTmVlZGVkKHJlbmRlcmVyKCktPnN0eWxl
KCkpKSAmJiBhdHRhY2hlZCgpKSB7CisgICAgICAgIGRldGFjaCgpOworICAgICAgICBhdHRhY2go
KTsKKyAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIHRvUmVuZGVyVGV4dChyZW5k
ZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwg
bGVuZ3RoT2ZSZXBsYWNlZERhdGEpOworfQorCit2b2lkIENoYXJhY3RlckRhdGE6OmRpc3BhdGNo
TW9kaWZpZWRFdmVudChTdHJpbmdJbXBsKiBvbGREYXRhKQogewogICAgIGlmIChwYXJlbnROb2Rl
KCkpCiAgICAgICAgIHBhcmVudE5vZGUoKS0+Y2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgaWYgKGRv
Y3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NQ0hBUkFDVEVSREFUQU1PRElG
SUVEX0xJU1RFTkVSKSkKLSAgICAgICAgZGlzcGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50LCB0cnVlLCAwLCBw
cmV2VmFsdWUsIG1fZGF0YSkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRydWUs
IDAsIG9sZERhdGEsIG1fZGF0YSkpOwogICAgIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQo
KTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGRvY3VtZW50KCksIHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oIGIvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCmlu
ZGV4IDk0ZTgxMmI2Mjk2MjY3ZWIwYjA3YmQ3YTNlODk1N2U0NjUyNjFkNDMuLjMyODU2ZDE1MGQ3
YjI5ZDQ4NjVkODRjMjBmYWQ5ZjBjNDY0MTIwYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuaAorKysgYi9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKQEAgLTY0LDkg
KzY0LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGFyYWN0ZXJEYXRhTm9kZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGludCBtYXhDaGFyYWN0ZXJPZmZz
ZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgb2Zmc2V0SW5DaGFyYWN0ZXJzKCkgY29uc3Q7
Ci0KKyAgICB2b2lkIHNldERhdGFBbmRVcGRhdGUoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiwgdW5z
aWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxlbmd0aE9mUmVwbGFjZWREYXRh
KTsKKyAgICB2b2lkIHVwZGF0ZVJlbmRlcmVyKHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRh
LCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7CiAgICAgdm9pZCBjaGVja0NoYXJEYXRh
T3BlcmF0aW9uKHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYXBwZW5kRGF0YUNvbW1vbihjb25zdCBTdHJpbmcmKTsKIAogICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBtX2RhdGE7CiB9Owo=
</data>
<flag name="review"
          id="68214"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>