<?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>27046</bug_id>
          
          <creation_ts>2009-07-07 15:49:01 -0700</creation_ts>
          <short_desc>Implement CSSOM DocumentView.caretRangeFromPoint</short_desc>
          <delta_ts>2009-09-11 17:44:37 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annevk</cc>
    
    <cc>roc</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130288</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 15:49:01 -0700</bug_when>
    <thetext>Implement CSSOM DocumentView.caretRangeFromPoint

Right now it&apos;s not possible to find out what word is under the mouse.  Adding this new feature from CSSOM would solve this (and other related) issue(s).

interface DocumentView {
  readonly attribute AbstractView defaultView;
  Element elementFromPoint(in float x, in float y);
  Range caretRangeFromPoint(in float x, in float y);
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130289</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 15:49:57 -0700</bug_when>
    <thetext>http://dev.w3.org/csswg/cssom-view/#documentview-caretrangefrompoint is the spec URL btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131073</commentid>
    <comment_count>2</comment_count>
      <attachid>32610</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-07-10 22:43:30 -0700</bug_when>
    <thetext>Created attachment 32610
WIP patch (not ready for review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131077</commentid>
    <comment_count>3</comment_count>
      <attachid>32611</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-07-10 22:46:39 -0700</bug_when>
    <thetext>Created attachment 32611
helpful test

Attaching a little helpful test I made when writing this code.  With the patch applied, when you click, the position where you click extended one character forward is selected as an indication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131481</commentid>
    <comment_count>4</comment_count>
      <attachid>32694</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-07-13 21:07:22 -0700</bug_when>
    <thetext>Created attachment 32694
Little more work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132615</commentid>
    <comment_count>5</comment_count>
      <attachid>32952</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-17 10:23:05 -0700</bug_when>
    <thetext>Created attachment 32952
patch w/ layout test

Hi Sam,

I did not add myself into the cc list, and I am not aware that you are doing the implementation.
I am uploading my patch just for reference. 

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132634</commentid>
    <comment_count>6</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-17 10:59:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=32694) [details]
&gt; Little more work.

Hi Sam,

Thanks for implementing this!

I have several questions regarding your patch:
1. The CSSOM spec says that: &quot;If ..... no insertion point indicator would have been inserted, or editing is not supported, the method must return null&quot;. I do not quite understand why it returns NULL if &quot;editing is not supported&quot;. So, I changed the implementation to &quot;return NULL if the node type is not text related node type&quot;. For other node types, range::create(Document*, Position, Position) might raise error code and hit assertion failure (for example, &quot;input&quot; element). Or rangeCompliantEquivalent takes care of that? 

2. When calculating the coordinate relative to document, you are taking zoom factor into consideration. Should it also take document scrolling into consideration as well? Since the spec says (x, y) is coordinates in viewport.
Or maybe we can use coordinate relative to document and let JS do  the computation.

3. Could you please add some comments in caretRangeFromPoint() declaration in Document.h?
For a new comer like me, comments help him/her to learn the code, especially what/relative to which a point is.

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132665</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-07-17 12:36:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Created an attachment (id=32694) [details] [details]
&gt; &gt; Little more work.
&gt; 
&gt; Hi Sam,
&gt; 
&gt; Thanks for implementing this!
&gt; 
&gt; I have several questions regarding your patch:
&gt; 1. The CSSOM spec says that: &quot;If ..... no insertion point indicator would have
&gt; been inserted, or editing is not supported, the method must return null&quot;. I do
&gt; not quite understand why it returns NULL if &quot;editing is not supported&quot;. So, I
&gt; changed the implementation to &quot;return NULL if the node type is not text related
&gt; node type&quot;. For other node types, range::create(Document*, Position, Position)
&gt; might raise error code and hit assertion failure (for example, &quot;input&quot;
&gt; element). Or rangeCompliantEquivalent takes care of that? 

I don&apos;t think limiting to just text related nodes is the right way to go since that removes are replaced elements as well.  I used a combination of checking for shadow tree content (input elements, etc.) and using rangeComplientEquivalent.  The spec is not all that clear, so we should probably confer with the editor on the intent.

&gt; 
&gt; 2. When calculating the coordinate relative to document, you are taking zoom
&gt; factor into consideration. Should it also take document scrolling into
&gt; consideration as well? Since the spec says (x, y) is coordinates in viewport.
&gt; Or maybe we can use coordinate relative to document and let JS do  the
&gt; computation.

All computation should be done relative to the viewport, so I think scrolling is already accounted for, though adding tests is the way to be sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132669</commentid>
    <comment_count>8</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-17 12:50:36 -0700</bug_when>
    <thetext>&gt; &gt; 2. When calculating the coordinate relative to document, you are taking zoom
&gt; &gt; factor into consideration. Should it also take document scrolling into
&gt; &gt; consideration as well? Since the spec says (x, y) is coordinates in viewport.
&gt; &gt; Or maybe we can use coordinate relative to document and let JS do  the
&gt; &gt; computation.
&gt; 
&gt; All computation should be done relative to the viewport, so I think scrolling
&gt; is already accounted for, though adding tests is the way to be sure.

If HitTest is done relative to viewport when the document is scrolled, the computed range offset is shifted too (relative to viewport, not relative to the element within the document).
I added the adjustment when I ran test. But I do not know whether zoom factor or other part in your patch takes care of that. And you are right, adding test is the way to be sure.

Thanks!
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135132</commentid>
    <comment_count>9</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2009-07-27 23:55:51 -0700</bug_when>
    <thetext>&quot;editing is not supported&quot; was there because the use case for this method was editors. However, it seems better to remove that since finding a good definition for it seems hard and applications want to check something like that a better higher level as well.

The intent of the specification is that if you have designMode set to &quot;on&quot; you&apos;d get a range for where the cursor appears when you click or null if no cursor appears. Is that clear enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135133</commentid>
    <comment_count>10</comment_count>
    <who name="Robert O&apos;Callahan">roc</who>
    <bug_when>2009-07-28 00:32:07 -0700</bug_when>
    <thetext>I agree, &quot;editing is not supported&quot; should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145560</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-09-08 15:03:18 -0700</bug_when>
    <thetext>Landed in r48188.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146783</commentid>
    <comment_count>12</comment_count>
      <attachid>39487</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-09-11 16:21:43 -0700</bug_when>
    <thetext>Created attachment 39487
caretRangeFromPointWithoutScroll.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146785</commentid>
    <comment_count>13</comment_count>
      <attachid>39488</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-09-11 16:23:28 -0700</bug_when>
    <thetext>Created attachment 39488
caretRangeFromPointWithScroll.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146786</commentid>
    <comment_count>14</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-09-11 16:24:34 -0700</bug_when>
    <thetext>Hi Sam,

Thanks for implementing this!

It worked pretty well except the 2 issues I list below:
1. I think the offset in the returned range should be the character/caret offset relative to the whole element, not relative to the viewpoint.
Please see the attached file caretRangeFromPointWithoutScroll.html for detailed explanation.

2. If I pass in event.clientX + document.body.scrollLeft and 
event.clientY + document.body.scrollTop as the x-axis and y-axis to caretRangeFromPoint(), there is a possibility that the range is null which should not. 
Please see attached file caretRangeFromPointWithScroll.html for detailed explanation.

Please let me know if I mis-understood anything, or the code needs a bit tweak.

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146819</commentid>
    <comment_count>15</comment_count>
      <attachid>39493</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-09-11 17:05:37 -0700</bug_when>
    <thetext>Created attachment 39493
caretRangeFromPointInNonTextNode.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146827</commentid>
    <comment_count>16</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-09-11 17:18:40 -0700</bug_when>
    <thetext>Another question:

In caretRangeFromPoint(), there is the following code:

    Node* node = result.innerNode();
    if (!node)
        return 0;


Since we do not check whether the &apos;node&apos; is a Text related node, there is a possibility that a range is created even when the mouse is not pointed in the text area.

Please open caretRangeFromPointInNonTextNode.html,
click mouse right before the first word &quot;type&quot;, in the range created by caretRangeFromPoint(), the node is the Text node, the start/end offset is 0. 

click mouse several characters ahead of word &quot;type&quot; (the empty space in the left of &quot;type&quot;), although the &apos;node&apos; is a HTMLParagraphElement, but it has the same visible position as the above, and the range created is the same as above. Is this the correct behavior?

I think my assumption is that this function converts mouse position to the character position within an element, so a null range should be returned if click the empty spaces ahead of word &quot;type&quot;.

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146839</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-09-11 17:44:37 -0700</bug_when>
    <thetext>This bug is now closed.  Please file any bugs in the implementation in a separate bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32610</attachid>
            <date>2009-07-10 22:43:30 -0700</date>
            <delta_ts>2009-07-13 21:07:22 -0700</delta_ts>
            <desc>WIP patch (not ready for review)</desc>
            <filename>wip.diff</filename>
            <type>text/plain</type>
            <size>3093</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gNDU3MzEpCisrKyBkb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MCw3ICs4MCw2IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkltYWdl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNj
cmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgpAQCAtMTA0LDYgKzEw
Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWdt
ZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC0xMjEs
NiArMTIxLDcgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC05MzMsNiArOTM0LDM0IEBA
IEVsZW1lbnQqIERvY3VtZW50OjplbGVtZW50RnJvbVBvaW50KGludCAKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pOwogfQogCitQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6
Y2FyZXRSYW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwg
SGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWUt
PnBhZ2Vab29tRmFjdG9yKCk7CisKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChyb3VuZGVkSW50
UG9pbnQoRmxvYXRQb2ludCh4ICogem9vbUZhY3RvciwgeSAqIHpvb21GYWN0b3IpKSk7CisgICAg
cmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7IAorCisgICAg
Tm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybiAwOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigp
OworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiAwOworICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQu
bG9jYWxQb2ludCgpKTsKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpOworICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcG9z
aXRpb24gPSBQb3NpdGlvbihub2RlLCAwKTsKKworICAgIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50
UG9zaXRpb24gPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zaXRpb24pOworICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPih0aGlzKSwgcmFuZ2VDb21wbGlh
bnRQb3NpdGlvbiwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbik7Cit9CisKIHZvaWQgRG9jdW1lbnQ6
OmFkZEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50KiBl
bGVtZW50KQogewogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgRWxlbWVu
dCo+OjppdGVyYXRvciBpdGVyYXRvcjsKSW5kZXg6IGRvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0NTczMSkKKysrIGRvbS9Eb2N1bWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDggQEAgcHVibGljOgogICAgIGJvb2wgY29udGFp
bnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSB7
IHJldHVybiBtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKTsgfQogCiAg
ICAgRWxlbWVudCogZWxlbWVudEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0OworICAgIFBh
c3NSZWZQdHI8UmFuZ2U+IGNhcmV0UmFuZ2VGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdDsK
KwogICAgIFN0cmluZyByZWFkeVN0YXRlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgZGVmYXVsdENo
YXJzZXQoKSBjb25zdDsKSW5kZXg6IGRvbS9Eb2N1bWVudC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9t
L0RvY3VtZW50LmlkbAkocmV2aXNpb24gNDU3MzEpCisrKyBkb20vRG9jdW1lbnQuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01TdHJpbmcg
cmVhZHlTdGF0ZTsKIAogICAgICAgICBFbGVtZW50ICAgICAgICAgICAgZWxlbWVudEZyb21Qb2lu
dChpbiBsb25nIHgsIGluIGxvbmcgeSk7CisgICAgICAgIFJhbmdlICAgICAgICAgICAgICBjYXJl
dFJhbmdlRnJvbVBvaW50KGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKIAogICAgICAgICAvLyBNb3pp
bGxhIGV4dGVuc2lvbnMKICNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdV
QUdFX0pBVkFTQ1JJUFQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>32611</attachid>
            <date>2009-07-10 22:46:39 -0700</date>
            <delta_ts>2009-07-10 22:46:39 -0700</delta_ts>
            <desc>helpful test</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>862</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgogICAgPHNjcmlwdD4KICAgICAgICB3aW5kb3cub25jbGljayA9IGZ1bmN0
aW9uKGUpCiAgICAgICAgewogICAgICAgICAgICB2YXIgciA9IGRvY3VtZW50LmNhcmV0UmFuZ2VG
cm9tUG9pbnQoZS54LCBlLnkpOwoKICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJl
bW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFu
Z2Uocik7CiAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIs
ICJmb3J3YXJkIiwgImNoYXJhY3RlciIpOwogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8L2hlYWQ+
Cjxib2R5PkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2lu
ZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9s
b3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBl
eGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcDxpbWcgc3JjPSJodHRw
Oi8vd2Via2l0Lm9yZy9pbWFnZXMvaWNvbi1nb2xkLnBuZyI+IGV4IGVhIGNvbW1vZG8gY29uc2Vx
dWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUg
dmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0
ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBx
dWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS4KPC9ib2R5Pgo8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32694</attachid>
            <date>2009-07-13 21:07:22 -0700</date>
            <delta_ts>2009-07-13 21:07:59 -0700</delta_ts>
            <desc>Little more work.</desc>
            <filename>patch2.diff</filename>
            <type>text/plain</type>
            <size>14950</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzA0NgorICAgICAgICBJ
bXBsZW1lbnQgQ1NTT00gRG9jdW1lbnRWaWV3LmNhcmV0UmFuZ2VGcm9tUG9pbnQKKworICAgICAg
ICBUZXN0czogZmFzdC9kb20vRG9jdW1lbnQvQ2FyZXRSYW5nZUZyb21Qb2ludC9iYXNpYy5odG1s
CisgICAgICAgICAgICAgICBmYXN0L2RvbS9Eb2N1bWVudC9DYXJldFJhbmdlRnJvbVBvaW50L3Jl
cGxhY2UtZWxlbWVudC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNhcmV0UmFuZ2VGcm9tUG9pbnQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5pZGw6CisKIDIwMDktMDctMTMg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ1ODUzKQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2IEBACiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik1hcHBlZEF0dHJpYnV0ZS5oIgpAQCAtMTA0LDYgKzEwMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
V2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlw
dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRl
ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC0xMjEsNiArMTIxLDcgQEAKICNpbmNsdWRlICJY
TUxIdHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiWE1MVG9r
ZW5pemVyLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CkBAIC05MzMsNiArOTM0LDQ5IEBAIEVsZW1lbnQqIERvY3VtZW50OjplbGVt
ZW50RnJvbVBvaW50KGludCAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwog
fQogCitQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6Y2FyZXRSYW5nZUZyb21Qb2ludChpbnQg
eCwgaW50IHkpCit7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybiAwOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IGZyYW1lLT5wYWdlWm9vbUZhY3Rv
cigpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoeCAq
IHpvb21GYWN0b3IsIHkgKiB6b29tRmFjdG9yKSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybiAw
OworICAgIGlmICghZnJhbWVWaWV3LT5ib3VuZHNSZWN0KCkuY29udGFpbnMocG9pbnQpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVl
c3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisgICAgSGl0VGVzdFJlc3Vs
dCByZXN1bHQocG9pbnQpOworICAgIHJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1
ZXN0LCByZXN1bHQpOworCisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogc2hhZG93QW5jZXN0
b3JOb2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKHNoYWRvd0FuY2Vz
dG9yTm9kZSAhPSBub2RlKSB7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNoYWRvd0FuY2Vz
dG9yTm9kZS0+bm9kZUluZGV4KCk7CisgICAgICAgIE5vZGUqIGNvbnRhaW5lciA9IHNoYWRvd0Fu
Y2VzdG9yTm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZSh0
aGlzLCBjb250YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQpOworICAgIH0KKworICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVu
ZGVyZXIpCisgICAgICAgIHJldHVybiAwOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKTsK
KyAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50UG9zaXRpb24gPSByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQodmlzaWJsZVBvc2l0aW9uKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZSh0aGlzLCBy
YW5nZUNvbXBsaWFudFBvc2l0aW9uLCByYW5nZUNvbXBsaWFudFBvc2l0aW9uKTsKK30KKwogdm9p
ZCBEb2N1bWVudDo6YWRkRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQs
IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ZXJhdG9yOwpJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0
NTg1MykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw2
ICsyNDAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc011bHRpcGxlRWxlbWVudHNXaXRo
SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIHsgcmV0dXJuIG1fZHVwbGljYXRlSWRz
LmNvbnRhaW5zKGVsZW1lbnRJZC5pbXBsKCkpOyB9CiAKICAgICBFbGVtZW50KiBlbGVtZW50RnJv
bVBvaW50KGludCB4LCBpbnQgeSkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxSYW5nZT4gY2FyZXRS
YW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpOworCiAgICAgU3RyaW5nIHJlYWR5U3RhdGUoKSBj
b25zdDsKIAogICAgIFN0cmluZyBkZWZhdWx0Q2hhcnNldCgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50Lmlk
bAkocmV2aXNpb24gNDU4NTMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1VbmRlZmluZWRdIERPTVN0cmluZyByZWFk
eVN0YXRlOwogCiAgICAgICAgIEVsZW1lbnQgICAgICAgICAgICBlbGVtZW50RnJvbVBvaW50KGlu
IGxvbmcgeCwgaW4gbG9uZyB5KTsKKyAgICAgICAgUmFuZ2UgICAgICAgICAgICAgIGNhcmV0UmFu
Z2VGcm9tUG9pbnQoaW4gbG9uZyB4LCBpbiBsb25nIHkpOwogCiAgICAgICAgIC8vIE1vemlsbGEg
ZXh0ZW5zaW9ucwogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYgTEFOR1VBR0Vf
SkFWQVNDUklQVApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDU4NTQpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wNy0xMyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzA0NgorICAgICAgICBJbXBsZW1lbnQgQ1NTT00gRG9jdW1lbnRWaWV3LmNhcmV0
UmFuZ2VGcm9tUG9pbnQKKworICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VG
cm9tUG9pbnQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VG
cm9tUG9pbnQvYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9E
b2N1bWVudC9DYXJldFJhbmdlRnJvbVBvaW50L2Jhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvcmVwbGFjZS1lbGVtZW50LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRG9jdW1lbnQvQ2FyZXRSYW5n
ZUZyb21Qb2ludC9yZXBsYWNlLWVsZW1lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0wNy0xMyAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IExlb3BhcmQg
cmVncmVzc2lvbiBJIGp1c3QgaW50cm9kdWNlZC4KQEAgLTkzLDYgKzEwNywxOCBAQAogCiAyMDA5
LTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFu
ZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFu
Z2VGcm9tUG9pbnQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFu
Z2VGcm9tUG9pbnQvYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9Eb2N1bWVudC9DYXJldFJhbmdlRnJvbVBvaW50L2Jhc2ljLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvcmVwbGFjZS1lbGVtZW50
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRG9jdW1lbnQvQ2FyZXRS
YW5nZUZyb21Qb2ludC9yZXBsYWNlLWVsZW1lbnQuaHRtbDogQWRkZWQuCisKKzIwMDktMDctMTMg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KIAogICAgICAgICBUZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjcyMzQKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0Nh
cmV0UmFuZ2VGcm9tUG9pbnQvYmFzaWMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvYmFzaWMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvQ2Fy
ZXRSYW5nZUZyb21Qb2ludC9iYXNpYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjQgQEAKK1Rlc3RpbmcgdXBwZXIgbGVmdAorUEFTUzogcmFuZ2Uuc3RhcnRDb250YWluZXIg
PT0gZWxlbWVudC5maXJzdENoaWxkLgorUEFTUzogcmFuZ2Uuc3RhcnRPZmZzZXQgPT0gMC4KK1Rl
c3RpbmcgdXBwZXIgcmlnaHQKK1BBU1M6IHJhbmdlLnN0YXJ0Q29udGFpbmVyID09IGVsZW1lbnQu
Zmlyc3RDaGlsZC4KK1BBU1M6IHJhbmdlLnN0YXJ0T2Zmc2V0ID09IDIzLgorVGVzdGluZyBsb3dl
ciBsZWZ0CitQQVNTOiByYW5nZS5zdGFydENvbnRhaW5lciA9PSBlbGVtZW50LmZpcnN0Q2hpbGQu
CitQQVNTOiByYW5nZS5zdGFydE9mZnNldCA9PSA3Mi4KK1Rlc3RpbmcgbG93ZXIgcmlnaHQKK1BB
U1M6IHJhbmdlLnN0YXJ0Q29udGFpbmVyID09IGVsZW1lbnQuZmlyc3RDaGlsZC4KK1BBU1M6IHJh
bmdlLnN0YXJ0T2Zmc2V0ID09IDk1LgorVGVzdGluZyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZQor
UEFTUzogcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gZWxlbWVudC5maXJzdENoaWxkLgorUEFTUzog
cmFuZ2Uuc3RhcnRPZmZzZXQgPT0gMzYuCitUZXN0aW5nIG5lZ2F0aXZlIHZhbHVlcworUEFTUzog
cmFuZ2UgaXMgbnVsbC4KK1BBU1M6IHJhbmdlIGlzIG51bGwuCitQQVNTOiByYW5nZSBpcyBudWxs
LgorVGVzdGluZyB2YWx1ZXMgbGFyZ2VyIHRoYW4gdGhlIHZpZXdwb3J0CitQQVNTOiByYW5nZSBp
cyBudWxsLgorUEFTUzogcmFuZ2UgaXMgbnVsbC4KK1BBU1M6IHJhbmdlIGlzIG51bGwuCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvYmFz
aWMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9DYXJl
dFJhbmdlRnJvbVBvaW50L2Jhc2ljLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9Eb2N1bWVudC9DYXJldFJhbmdlRnJvbVBvaW50L2Jhc2ljLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTAxIEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAg
ICAgI3Rlc3QgeworICAgICAgICAgICAgd2lkdGg6IDQwMHB4OworICAgICAgICAgICAgZm9udC1m
YW1pbHk6ICJBaGVtIjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdD4KKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB2YXIgX2xvZyA9ICIiOwor
ICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBfbG9nICs9
IG1zZyArICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzd2FwSW5Mb2coKQor
ICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCd0ZXN0Jyk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2Rl
OworICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpOworICAgICAgICAgICAg
dmFyIGNvbnNvbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKKyAgICAgICAgICAg
IGNvbnNvbGUudGV4dENvbnRlbnQgPSBfbG9nOworICAgICAgICAgICAgcGFyZW50LmFwcGVuZENo
aWxkKGNvbnNvbGUpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW1lbnQ7CisKKyAgICAg
ICAgZnVuY3Rpb24gdGVzdCh4LCB5LCBfX2V4cGVjdGVkQ29udGFpbmVyLCBfX2V4cGVjdGVkT2Zm
c2V0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWRDb250YWluZXIgPSBldmFs
KF9fZXhwZWN0ZWRDb250YWluZXIpOworICAgICAgICAgICAgdmFyIGV4cGVjdGVkT2Zmc2V0ID0g
ZXZhbChfX2V4cGVjdGVkT2Zmc2V0KTsKKworICAgICAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1l
bnQuY2FyZXRSYW5nZUZyb21Qb2ludCh4LCB5KTsKKworICAgICAgICAgICAgaWYgKHJhbmdlLnN0
YXJ0Q29udGFpbmVyID09IGV4cGVjdGVkQ29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgbG9n
KCJQQVNTOiByYW5nZS5zdGFydENvbnRhaW5lciA9PSAiICsgX19leHBlY3RlZENvbnRhaW5lciAr
ICIuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZygiRkFJTDog
cmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gIiArIHJhbmdlLnN0YXJ0Q29udGFpbmVyICsgIi4iKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0T2Zmc2V0ID09IGV4
cGVjdGVkT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByYW5nZS5zdGFydE9m
ZnNldCA9PSAiICsgX19leHBlY3RlZE9mZnNldCArICIuIik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGxvZygiRkFJTDogcmFuZ2Uuc3RhcnRPZmZzZXQgPT0gIiArIHJh
bmdlLnN0YXJ0T2Zmc2V0ICsgIi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHNob3VsZEJlTnVsbCh4LCB5KQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgcmFuZ2UgPSBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KHgsIHkpOworCisgICAgICAg
ICAgICBpZiAocmFuZ2UgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IHJh
bmdlIGlzIG51bGwuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxv
ZygiRkFJTDogcmFuZ2UgaXMgbm90IG51bGwuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAg
ICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICAgICAg
ICAgIHRleHQgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgICAgIHZhciByZWN0ID0g
ZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICAgICAgbG9nKCJUZXN0
aW5nIHVwcGVyIGxlZnQiKTsKKyAgICAgICAgICAgIHRlc3QocmVjdC5sZWZ0LCByZWN0LnRvcCwg
ImVsZW1lbnQuZmlyc3RDaGlsZCIsICIwIik7CisKKyAgICAgICAgICAgIGxvZygiVGVzdGluZyB1
cHBlciByaWdodCIpOworICAgICAgICAgICAgdGVzdChyZWN0LmxlZnQgKyByZWN0LndpZHRoLCBy
ZWN0LnRvcCwgImVsZW1lbnQuZmlyc3RDaGlsZCIsICIyMyIpOworCisgICAgICAgICAgICBsb2co
IlRlc3RpbmcgbG93ZXIgbGVmdCIpOworICAgICAgICAgICAgdGVzdChyZWN0LmxlZnQsIHJlY3Qu
dG9wICsgcmVjdC5oZWlnaHQsICJlbGVtZW50LmZpcnN0Q2hpbGQiLCAiNzIiKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbG9nKCJUZXN0aW5nIGxvd2VyIHJpZ2h0Iik7CisgICAgICAgICAg
ICB0ZXN0KHJlY3QubGVmdCArIHJlY3Qud2lkdGgsIHJlY3QudG9wICsgcmVjdC5oZWlnaHQsICJl
bGVtZW50LmZpcnN0Q2hpbGQiLCAiOTUiKTsKKworICAgICAgICAgICAgbG9nKCJUZXN0aW5nIHNv
bWV3aGVyZSBpbiB0aGUgbWlkZGxlIik7CisgICAgICAgICAgICB0ZXN0KChyZWN0LmxlZnQgKyBy
ZWN0LndpZHRoKSAvIDIsIChyZWN0LnRvcCArIHJlY3QuaGVpZ2h0KSAvIDIsICJlbGVtZW50LmZp
cnN0Q2hpbGQiLCAiMzYiKTsKKworICAgICAgICAgICAgbG9nKCJUZXN0aW5nIG5lZ2F0aXZlIHZh
bHVlcyIpOworICAgICAgICAgICAgc2hvdWxkQmVOdWxsKC0xMCwgMTApOworICAgICAgICAgICAg
c2hvdWxkQmVOdWxsKDEwLCAtMTApOworICAgICAgICAgICAgc2hvdWxkQmVOdWxsKC0xMCwgLTEw
KTsKKworICAgICAgICAgICAgbG9nKCJUZXN0aW5nIHZhbHVlcyBsYXJnZXIgdGhhbiB0aGUgdmll
d3BvcnQiKTsKKyAgICAgICAgICAgIHNob3VsZEJlTnVsbCh3aW5kb3cuaW5uZXJXaWR0aCArIDEw
MCwgMTApOworICAgICAgICAgICAgc2hvdWxkQmVOdWxsKDEwLCB3aW5kb3cuaW5uZXJIZWlnaHQg
KyAxMDApOworICAgICAgICAgICAgc2hvdWxkQmVOdWxsKHdpbmRvdy5pbm5lcldpZHRoICsgMTAw
LCB3aW5kb3cuaW5uZXJIZWlnaHQgKyAxMDApOworCisgICAgICAgICAgICBzd2FwSW5Mb2coKTsK
KyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0ZXN0
Ij54eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4
eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eDwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvQ2FyZXRSYW5nZUZy
b21Qb2ludC9yZXBsYWNlLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvcmVwbGFjZS1lbGVt
ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0Rv
Y3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvcmVwbGFjZS1lbGVtZW50LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdGluZyBsZWZ0IG9mIHRoZSBpbWFnZQor
UEFTUzogcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gaW1hZ2UucHJldmlvdXNTaWJsaW5nLgorUEFT
UzogcmFuZ2Uuc3RhcnRPZmZzZXQgPT0gMzQuCitUZXN0aW5nIHJpZ2h0IG9mIHRoZSBpbWFnZQor
UEFTUzogcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gaW1hZ2UubmV4dFNpYmxpbmcuCitQQVNTOiBy
YW5nZS5zdGFydE9mZnNldCA9PSAxLgorVGVzdGluZyBvbiB0aGUgaW1hZ2UKK1BBU1M6IHJhbmdl
LnN0YXJ0Q29udGFpbmVyID09IGltYWdlLnByZXZpb3VzU2libGluZy4KK1BBU1M6IHJhbmdlLnN0
YXJ0T2Zmc2V0ID09IDM1LgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9D
YXJldFJhbmdlRnJvbVBvaW50L3JlcGxhY2UtZWxlbWVudC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvcmVwbGFjZS1l
bGVtZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVu
dC9DYXJldFJhbmdlRnJvbVBvaW50L3JlcGxhY2UtZWxlbWVudC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc4IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgI3Rl
c3QgeworICAgICAgICAgICAgd2lkdGg6IDQwMHB4OworICAgICAgICAgICAgZm9udC1mYW1pbHk6
ICJBaGVtIjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdD4KKyAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB2YXIgX2xvZyA9ICIiOworICAgICAg
ICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBfbG9nICs9IG1zZyAr
ICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzd2FwSW5Mb2coKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0
ZXN0Jyk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworICAg
ICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpOworICAgICAgICAgICAgdmFyIGNv
bnNvbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKKyAgICAgICAgICAgIGNvbnNv
bGUudGV4dENvbnRlbnQgPSBfbG9nOworICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGNv
bnNvbGUpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW1lbnQ7CisgICAgICAgIHZhciBp
bWFnZTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0KHgsIHksIF9fZXhwZWN0ZWRDb250YWluZXIs
IF9fZXhwZWN0ZWRPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZENv
bnRhaW5lciA9IGV2YWwoX19leHBlY3RlZENvbnRhaW5lcik7CisgICAgICAgICAgICB2YXIgZXhw
ZWN0ZWRPZmZzZXQgPSBldmFsKF9fZXhwZWN0ZWRPZmZzZXQpOworCisKKyAgICAgICAgICAgIHZh
ciByYW5nZSA9IGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoeCwgeSk7CisKKyAgICAgICAg
ICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciA9PSBleHBlY3RlZENvbnRhaW5lcikgeworICAg
ICAgICAgICAgICAgIGxvZygiUEFTUzogcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gIiArIF9fZXhw
ZWN0ZWRDb250YWluZXIgKyAiLiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBsb2coIkZBSUw6IHJhbmdlLnN0YXJ0Q29udGFpbmVyID09ICIgKyByYW5nZS5zdGFydENv
bnRhaW5lciArICIuIik7CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgaWYgKHJhbmdl
LnN0YXJ0T2Zmc2V0ID09IGV4cGVjdGVkT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgbG9nKCJQ
QVNTOiByYW5nZS5zdGFydE9mZnNldCA9PSAiICsgX19leHBlY3RlZE9mZnNldCArICIuIik7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZygiRkFJTDogcmFuZ2Uuc3Rh
cnRPZmZzZXQgPT0gIiArIHJhbmdlLnN0YXJ0T2Zmc2V0ICsgIi4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcp
OworICAgICAgICAgICAgaW1hZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UnKTsK
KworICAgICAgICAgICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworICAgICAgICAgICAgdmFyIGltYWdlUmVjdCA9IGltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpOworCisgICAgICAgICAgICBsb2coIlRlc3RpbmcgbGVmdCBvZiB0aGUgaW1hZ2UiKTsKKyAg
ICAgICAgICAgIHRlc3QoaW1hZ2VSZWN0LmxlZnQgLSAxMCwgKGltYWdlUmVjdC50b3AgKyBpbWFn
ZVJlY3QuaGVpZ2h0KSAtIDUsICJpbWFnZS5wcmV2aW91c1NpYmxpbmciLCAiMzQiKTsKKworICAg
ICAgICAgICAgbG9nKCJUZXN0aW5nIHJpZ2h0IG9mIHRoZSBpbWFnZSIpOworICAgICAgICAgICAg
dGVzdCgoaW1hZ2VSZWN0LmxlZnQgKyBpbWFnZVJlY3Qud2lkdGgpICsgMTAsIChpbWFnZVJlY3Qu
dG9wICsgaW1hZ2VSZWN0LmhlaWdodCkgLSA1LCAiaW1hZ2UubmV4dFNpYmxpbmciLCAiMSIpOwor
CisgICAgICAgICAgICBsb2coIlRlc3Rpbmcgb24gdGhlIGltYWdlIik7CisgICAgICAgICAgICB0
ZXN0KChpbWFnZVJlY3QubGVmdCArIChpbWFnZVJlY3Qud2lkdGggLyAyKSkgLCAoaW1hZ2VSZWN0
LnRvcCArIGltYWdlUmVjdC5oZWlnaHQpIC0gNSwgImltYWdlLnByZXZpb3VzU2libGluZyIsICIz
NSIpOworCisgICAgICAgICAgICBzd2FwSW5Mb2coKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0ZXN0Ij54eHh4eCB4eHh4eCB4eHh4eCB4eHh4
eCB4eHh4eCB4eHh4eDxpbWcgaWQ9ImltYWdlIiBzcmM9Ii4uLy4uL3Jlc291cmNlcy9hYmUucG5n
Ij54eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4eHh4eCB4
eHh4eDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA0NTg1MikKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJv
cGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzOSw2ICs1MzksNyBAQCB3
aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLlRFWFRfTk9ERSBbbnVtCiB3aW5kb3cuRG9jdW1lbnQu
cHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnBy
b3RvdHlwZS5hZG9wdE5vZGUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5h
cHBlbmRDaGlsZCBbZnVuY3Rpb25dCit3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmNhcmV0UmFu
Z2VGcm9tUG9pbnQgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5jbG9uZU5v
ZGUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5jb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbiBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUF0dHJp
YnV0ZSBbZnVuY3Rpb25dCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32952</attachid>
            <date>2009-07-17 10:23:05 -0700</date>
            <delta_ts>2009-07-17 10:23:05 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>27046.v1</filename>
            <type>text/plain</type>
            <size>7518</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDQ1OTc4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPVVuZGVmaW5lZF0gRE9NU3RyaW5nIHJlYWR5
U3RhdGU7CiAKICAgICAgICAgRWxlbWVudCAgICAgICAgICAgIGVsZW1lbnRGcm9tUG9pbnQoaW4g
bG9uZyB4LCBpbiBsb25nIHkpOworICAgICAgICBSYW5nZSAgICAgICAgICAgICAgY2FyZXRSYW5n
ZUZyb21Qb2ludChpbiBsb25nIHgsIGluIGxvbmcgeSk7CiAKICAgICAgICAgLy8gTW96aWxsYSBl
eHRlbnNpb25zCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9K
QVZBU0NSSVBUCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0NTk3OCkKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM2LDYgKzkzNiwzMCBAQAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiB9CiAKK1Bhc3NSZWZQdHI8UmFuZ2U+IERv
Y3VtZW50OjpjYXJldFJhbmdlRnJvbVBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICBpZiAoeCA8
IDAgfHwgeSA8IDAgfHwgeCA+IHZpZXcoKS0+dmlzaWJsZVdpZHRoKCkgfHwgeSA+IHZpZXcoKS0+
dmlzaWJsZUhlaWdodCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvLyBGaXJzdCwgaGl0
IHRlc3QgZm9yIHRoZSBlbGVtZW50LgorICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVz
dFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisgICAgLy8gQ29u
dmVydCBjb29yZGluYXRlcyAoeCx5KSB3aGljaCBpcyByZWxhdGl2ZSB0byB2aWV3cG9ydCB0byBw
b2ludCByZWxhdGl2ZSB0bworICAgIC8vIHRoZSBkb2N1bWVudCBieSB0YWtpbmcgZG9jdW1lbnQg
c2Nyb2xsaW5nIGludG8gY29uc2lkZXJhdGlvbi4KKyAgICBJbnRQb2ludCBwb2ludFJlbGF0aXZl
VG9Eb2N1bWVudCh4ICsgYm9keSgpLT5zY3JvbGxMZWZ0KCksIHkgKyBib2R5KCktPnNjcm9sbFRv
cCgpKTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludFJlbGF0aXZlVG9Eb2N1bWVudCk7
CisgICAgcmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7Cisg
ICAgTm9kZSogaW5uZXJOb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIGlmICghaW5uZXJO
b2RlIHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAg
IE5vZGU6Ok5vZGVUeXBlIHR5cGUgPSBpbm5lck5vZGUtPm5vZGVUeXBlKCk7CisgICAgLy8gVE9E
TzogaG93IGFib3V0IG90aGVyIHR5cGVzPworICAgIGlmICh0eXBlICE9IE5vZGU6OkNEQVRBX1NF
Q1RJT05fTk9ERSAmJiB0eXBlICE9IE5vZGU6OkNPTU1FTlRfTk9ERSAmJiB0eXBlICE9IE5vZGU6
OlRFWFRfTk9ERSkKKyAgICAgICAgcmV0dXJuIE5VTEw7IAorICAgIC8vIFRoZW4sIGFzayBwb3Np
dGlvbkZvclBvaW50IHRvIGNvbnZlcnQgcmVuZGVyZXIncyBsb2NhbCBwb2ludCB0byBjaGFyYWN0
ZXIgcG9zaXRpb24uCisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoaW5uZXJOb2RlLT5y
ZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKKyAgICBQ
b3NpdGlvbiBwb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CisgICAgcmV0dXJuIFJh
bmdlOjpjcmVhdGUodGhpcywgcG9zLCBwb3MpOworfQorCiB2b2lkIERvY3VtZW50OjphZGRFbGVt
ZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEVsZW1lbnQqPjo6aXRl
cmF0b3IgaXRlcmF0b3I7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDQ1OTc4KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCwxNyBAQAogICAgIGJv
b2wgY29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxl
bWVudElkKSB7IHJldHVybiBtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgp
KTsgfQogCiAgICAgRWxlbWVudCogZWxlbWVudEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0
OworCisgICAgLy8gQmFzZWQgb24gVzNDIGRyYWZ0IGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nz
c29tLXZpZXcvI2RvY3VtZW50dmlldy1jYXJldHJhbmdlZnJvbXBvaW50LgorICAgIC8vIEdpdmVu
IGNvb3JkaW5hdGVzIHgseSBpbiB0aGUgdmlld3BvcnQsIGNhcmV0UmFuZ2VGcm9tUG9pbnQoKSBy
ZXR1cm5zIGFuCisgICAgLy8gZW1wdHkgdGV4dCByYW5nZSBmb3IgdGhlIHBvc2l0aW9uIHdoZXJl
IGEgdGV4dCBpbnNlcnRpb24gcG9pbnQgaW5kaWNhdG9yCisgICAgLy8gd291bGQgaGF2ZSBiZWVu
IGluc2VydGVkIGlmIGVkaXRpbmcgd2FzIGVuYWJsZWQgYW5kIGhpdCB0ZXN0aW5nIHdhcyBwZXJm
b3JtZWQKKyAgICAvLyBhdCB0aGUgY29vcmRpbmF0ZXMuIElmIGVpdGhlciBhcmd1bWVudCBpcyBu
ZWdhdGl2ZSwgb3IgeCBpcyBncmVhdGVyIHRoYW4gdGhlCisgICAgLy8gdmlld3BvcnQgd2lkdGgs
IG9yIHkgaXMgZ3JlYXRoZXIgdGhhbiB0aGUgdmlld3BvcnQgaGVpZ2h0LCBvciBjb29yZGluYXRl
cyAoeCx5KSBoaXRzCisgICAgLy8gYSBub2RlIHdoaWNoIGlzIG5vdCBURVhUIG5vZGUgb3IgQ0RB
VEFfU0VDVElPTiBub2RlIG9yIENPTU1FTlQgbm9kZSwKKyAgICAvLyBpdCByZXR1cm5zIE5VTEwu
CisgICAgUGFzc1JlZlB0cjxSYW5nZT4gY2FyZXRSYW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkp
OworCiAgICAgU3RyaW5nIHJlYWR5U3RhdGUoKSBjb25zdDsKIAogICAgIFN0cmluZyBkZWZhdWx0
Q2hhcnNldCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2MDM4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wNy0xNyAgWGlhb21laSBKaSAg
PHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IENTU09NIERvY3VtZW50Vmlldy5jYXJldFJhbmdlRnJvbVBv
aW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjcw
NDYKKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2NhcmV0X3JhbmdlX2Zyb21fcG9pbnQuaHRt
bAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpjYXJldFJhbmdlRnJvbVBvaW50KTogQWRkZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50
Lmg6IEFkZCBjYXJldFJhbmdlRnJvbVBvaW50KCkuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmlk
bDogQWRkIGNhcmV0UmFuZ2VGcm9tUG9pbnQoKSBmb3IgSlMgYmluZGluZy4KKwogMjAwOS0wNy0x
NyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2Zhc3QvZm9ybXMvY2FyZXRfcmFuZ2VfZnJvbV9wb2ludC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZm9ybXMvY2FyZXRfcmFuZ2Vf
ZnJvbV9wb2ludC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC9mb3Jtcy9jYXJldF9yYW5nZV9mcm9tX3BvaW50LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAg
IFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVyQmxv
Y2sge0RJVn0gYXQgKDAsMCkgc2l6ZSA3ODR4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgNTA0eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGgg
NTA0OiAiMDsxOzI7Mzs1Ozc7OTsxMDsxMTsxMzsxNDsxNTsxNjsxODsxOTsyMTsyMjsyNDsyNTsy
NzsyOTszMDszMjszNDszNjszODs0MDs0MjsiCitsYXllciBhdCAoMTAsMjUpIHNpemUgMjczeDE4
CisgIFJlbmRlckJsb2NrIChwb3NpdGlvbmVkKSB7RElWfSBhdCAoMTAsMjUpIHNpemUgMjczeDE4
CisgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjczeDE4CisgICAgICB0ZXh0
IHJ1biBhdCAoMCwwKSB3aWR0aCAyNzM6ICJob3cgYXJlIHlvdT8gaG93IGRvIHlvdSBkbz8gdGhp
cyBpcyBhIHRlc3QuIgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDYwMzgpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNy0xNyAgWGlh
b21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IENTU09NIERvY3VtZW50Vmlldy5jYXJldFJh
bmdlRnJvbVBvaW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjcwNDYKKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGll
cy1leHBlY3RlZC50eHQ6IEFkZCBjYXJldFJhbmdlRnJvbVBvaW50IGFzIG9uZSBwcm90b3R5cGUu
CisgICAgICAgICogZmFzdC9mb3Jtcy9jYXJldF9yYW5nZV9mcm9tX3BvaW50Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Zvcm1zL2NhcmV0X3JhbmdlX2Zyb21fcG9p
bnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAwOS0wNy0xNyAgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4gIDxrZW5uZXRoLmNocmlzdGlhbnNlbkBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA0NTk3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJv
cGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzOSw2ICs1MzksNyBAQAog
d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyIFtmdW5jdGlvbl0KIHdp
bmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuYWRvcHROb2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgW2Z1bmN0aW9uXQord2luZG93LkRvY3VtZW50LnBy
b3RvdHlwZS5jYXJldFJhbmdlRnJvbVBvaW50IFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUuY2xvbmVOb2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUu
Y29tcGFyZURvY3VtZW50UG9zaXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3Rv
dHlwZS5jcmVhdGVBdHRyaWJ1dGUgW2Z1bmN0aW9uXQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9jYXJldF9yYW5nZV9mcm9tX3BvaW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9jYXJldF9yYW5nZV9mcm9tX3BvaW50Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NhcmV0X3JhbmdlX2Zyb21fcG9pbnQuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1
bmN0aW9uIHNob3dDaGFyT2Zmc2V0KCkgeworICAgIHZhciB5ID0gMzA7CisgICAgZm9yICh2YXIg
eCA9IDEwOyB4IDwgMTAwMDsgeCArPSAxMCkgeworICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVu
dC5jYXJldFJhbmdlRnJvbVBvaW50KHgsIHkpOworICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRleHQgKz0gcmFu
Z2Uuc3RhcnRPZmZzZXQgKyAiOyAiOworICAgICAgICB9CisgICAgfQorfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InNob3dDaGFyT2Zmc2V0KCkiPgorPGRpdiBzdHlsZT0iZm9u
dDpzYW5zLXNlcmlmOyBmb250LXN0eWxlOm5vcm1hbDsgZm9udC1zaXplOjEwMCU7IGZvbnQtdmFy
aWFudDpub3JtYWw7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6
IDI1OyBsZWZ0OiAxMDsiPmhvdyBhcmUgeW91PyBob3cgZG8geW91IGRvPyB0aGlzIGlzIGEgdGVz
dC48L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NhcmV0X3JhbmdlX2Zyb21f
cG9pbnQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>39487</attachid>
            <date>2009-09-11 16:21:43 -0700</date>
            <delta_ts>2009-09-11 16:21:43 -0700</delta_ts>
            <desc>caretRangeFromPointWithoutScroll.html</desc>
            <filename>caretRangeFromPoint.html</filename>
            <type>text/html</type>
            <size>2054</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">PEhUTUw+CjxIRUFEPgo8VElUTEU+ZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCgpIE1ldGhv
ZDwvVElUTEU+CjxTQ1JJUFQgTEFOR1VBR0U9IkphdmFTY3JpcHQiPgpmdW5jdGlvbiBzaG93RWxl
bVVuZGVybmVhdGhXaXRob3V0U2Nyb2xsKCkgewogICAgZG9jdW1lbnQuYWxsLm15U3Bhbi5pbm5l
clRleHQgPSAiIjsKICAgIHZhciByYW5nZSA9ZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludChl
dmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTsKICAgIC8qIHRha2VzIGNhcmUgb2YgcGFnZSBz
Y3JvbGwKICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoCiAgICAg
ICAgZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKICAgICAgICBldmVu
dC5jbGllbnRZICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApOwogICAgKi8KICAgIHZhciBvZmZz
ZXQgPSAwOwogICAgaWYgKHJhbmdlKQogICAgICBvZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDsK
ICAgIGVsc2UgewogICAgICBhbGVydCgicmFuZ2UgaXMgbnVsbCIpOwogICAgICByZXR1cm47CiAg
ICB9CgogICAgdmFyIGNoaWxkID0gZXZlbnQudGFyZ2V0LmZpcnN0Q2hpbGQ7CiAgICByYW5nZSA9
IGNoaWxkLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIHJhbmdlLnNlbGVjdE5vZGUo
Y2hpbGQpOwogICAgdmFyIHN0ciA9IHJhbmdlLnRvU3RyaW5nKCk7CgogICAgZG9jdW1lbnQuYWxs
Lm15U3Bhbi5pbm5lclRleHQgPSAieDogIiArIGV2ZW50LmNsaWVudFggKyAiO3k6ICIgKyBldmVu
dC5jbGllbnRZICsgIjsgc3Rpcm5nOiAiICsgcmFuZ2UudG9TdHJpbmcoKSArICI7ICAgb2Zmc2V0
ID0gIiArIG9mZnNldDsKfQpkb2N1bWVudC5vbmNsaWNrID0gc2hvd0VsZW1VbmRlcm5lYXRoV2l0
aG91dFNjcm9sbDsKPC9TQ1JJUFQ+CjwvSEVBRD4KPEJPRFk+CjxIMSBJRD0iaGVhZGVyIj5kb2N1
bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KCkgTWV0aG9kPC9IMT4KPEhSPgo8UD5UaGlzIGlzIHRv
IHRlc3QgZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCgpIGluIGEgc2Nyb2xsZWQgcGFnZS4g
SSB0aGluayB0aGUgb2Zmc2V0IGluIHRoZSByZXR1cm5lZCByYW5nZSBzaG91bGQgYmUgdGhlIGNo
YXJhY3Rlci9jYXJldCBvZmZzZXQgaW4gdGhlIGVsZW1lbnQsIG5vdCByZWxhdGl2ZSB0byB0aGUg
dmlld3BvaW50LiAKPFA+SW4gYSB3aW5kb3cgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHBhZ2Ug
d2l0aG91dCBhbnkgc2Nyb2xsLCBjbGljayBtb3VzZSBhZnRlciAiaSIgaW4gImlzIiBhdCB0aGUg
dmVyeSBiZWdpbm5pbmcsIHRoZSBvZmZzZXQgcHJpbnRlZCBzaG91bGQgYmUgIjYiLiAKPFA+Tm93
LCBwbGVhc2UgcmVzaXplIHRoZSB3aW5kb3cgdG8gbWFrZSB0aGUgcGFnZSBzY3JvbGwgaG9yaXpv
bnRhbGx5LiBUaGVuLCBzY3JvbGwgdGhlIHBhZ2Ugc28gdGhhdCAiaXMiIGJlY29tZXMgdGhlIGZp
cnN0IHZpc2libGUgd29yZC4gQ2xpY2sgdGhlIG1vdXNlIGFmdGVyICJpIiBpbiAiaXMiLCB0aGUg
b2Zmc2V0IHByaW50ZWQgaXMgIjEiLiBJcyB0aGlzIGNvcnJlY3Q/IAo8UD5Mb29rcyBsaWtlIGNh
cmV0UmFuZ2VGcm9tUG9pbnQoKSBpdHNlbGYgZG9lcyBub3QgdGFrZSBjYXJlIG9mIHBhZ2Ugc2Ny
b2xsLApUaGUgYWJvdmUgcHJvYmxlbSBjb3VsZCBiZSBzb2x2ZWQgYnkgCjxwcmU+CmRvY3VtZW50
LmNhcmV0UmFuZ2VGcm9tUG9pbnQoZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xs
TGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jbGllbnRZICsgZG9jdW1l
bnQuYm9keS5zY3JvbGxUb3ApOwo8L3ByZT4KPFA+QnV0IHRoZXJlIGlzIGFub3RoZXIgcHJvYmxl
bSB3aXRoIHRoZSBhYm92ZSBjYWxsLiBQbGVhc2UgY2hlY2sKZXhhbXBsZXMgaW4gY2FyZXRSYW5n
ZUZyb21Qb2ludFdpdGhTY3JvbGwuaHRtbCAKPEJSPjxCUj5SZXN1bHQ6IDxTUEFOIElEPSJteVNw
YW4iIFNUWUxFPSJmb250LXdlaWdodDpib2xkIj48L1NQQU4+Ii48L1A+CjwvQk9EWT4KPC9IVE1M
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>39488</attachid>
            <date>2009-09-11 16:23:28 -0700</date>
            <delta_ts>2009-09-11 16:23:28 -0700</delta_ts>
            <desc>caretRangeFromPointWithScroll.html</desc>
            <filename>caretRangeFromPointWithScroll.html</filename>
            <type>text/html</type>
            <size>1607</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">PEhUTUw+CjxIRUFEPgo8VElUTEU+ZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCgpIE1ldGhv
ZDwvVElUTEU+CjxTQ1JJUFQgTEFOR1VBR0U9IkphdmFTY3JpcHQiPgpmdW5jdGlvbiBzaG93RWxl
bVVuZGVybmVhdGhXaXRob3V0U2Nyb2xsKCkgewogICAgZG9jdW1lbnQuYWxsLm15U3Bhbi5pbm5l
clRleHQgPSAiIjsKICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQo
CiAgICAgICAgZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKICAgICAg
ICBldmVudC5jbGllbnRZICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApOwogICAgdmFyIG9mZnNl
dCA9IDA7CiAgICBpZiAocmFuZ2UpCiAgICAgIG9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0Owog
ICAgZWxzZSB7CiAgICAgIGFsZXJ0KCJyYW5nZSBpcyBudWxsIik7CiAgICAgIHJldHVybjsKICAg
IH0KCiAgICB2YXIgY2hpbGQgPSBldmVudC50YXJnZXQuZmlyc3RDaGlsZDsKICAgIHJhbmdlID0g
Y2hpbGQub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcmFuZ2Uuc2VsZWN0Tm9kZShj
aGlsZCk7CiAgICB2YXIgc3RyID0gcmFuZ2UudG9TdHJpbmcoKTsKCiAgICBkb2N1bWVudC5hbGwu
bXlTcGFuLmlubmVyVGV4dCA9ICJ4OiAiICsgZXZlbnQuY2xpZW50WCArICI7eTogIiArIGV2ZW50
LmNsaWVudFkgKyAiOyBzdGlybmc6ICIgKyByYW5nZS50b1N0cmluZygpICsgIjsgICBvZmZzZXQg
PSAiICsgb2Zmc2V0Owp9CmRvY3VtZW50Lm9uY2xpY2sgPSBzaG93RWxlbVVuZGVybmVhdGhXaXRo
b3V0U2Nyb2xsOwo8L1NDUklQVD4KPC9IRUFEPgo8Qk9EWT4KPEgxIElEPSJoZWFkZXIiPmRvY3Vt
ZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoKSBNZXRob2Q8L0gxPgo8SFI+CjxQIHN0eWxlPSJ3aGl0
ZS1zcGFjZTpub3dyYXAiPlRoaXMgaXMgdG8gdGVzdCBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBv
aW50KCkgaW4gYSBzY3JvbGxlZCBwYWdlLiBJIHRoaW5rIHRoZSBvZmZzZXQgaW4gdGhlIHJldHVy
bmVkIHJhbmdlIHNob3VsZCBiZSB0aGUgY2hhcmFjdGVyL2NhcmV0IG9mZnNldCBpbiB0aGUgZWxl
bWVudCwgbm90IHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9pbnQuIAo8UD5QbGVhc2UgcmVzaXplIHRo
ZSB3aW5kb3cgdG8gYmUgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmVkIj52ZXJ5IG5h
cnJvdzwvc3Bhbj4gaG9yaXpvbnRhbGx5LiBUaGVuLCBzY3JvbGwgdGhlIHBhZ2UgdG8gdGhlIHZl
cnkgcmlnaHQuIENsaWNrIGFueXdoZXJlIGluIHRoZSBsYXN0IHdvcmQgInZpZXdwb2ludCIgaW4g
YWJvdmUgc2VudGVuY2UuIFlvdSB3aWxsIHNlZSAicmFuZ2UgaXMgbnVsbCIgYWxlcnQuICBXaGlj
aCBpcyBjYXVzZWQgYnkgdGhlIGZvbGxvd2luZyBjaGVjayBpbiBEb2N1bWVudC5jYXJldFJhbmdl
RnJvbVBvaW50KCkKPHByZT4KICAgIGlmICghZnJhbWVWaWV3LT5ib3VuZHNSZWN0KCkuY29udGFp
bnMocG9pbnQpKQogICAgICAgIHJldHVybiAwOwo8L3ByZT4KPEJSPjxCUj5SZXN1bHQ6IDxTUEFO
IElEPSJteVNwYW4iIFNUWUxFPSJmb250LXdlaWdodDpib2xkIj48L1NQQU4+Ii48L1A+CjwvQk9E
WT4KPC9IVE1MPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>39493</attachid>
            <date>2009-09-11 17:05:37 -0700</date>
            <delta_ts>2009-09-11 17:05:37 -0700</delta_ts>
            <desc>caretRangeFromPointInNonTextNode.html</desc>
            <filename>nonTextNode.html</filename>
            <type>text/html</type>
            <size>1162</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">PEhUTUw+CjxIRUFEPgo8VElUTEU+ZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCgpIE1ldGhv
ZDwvVElUTEU+CjxzdHlsZT4KLnRhYi1jb250ZW50IHttYXJnaW4tbGVmdDoxODBweDt0ZXh0LWFs
aWduOmNlbnRlcjt9Cgo8L3N0eWxlPgo8U0NSSVBUIExBTkdVQUdFPSJKYXZhU2NyaXB0Ij4KZnVu
Y3Rpb24gc2hvd0VsZW1VbmRlcm5lYXRoV2l0aG91dFNjcm9sbCgpIHsKICAgIGRvY3VtZW50LmFs
bC5teVNwYW4uaW5uZXJUZXh0ID0gIiI7CiAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jYXJldFJh
bmdlRnJvbVBvaW50KAogICAgICAgIGV2ZW50LmNsaWVudFggKyBkb2N1bWVudC5ib2R5LnNjcm9s
bExlZnQsCiAgICAgICAgZXZlbnQuY2xpZW50WSArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTsK
ICAgIHZhciBvZmZzZXQgPSAwOwogICAgaWYgKHJhbmdlKQogICAgICBvZmZzZXQgPSByYW5nZS5z
dGFydE9mZnNldDsKICAgIGVsc2UgewogICAgICBhbGVydCgicmFuZ2UgaXMgbnVsbCIpOwogICAg
ICByZXR1cm47CiAgICB9CgogICAgdmFyIGNoaWxkID0gZXZlbnQudGFyZ2V0LmZpcnN0Q2hpbGQ7
CiAgICByYW5nZSA9IGNoaWxkLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIHJhbmdl
LnNlbGVjdE5vZGUoY2hpbGQpOwogICAgdmFyIHN0ciA9IHJhbmdlLnRvU3RyaW5nKCk7CgogICAg
ZG9jdW1lbnQuYWxsLm15U3Bhbi5pbm5lclRleHQgPSAieDogIiArIGV2ZW50LmNsaWVudFggKyAi
O3k6ICIgKyBldmVudC5jbGllbnRZICsgIjsgc3RyaW5nOiAiICsgcmFuZ2UudG9TdHJpbmcoKSAr
ICI7ICAgb2Zmc2V0ID0gIiArIG9mZnNldDsKfQpkb2N1bWVudC5vbmNsaWNrID0gc2hvd0VsZW1V
bmRlcm5lYXRoV2l0aG91dFNjcm9sbDsKPC9TQ1JJUFQ+CjwvSEVBRD4KPEJPRFk+CjxIMSBJRD0i
aGVhZGVyIj5kb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KCkgTWV0aG9kPC9IMT4KPGRpdiBj
bGFzcz0idGFiLWNvbnRlbnQiPgogIDxwPnR5cGUgaW4gdGhlIGFkZHJlc3MgYmFyIGFuZCBnZXQg
c3VnZ2VzdGlvbnMgZm9yIGJvdGggc2VhcmNoIGFuZCB3ZWIgIHBhZ2VzPC9wPgo8QlI+PEJSPlJl
c3VsdDogPFNQQU4gSUQ9Im15U3BhbiIgU1RZTEU9ImZvbnQtd2VpZ2h0OmJvbGQiPjwvU1BBTj4i
LjwvUD4KPC9CT0RZPgo8L0hUTUw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>