<?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>47870</bug_id>
          
          <creation_ts>2010-10-18 18:55:39 -0700</creation_ts>
          <short_desc>Remove RenderTextControl::setSelectionRange</short_desc>
          <delta_ts>2010-10-29 16:16:11 -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>Layout and Rendering</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>P1</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>47865</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>
    
    <cc>jamesr</cc>
    
    <cc>robert</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>295900</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-18 18:55:39 -0700</bug_when>
    <thetext>Remove enderTextControl::setSelectionRange because it instantiates VisiblePosition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295910</commentid>
    <comment_count>1</comment_count>
      <attachid>71115</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-18 19:06:46 -0700</bug_when>
    <thetext>Created attachment 71115
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301407</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-28 16:06:08 -0700</bug_when>
    <thetext>Can someone review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301413</commentid>
    <comment_count>3</comment_count>
      <attachid>71115</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-28 16:14:41 -0700</bug_when>
    <thetext>Comment on attachment 71115
fixes the bug

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

Looks good. I think we can do this without putting RenderTextControl code into Element.

&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2013
&gt;      if (isNativeTextControl()) {
&gt; -        RenderTextControl* textControl = toRenderTextControl(m_renderer);
&gt; -        textControl-&gt;setSelectionRange(range.start, range.start + range.length);
&gt; +        static_cast&lt;Element*&gt;(m_renderer-&gt;node())-&gt;setSelectionRange(range.start, range.start + range.length);
&gt;          return;
&gt;      }

Presumably what makes the cast here safe is that we know this is an Element since all native text controls are Elements. It seems a little arbitrary to have this call be a member of the Element class. Since it already has to check the type of the renderer, perhaps it should just be a function that takes a Node*, and not a member function at all. Then we wouldn’t need the typecast.

&gt; WebCore/dom/Element.cpp:1402
&gt; +void Element::setSelectionRange(int start, int end)

I see why this function takes a Node* argument, but not why it’s a member of Element (as I said above).

I think this function could be in the RenderTextControl.cpp file, it just needs to be changed so it takes a Node* rather than a RenderTextControl*, and thus either should be free function or a static member function. By leaving it in RenderTextControl.cpp you can even make the diff muhc smaller.

&gt; WebCore/dom/Element.cpp:1407
&gt; +    end = max(end, 0);
&gt; +    start = min(max(start, 0), end);

Why do this before checking renderer()? I would do it later after the early exits.

&gt; WebCore/html/HTMLFormControlElement.cpp:561
&gt; +    RenderTextControl* textControl = toRenderTextControl(renderer());

I’d just use the word “control” for this local variable. Needs to be a word, but it’s local so there’s no need to be specific.

&gt; WebCore/rendering/RenderTextControl.cpp:206
&gt; +bool RenderTextControl::isVisible() const
&gt; +{
&gt; +    return style()-&gt;visibility() != HIDDEN &amp;&amp; m_innerText &amp;&amp; m_innerText-&gt;renderer() &amp;&amp; m_innerText-&gt;renderBox()-&gt;height();
&gt; +}

I think that given what this function does, it should be called hasVisibleTextArea or something along those lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301897</commentid>
    <comment_count>4</comment_count>
      <attachid>72353</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 11:24:37 -0700</bug_when>
    <thetext>Created attachment 72353
Fixed per Darin&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301906</commentid>
    <comment_count>5</comment_count>
      <attachid>72355</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 11:32:51 -0700</bug_when>
    <thetext>Created attachment 72355
Fixed some details</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301907</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 11:34:09 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=72353) [details]
&gt; Fixed per Darin&apos;s comment

I&apos;m not sure if this approach is necessarily cleaner because we end up having 3-4 global functions like that by the time I finish removing all selection-related functions from RenderTextControl.

(In reply to comment #3)
&gt; Presumably what makes the cast here safe is that we know this is an Element since all native text controls are Elements. It seems a little arbitrary to have this call be a member of the Element class. Since it already has to check the type of the renderer, perhaps it should just be a function that takes a Node*, and not a member function at all. Then we wouldn’t need the typecast.

In some sense, Element was the LCD of all classes that called setSelectionRange. But I agree that Element having this function seems quite arbitrary.

&gt; I think this function could be in the RenderTextControl.cpp file, it just needs to be changed so it takes a Node* rather than a RenderTextControl*, and thus either should be free function or a static member function. By leaving it in RenderTextControl.cpp you can even make the diff muhc smaller.

I did this in my new patch but I&apos;m not sure if this is a good approach.  I&apos;m not a big fun of converting member functions to global functions...

&gt; &gt; WebCore/dom/Element.cpp:1407
&gt; &gt; +    end = max(end, 0);
&gt; &gt; +    start = min(max(start, 0), end);
&gt; 
&gt; Why do this before checking renderer()? I would do it later after the early exits.

Good point.  Fixed.

&gt; &gt; WebCore/html/HTMLFormControlElement.cpp:561
&gt; &gt; +    RenderTextControl* textControl = toRenderTextControl(renderer());
&gt; 
&gt; I’d just use the word “control” for this local variable. Needs to be a word, but it’s local so there’s no need to be specific.

Fixed.

&gt; &gt; WebCore/rendering/RenderTextControl.cpp:206
&gt; &gt; +bool RenderTextControl::isVisible() const
&gt; &gt; +{
&gt; &gt; +    return style()-&gt;visibility() != HIDDEN &amp;&amp; m_innerText &amp;&amp; m_innerText-&gt;renderer() &amp;&amp; m_innerText-&gt;renderBox()-&gt;height();
&gt; &gt; +}
&gt; 
&gt; I think that given what this function does, it should be called hasVisibleTextArea or something along those lines.

I made setSelectionRange a friend of RenderTextControl so that I don&apos;t have to make cacheSelection public and add this member function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301915</commentid>
    <comment_count>7</comment_count>
      <attachid>72353</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-29 11:44:10 -0700</bug_when>
    <thetext>Comment on attachment 72353
Fixed per Darin&apos;s comment

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

review- because of some of the null check stuff

&gt; WebCore/dom/InputElement.cpp:111
&gt; +    if (toRenderTextControl(element-&gt;renderer()))
&gt; +        setSelectionRange(element, start, end);

There is no need call toRenderTextControl just to check something for null. There’s no need for a null check here, since setSelectionRange already takes care of it.

&gt; WebCore/html/HTMLFormControlElement.cpp:551
&gt; +    WebCore::setSelectionRange(this, start, std::max(start, selectionEnd()));

I think you can use just &quot;max&quot;, not &quot;std::max&quot;, here. Also, seems fine to just call setSelectionRange, since it turns around and calls WebCore::setSelectionRange, both here and in the rest of the functions in this file.

&gt; WebCore/html/HTMLFormControlElement.cpp:556
&gt; +    WebCore::setSelectionRange(this, std::min(end, selectionStart()), end);

I think you can use just &quot;min&quot;, not &quot;std::min&quot;, here.

&gt; WebCore/html/HTMLFormControlElement.cpp:562
&gt; +    if (RenderTextControl* textControl = toRenderTextControl(renderer()))
&gt; +        WebCore::setSelectionRange(this, 0, textControl-&gt;text().length());

I think instead you can write:

    setSelectionRange(this, 0, numeric_limits&lt;int&gt;::max())

Avoid the need for a typecast or a local variable.

&gt; WebCore/rendering/RenderTextControl.cpp:219
&gt; +void setSelectionRange(Node* node, int start, int end)

Do we need to ref/deref node? Is there any danger that this code results in JavaScript code running that could delete the node?

&gt; WebCore/rendering/RenderTextControl.cpp:230
&gt; +    RenderTextControl* textControl = toRenderTextControl(node-&gt;renderer());

I would name this local variable just “control” for brevity.

&gt; WebCore/rendering/RenderTextControl.cpp:234
&gt; +    if (textControl-&gt;style()-&gt;visibility() == HIDDEN || !textControl-&gt;m_innerText
&gt; +        || !textControl-&gt;m_innerText-&gt;renderer() || !textControl-&gt;m_innerText-&gt;renderBox()-&gt;height()) {
&gt; +        textControl-&gt;cacheSelection(start, end);

I find this formatting, where the || lines up with the code below it, so hard to read that I go out of my way to avoid this sort of thing. Maybe we can factor all or part of this check into an inline helper function to avoid the long body for the if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301930</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-29 12:02:30 -0700</bug_when>
    <thetext>Attachment 72353 did not build on qt:
Build output: http://queues.webkit.org/results/4775068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301936</commentid>
    <comment_count>9</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-29 12:11:34 -0700</bug_when>
    <thetext>Attachment 72355 did not build on qt:
Build output: http://queues.webkit.org/results/4785072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301958</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 12:25:31 -0700</bug_when>
    <thetext>+robert@webkit.org

(In reply to comment #8)
&gt; Attachment 72353 [details] did not build on qt:
&gt; Build output: http://queues.webkit.org/results/4775068

This failure is happening in QWebPagePrivate::inputMethodEvent in WebKit/qt/qwebpage.cpp:

        case QInputMethodEvent::Selection: {
            hasSelection = true;
            // A selection in the inputMethodEvent is always reflected in the visible text
            if (renderer &amp;&amp; renderer-&gt;isTextControl()) {
                renderTextControl-&gt;setSelectionStart(qMin(a.start, (a.start + a.length)));
                renderTextControl-&gt;setSelectionEnd(qMax(a.start, (a.start + a.length)));
            }

I don&apos;t understand why WebKit layer is accessing RenderTextControl.  These functions aren&apos;t even exported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301976</commentid>
    <comment_count>11</comment_count>
      <attachid>72373</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 12:38:45 -0700</bug_when>
    <thetext>Created attachment 72373
More fixes per Darin&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301977</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 12:42:23 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; WebCore/dom/InputElement.cpp:111
&gt; &gt; +    if (toRenderTextControl(element-&gt;renderer()))
&gt; &gt; +        setSelectionRange(element, start, end);
&gt; 
&gt; There is no need call toRenderTextControl just to check something for null. There’s no need for a null check here, since setSelectionRange already takes care of it.

Oops, I missed that one.  Thanks for noticing that.

&gt; &gt; WebCore/html/HTMLFormControlElement.cpp:551
&gt; &gt; +    WebCore::setSelectionRange(this, start, std::max(start, selectionEnd()));
&gt; 
&gt; I think you can use just &quot;max&quot;, not &quot;std::max&quot;, here. Also, seems fine to just call setSelectionRange, since it turns around and calls WebCore::setSelectionRange, both here and in the rest of the functions in this file.

&gt; I think you can use just &quot;min&quot;, not &quot;std::min&quot;, here.

Done.

&gt; &gt; WebCore/html/HTMLFormControlElement.cpp:562
&gt; &gt; +    if (RenderTextControl* textControl = toRenderTextControl(renderer()))
&gt; &gt; +        WebCore::setSelectionRange(this, 0, textControl-&gt;text().length());
&gt; 
&gt; I think instead you can write:
&gt;     setSelectionRange(this, 0, numeric_limits&lt;int&gt;::max())

I don&apos;t think so. Neither setSelectionRange nor visiblePositionForIndex adjusts the offset.

&gt; &gt; WebCore/rendering/RenderTextControl.cpp:219
&gt; &gt; +void setSelectionRange(Node* node, int start, int end)
&gt; 
&gt; Do we need to ref/deref node? Is there any danger that this code results in JavaScript code running that could delete the node?

No.  Although selection change may trigger some events to fire, this is done at the very end of function at which point the existance of node is irrelevant.

&gt; &gt; WebCore/rendering/RenderTextControl.cpp:230
&gt; &gt; +    RenderTextControl* textControl = toRenderTextControl(node-&gt;renderer());
&gt; 
&gt; I would name this local variable just “control” for brevity.

Sorry, I forgot to fix that.

&gt; &gt; WebCore/rendering/RenderTextControl.cpp:234
&gt; &gt; +    if (textControl-&gt;style()-&gt;visibility() == HIDDEN || !textControl-&gt;m_innerText
&gt; &gt; +        || !textControl-&gt;m_innerText-&gt;renderer() || !textControl-&gt;m_innerText-&gt;renderBox()-&gt;height()) {
&gt; &gt; +        textControl-&gt;cacheSelection(start, end);
&gt; 
&gt; I find this formatting, where the || lines up with the code below it, so hard to read that I go out of my way to avoid this sort of thing. Maybe we can factor all or part of this check into an inline helper function to avoid the long body for the if.

Added hasVisibleTextArea back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301993</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-29 13:17:17 -0700</bug_when>
    <thetext>Attachment 72373 did not build on qt:
Build output: http://queues.webkit.org/results/4769075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302001</commentid>
    <comment_count>14</comment_count>
      <attachid>72381</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 13:23:13 -0700</bug_when>
    <thetext>Created attachment 72381
qt build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302026</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-29 13:58:46 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; &gt; WebCore/html/HTMLFormControlElement.cpp:562
&gt; &gt; &gt; +    if (RenderTextControl* textControl = toRenderTextControl(renderer()))
&gt; &gt; &gt; +        WebCore::setSelectionRange(this, 0, textControl-&gt;text().length());
&gt; &gt; 
&gt; &gt; I think instead you can write:
&gt; &gt;     setSelectionRange(this, 0, numeric_limits&lt;int&gt;::max())
&gt; 
&gt; I don&apos;t think so. Neither setSelectionRange nor visiblePositionForIndex adjusts the offset.

I think you are wrong.

The visiblePositionForIndex function handles large offsets correctly, because the CharacterIterator is limited to the range of the node contents. The only thing done with the index is that it’s passed to CharacterIterator, which will handle a massive number just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302029</commentid>
    <comment_count>16</comment_count>
      <attachid>72381</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-29 14:02:38 -0700</bug_when>
    <thetext>Comment on attachment 72381
qt build fix

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

&gt; WebCore/html/HTMLFormControlElement.cpp:563
&gt;      if (RenderTextControl* renderer = textRendererAfterUpdateLayout())
&gt; -        renderer-&gt;select();
&gt; +        setSelectionRange(0, renderer-&gt;text().length());

I still stand by my earlier suggestion. You can call setSelectionRange(0, numeric_limits&lt;int&gt;::max()) and it will work fine; seems better than calling textRendererAfterUpdateLayout here. Too bad numeric_limits is so ugly.

&gt; WebCore/rendering/RenderTextControl.h:113
&gt; +    bool hasVisibleTextArea() const;
&gt; +    friend void setSelectionRange(Node*, int start, int end);

I’d like to see these up with the private function members rather than at the bottom after the private data members.

&gt; WebKit/qt/Api/qwebpage.cpp:1057
&gt; +            if (renderer &amp;&amp; renderer-&gt;isTextControl() &amp;&amp; renderer-&gt;node())
&gt; +                setSelectionRange(renderer-&gt;node(), qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length)));

No need for the isTextControl() or node() checks in this if statement. The setSelectionRange function does those checks already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302034</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 14:06:24 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think you are wrong.
&gt; 
&gt; The visiblePositionForIndex function handles large offsets correctly, because the CharacterIterator is limited to the range of the node contents. The only thing done with the index is that it’s passed to CharacterIterator, which will handle a massive number just fine.

Ah, I didn&apos;t know that.

(In reply to comment #16)
&gt; (From update of attachment 72381 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72381&amp;action=review
&gt; 
&gt; &gt; WebCore/html/HTMLFormControlElement.cpp:563
&gt; &gt;      if (RenderTextControl* renderer = textRendererAfterUpdateLayout())
&gt; &gt; -        renderer-&gt;select();
&gt; &gt; +        setSelectionRange(0, renderer-&gt;text().length());
&gt; 
&gt; I still stand by my earlier suggestion. You can call setSelectionRange(0, numeric_limits&lt;int&gt;::max()) and it will work fine; seems better than calling textRendererAfterUpdateLayout here. Too bad numeric_limits is so ugly.

Will try.

&gt; &gt; WebCore/rendering/RenderTextControl.h:113
&gt; &gt; +    bool hasVisibleTextArea() const;
&gt; &gt; +    friend void setSelectionRange(Node*, int start, int end);
&gt; 
&gt; I’d like to see these up with the private function members rather than at the bottom after the private data members.

Will do.

&gt; &gt; WebKit/qt/Api/qwebpage.cpp:1057
&gt; &gt; +            if (renderer &amp;&amp; renderer-&gt;isTextControl() &amp;&amp; renderer-&gt;node())
&gt; &gt; +                setSelectionRange(renderer-&gt;node(), qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length)));
&gt; 
&gt; No need for the isTextControl() or node() checks in this if statement. The setSelectionRange function does those checks already.

I think we still do need to check renderer-&gt;node() here because setSelectionRange only assert that node is not null.  Or should we add early exit to setSelectionRange when node == 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302167</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-29 16:16:11 -0700</bug_when>
    <thetext>Committed r70945: &lt;http://trac.webkit.org/changeset/70945&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71115</attachid>
            <date>2010-10-18 19:06:46 -0700</date>
            <delta_ts>2010-10-29 11:24:32 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>bug-47870-20101018190645.patch</filename>
            <type>text/plain</type>
            <size>13178</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDAxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMTAtMTggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4NzAKKworICAgICAgICBNb3ZlZCBz
ZXRTZWxlY3Rpb25SYW5nZSBmcm9tIFJlbmRlclRleHRDb250cm9sIHRvIEVsZW1lbnQuCisgICAg
ICAgIEJlY2F1c2UgV01MSW5wdXRFbGVtZW50LCBIVE1MVGV4dEFyZWFFbGVtZW50LCBhbmQgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQgYWxsIHVzZSB0aGlzIGZ1bmN0aW9uLAorICAgICAgICB3
ZSBjb3VsZCBub3QgbW92ZSB0aGlzIGZ1bmN0aW9uIGludG8gSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQgb3IgSW5wdXRFbGVtZW50LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcmUgYWRkZWQg
c2luY2UgdGhlcmUgaXMgbm8gYmVoYXZpb3JhbCBjaGFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOiBDYWxscyBz
ZXRTZWxlY3RlZFRleHRSYW5nZS4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6IE1vdmVkIGZyb20gUmVuZGVy
VGV4dENvbnRyb2w6OnNldFNlbGVjdGlvblJhbmdlLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6
CisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1
dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6IENhbGxzIHNldFNlbGVjdGVkVGV4dFJh
bmdlLgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0KTogRGl0
dG8uCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnNldFZhbHVlKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjppc1Zpc2li
bGUpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKwog
MjAxMC0xMC0xOCAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzAwMTMp
CisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMDgsOCArMjAwOCw3IEBAIFBsYWluVGV4dFJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0
U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKQogewogICAgIGlm
IChpc05hdGl2ZVRleHRDb250cm9sKCkpIHsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRl
eHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChtX3JlbmRlcmVyKTsKLSAgICAgICAgdGV4
dENvbnRyb2wtPnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJh
bmdlLmxlbmd0aCk7CisgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlbmRlcmVyLT5u
b2RlKCkpLT5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQgKyByYW5n
ZS5sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDogV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDcwMDEzKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0
Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgiCkBAIC0xMzk4LDYg
KzEzOTksMzkgQEAgdm9pZCBFbGVtZW50OjpibHVyKCkKICAgICB9CiB9CiAKK3ZvaWQgRWxlbWVu
dDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIGRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgZW5kID0g
bWF4KGVuZCwgMCk7CisgICAgc3RhcnQgPSBtaW4obWF4KHN0YXJ0LCAwKSwgZW5kKTsKKworICAg
IGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dENvbnRyb2wgPSB0b1JlbmRl
clRleHRDb250cm9sKHJlbmRlcmVyKCkpOworCisgICAgaWYgKCF0ZXh0Q29udHJvbC0+aXNWaXNp
YmxlKCkpIHsKKyAgICAgICAgdGV4dENvbnRyb2wtPmNhY2hlU2VsZWN0aW9uKHN0YXJ0LCBlbmQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0
aW9uID0gdGV4dENvbnRyb2wtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0KTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb247CisgICAgaWYgKHN0YXJ0ID09IGVuZCkKKyAgICAg
ICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgZW5kUG9z
aXRpb24gPSB0ZXh0Q29udHJvbC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kKTsKKworICAg
IC8vIHN0YXJ0UG9zaXRpb24gYW5kIGVuZFBvc2l0aW9uIGNhbiBiZSBudWxsIHBvc2l0aW9uIGZv
ciBleGFtcGxlIHdoZW4KKyAgICAvLyAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSIgc3R5bGUg
YXR0cmlidXRlIGlzIHNwZWNpZmllZC4KKyAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc05vdE51bGwo
KSAmJiBlbmRQb3NpdGlvbi5pc05vdE51bGwoKSkKKyAgICAgICAgQVNTRVJUKHN0YXJ0UG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IHRoaXMg
JiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpID09IHRoaXMpOworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKK30KKwogU3RyaW5nIEVsZW1lbnQ6OmlubmVy
VGV4dCgpIGNvbnN0CiB7CiAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgbGF5b3V0LCBzaW5jZSBw
bGFpblRleHQgdXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJlZS4KSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDcwMDEzKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzgsNiArMjM4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGb2N1c0Fw
cGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwogICAgIHZvaWQgYmx1cigp
OwogCisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOworCiAg
ICAgU3RyaW5nIGlubmVyVGV4dCgpIGNvbnN0OwogICAgIFN0cmluZyBvdXRlclRleHQoKSBjb25z
dDsKICAKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNzAwMTMpCisrKyBXZWJDb3Jl
L2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwyNCArOTUsMTMgQEAg
dm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZQogICAgICAgICBpbnB1dEVs
ZW1lbnQtPnNlbGVjdCgpOwogICAgIGVsc2UKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2FjaGVk
IHNlbGVjdGlvbi4KLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uUmFuZ2UoaW5wdXRFbGVtZW50LCBl
bGVtZW50LCBkYXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCksIGRhdGEuY2FjaGVkU2VsZWN0aW9u
RW5kKCkpOworICAgICAgICBlbGVtZW50LT5zZXRTZWxlY3Rpb25SYW5nZShkYXRhLmNhY2hlZFNl
bGVjdGlvblN0YXJ0KCksIGRhdGEuY2FjaGVkU2VsZWN0aW9uRW5kKCkpOwogCiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQgJiYg
ZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24o
KS0+cmV2ZWFsU2VsZWN0aW9uKCk7CiB9CiAKLXZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxl
Y3Rpb25SYW5nZShJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwg
aW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVs
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbGVtZW50LT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLQotICAgIGlmIChSZW5kZXJUZXh0Q29u
dHJvbCogcmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sKGVsZW1lbnQtPnJlbmRlcmVyKCkp
KQotICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7Ci19Ci0K
IHZvaWQgSW5wdXRFbGVtZW50OjphYm91dFRvVW5sb2FkKElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50LCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRG
aWVsZCgpIHx8ICFlbGVtZW50LT5mb2N1c2VkKCkpCkluZGV4OiBXZWJDb3JlL2RvbS9JbnB1dEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAkocmV2aXNp
b24gNzAwMTMpCisrKyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzksNyArNzksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hGb2N1
c0V2ZW50KElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRj
aEJsdXJFdmVudChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgdXBk
YXRlRm9jdXNBcHBlYXJhbmNlKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVt
ZW50KiwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwotICAgIHN0YXRpYyB2b2lkIHVw
ZGF0ZVNlbGVjdGlvblJhbmdlKElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBpbnQgc3RhcnQsIGlu
dCBlbmQpOwogICAgIHN0YXRpYyB2b2lkIGFib3V0VG9VbmxvYWQoSW5wdXRFbGVtZW50KiwgRWxl
bWVudCopOwogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKElucHV0RWxlbWVu
dERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CiAgICAgLy8g
UmVwbGFjZXMgQ1JzIGFuZCBMRnMsIHNocmlua3MgdGhlIHZhbHVlIGZvciBzX21heGltdW1MZW5n
dGguCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lv
biA3MDAxMykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQ4LDI2ICs1NDgsMTkgQEAgUmVuZGVyVGV4dENvbnRyb2wqIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbAogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRT
ZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7Ci0gICAgaWYgKFJlbmRlclRleHRDb250cm9sKiBy
ZW5kZXJlciA9IHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkpCi0gICAgICAgIHJlbmRl
cmVyLT5zZXRTZWxlY3Rpb25TdGFydChzdGFydCk7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3Rh
cnQsIHN0ZDo6bWF4KHN0YXJ0LCBzZWxlY3Rpb25FbmQoKSkpOwogfQogCiB2b2lkIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKIHsKLSAgICBpZiAo
UmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlv
dXQoKSkKLSAgICAgICAgcmVuZGVyZXItPnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIHNldFNl
bGVjdGlvblJhbmdlKHN0ZDo6bWluKGVuZCwgc2VsZWN0aW9uU3RhcnQoKSksIGVuZCk7CiB9CiAK
IHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgpCiB7Ci0gICAgaWYgKFJl
bmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0
KCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZWxlY3QoKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQotewot
ICAgIGlmIChSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXJBZnRlclVw
ZGF0ZUxheW91dCgpKQotICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQs
IGVuZCk7CisgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0
Q29udHJvbChyZW5kZXJlcigpKTsKKyAgICBpZiAodGV4dENvbnRyb2wpCisgICAgICAgIHNldFNl
bGVjdGlvblJhbmdlKDAsIHRleHRDb250cm9sLT50ZXh0KCkubGVuZ3RoKCkpOwogfQogCiBpbnQg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gNzAwMTMpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyAr
MTg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKICAgICB2
b2lkIHNldFNlbGVjdGlvbkVuZChpbnQpOwogICAgIHZvaWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBz
ZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwogICAgIFBhc3NSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvbigpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MDAxMykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwMSw3ICsxMjAxLDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdAogICAgIGlmIChpc1RleHRGaWVsZCgpKSB7
CiAgICAgICAgIHVuc2lnbmVkIG1heCA9IG1fZGF0YS52YWx1ZSgpLmxlbmd0aCgpOwogICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQotICAgICAgICAgICAgSW5w
dXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSh0aGlzLCB0aGlzLCBtYXgsIG1heCk7Cisg
ICAgICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZShtYXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNhY2hlU2VsZWN0aW9uKG1heCwgbWF4KTsKICAgICAgICAgbV9kYXRhLnNldFN1
Z2dlc3RlZFZhbHVlKFN0cmluZygpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAJKHJldmlzaW9uIDcwMDEzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDExIEBAIHZvaWQg
UmVuZGVyVGV4dENvbnRyb2w6OnNldExhc3RDaGFuZ2VXYXMKICAgICBkb2N1bWVudCgpLT5zZXRJ
Z25vcmVBdXRvZm9jdXMobGFzdENoYW5nZVdhc1VzZXJFZGl0KTsKIH0KIAorYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbDo6aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3R5bGUoKS0+dmlz
aWJpbGl0eSgpICE9IEhJRERFTiAmJiBtX2lubmVyVGV4dCAmJiBtX2lubmVyVGV4dC0+cmVuZGVy
ZXIoKSAmJiBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPmhlaWdodCgpOworfQorCiBpbnQgUmVu
ZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvblN0YXJ0KCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwpAQCAtMjE2LDUyICsyMjEsNiBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2w6
OnNlbGVjdGlvbkVuZCgpCiAgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGZyYW1l
LT5zZWxlY3Rpb24oKS0+ZW5kKCkpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRT
ZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCi17Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KG5v
ZGUoKSk7Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgZWxlbWVudC0+
c2VsZWN0aW9uRW5kKCkpKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2VsZWN0
aW9uRW5kKGludCBlbmQpCi17Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KG5vZGUoKSk7Ci0g
ICAgc2V0U2VsZWN0aW9uUmFuZ2UobWluKGVuZCwgZWxlbWVudC0+c2VsZWN0aW9uU3RhcnQoKSks
IGVuZCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdCgpCi17Ci0gICAgc2V0
U2VsZWN0aW9uUmFuZ2UoMCwgdGV4dCgpLmxlbmd0aCgpKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0
Q29udHJvbDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAgIGVu
ZCA9IG1heChlbmQsIDApOwotICAgIHN0YXJ0ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7Ci0K
LSAgICBBU1NFUlQoIWRvY3VtZW50KCktPmNoaWxkTmVlZHNBbmROb3RJblN0eWxlUmVjYWxjKCkp
OwotCi0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgIW1faW5uZXJU
ZXh0IHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyZXIoKSB8fCAhbV9pbm5lclRleHQtPnJlbmRlckJv
eCgpLT5oZWlnaHQoKSkgewotICAgICAgICBjYWNoZVNlbGVjdGlvbihzdGFydCwgZW5kKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9
IHZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5k
UG9zaXRpb247Ci0gICAgaWYgKHN0YXJ0ID09IGVuZCkKLSAgICAgICAgZW5kUG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9z
aXRpb25Gb3JJbmRleChlbmQpOwotCi0gICAgLy8gc3RhcnRQb3NpdGlvbiBhbmQgZW5kUG9zaXRp
b24gY2FuIGJlIG51bGwgcG9zaXRpb24gZm9yIGV4YW1wbGUgd2hlbgotICAgIC8vICItd2Via2l0
LXVzZXItc2VsZWN0OiBub25lIiBzdHlsZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLgotICAgIGlm
IChzdGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIGVuZFBvc2l0aW9uLmlzTm90TnVsbCgpKSB7
Ci0gICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKCkgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUoKSk7Ci0gICAgfQotICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJh
bWUoKSkKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uKTsKLX0KLQogUGFzc1JlZlB0cjxSYW5nZT4gUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlv
bihpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lubmVyVGV4dCkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkocmV2aXNpb24gNzAwMTMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxOCArNDAsMTYgQEAgcHVibGljOgogICAgIGJvb2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q2hhbmdlV2FzVXNlckVkaXQ7IH0KICAgICB2b2lkIHNl
dExhc3RDaGFuZ2VXYXNVc2VyRWRpdChib29sIGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCk7CiAKKyAg
ICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwogICAgIGludCBzZWxlY3Rpb25TdGFydCgpOwogICAg
IGludCBzZWxlY3Rpb25FbmQoKTsKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7Ci0g
ICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQoaW50KTsKLSAgICB2b2lkIHNlbGVjdCgpOwotICAgIHZv
aWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKICAgICBQYXNzUmVmUHRy
PFJhbmdlPiBzZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAgIFN0cmluZyB0ZXh0KCk7CiAgICAgU3Ry
aW5nIHRleHRXaXRoSGFyZExpbmVCcmVha3MoKTsKICAgICB2b2lkIHNlbGVjdGlvbkNoYW5nZWQo
Ym9vbCB1c2VyVHJpZ2dlcmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50
IHN0YXJ0LCBpbnQgZW5kKSA9IDA7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXgoaW50IGluZGV4KTsKICAgICBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CkBAIC04MCw3ICs3OCw2IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKICAg
ICB2aXJ0dWFsIGludCBwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGluZUhl
aWdodChpbnQgbGluZUhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjYWNoZVNlbGVjdGlv
bihpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxl
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogdGV4dEJhc2VTdHlsZSgpIGNv
bnN0ID0gMDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72353</attachid>
            <date>2010-10-29 11:24:37 -0700</date>
            <delta_ts>2010-10-29 12:38:36 -0700</delta_ts>
            <desc>Fixed per Darin&apos;s comment</desc>
            <filename>bug-47870-20101029112435.patch</filename>
            <type>text/plain</type>
            <size>8283</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDkwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMTAtMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4NzAKKworICAgICAgICBNYWRlIFJl
bmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZSBhIGdsb2JhbCBmdW5jdGlvbi4KKyAg
ICAgICAgUmVtb3ZlZCBzZXRTZWxlY3Rpb25TdGFydCwgc2V0U2VsZWN0aW9uRW5kLCBhbmQgc2Vs
ZWN0IGZyb20gUmVuZGVyVGV4dENvbnRyb2wuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSBh
ZGRlZCBzaW5jZSB0aGVyZSBpcyBubyBiZWhhdmlvcmFsIGNoYW5nZS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6IENh
bGxzIHNldFNlbGVjdGVkVGV4dFJhbmdlLgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSk6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3Rh
cnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzZXRTZWxlY3Rpb25FbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZWxlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6IFNlZSBhYm92ZS4KKyAgICAgICAg
KFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuaDogRGl0dG8uCisKIDIwMTAtMTAtMjkgIFRvbnkgQ2hhbmcgIDx0b255QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzA4NTAuCklu
ZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA3MDgyMSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4OSwxMSArMTk4
OSwxMCBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0CiB2b2lkIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWlu
VGV4dFJhbmdlJiByYW5nZSkKIHsKICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpKSB7Ci0g
ICAgICAgIFJlbmRlclRleHRDb250cm9sKiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRy
b2wobV9yZW5kZXJlcik7Ci0gICAgICAgIHRleHRDb250cm9sLT5zZXRTZWxlY3Rpb25SYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOworICAgICAgICBzZXRTZWxl
Y3Rpb25SYW5nZShtX3JlbmRlcmVyLT5ub2RlKCksIHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCAr
IHJhbmdlLmxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNzA4
MjEpCisrKyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcsMTAgKzEwNyw4IEBAIHZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSgK
ICAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0KLSAgICBpZiAoUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5k
ZXJUZXh0Q29udHJvbChlbGVtZW50LT5yZW5kZXJlcigpKSkKLSAgICAgICAgcmVuZGVyZXItPnNl
dFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOworICAgIGlmICh0b1JlbmRlclRleHRDb250cm9s
KGVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZShlbGVtZW50
LCBzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MDgyMSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ4
LDI2ICs1NDgsMjMgQEAgUmVuZGVyVGV4dENvbnRyb2wqIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbAog
CiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQg
c3RhcnQpCiB7Ci0gICAgaWYgKFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRleHRSZW5k
ZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25T
dGFydChzdGFydCk7CisgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgc3RhcnQs
IHN0ZDo6bWF4KHN0YXJ0LCBzZWxlY3Rpb25FbmQoKSkpOwogfQogCiB2b2lkIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKIHsKLSAgICBpZiAoUmVu
ZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQo
KSkKLSAgICAgICAgcmVuZGVyZXItPnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIFdlYkNvcmU6
OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIHN0ZDo6bWluKGVuZCwgc2VsZWN0aW9uU3RhcnQoKSks
IGVuZCk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgpCiB7
Ci0gICAgaWYgKFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRleHRSZW5kZXJlckFmdGVy
VXBkYXRlTGF5b3V0KCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZWxlY3QoKTsKKyAgICBpZiAoUmVu
ZGVyVGV4dENvbnRyb2wqIHRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJl
cigpKSkKKyAgICAgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgMCwgdGV4dENv
bnRyb2wtPnRleHQoKS5sZW5ndGgoKSk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBpZiAo
UmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlv
dXQoKSkKLSAgICAgICAgcmVuZGVyZXItPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOwor
ICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIHN0YXJ0LCBlbmQpOwogfQogCiBp
bnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDcwODIxKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTYsNDkgKzIxNiwzOSBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvbkVuZCgp
CiAgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGZyYW1lLT5zZWxlY3Rpb24oKS0+
ZW5kKCkpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25TdGFydChp
bnQgc3RhcnQpCit2b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUqIG5vZGUsIGludCBzdGFydCwg
aW50IGVuZCkKIHsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBzZXRT
ZWxlY3Rpb25SYW5nZShzdGFydCwgbWF4KHN0YXJ0LCBlbGVtZW50LT5zZWxlY3Rpb25FbmQoKSkp
OwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkK
LXsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBzZXRTZWxlY3Rpb25S
YW5nZShtaW4oZW5kLCBlbGVtZW50LT5zZWxlY3Rpb25TdGFydCgpKSwgZW5kKTsKLX0KKyAgICBB
U1NFUlQobm9kZSk7CisgICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdCgpCi17
Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2UoMCwgdGV4dCgpLmxlbmd0aCgpKTsKLX0KKyAgICBpZiAo
IW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dENvbnRyb2woKSkK
KyAgICAgICAgcmV0dXJuOwogCi12b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25S
YW5nZShpbnQgc3RhcnQsIGludCBlbmQpCi17CiAgICAgZW5kID0gbWF4KGVuZCwgMCk7CiAgICAg
c3RhcnQgPSBtaW4obWF4KHN0YXJ0LCAwKSwgZW5kKTsKIAotICAgIEFTU0VSVCghZG9jdW1lbnQo
KS0+Y2hpbGROZWVkc0FuZE5vdEluU3R5bGVSZWNhbGMoKSk7CisgICAgUmVuZGVyVGV4dENvbnRy
b2wqIHRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29udHJvbChub2RlLT5yZW5kZXJlcigpKTsK
IAotICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8ICFtX2lubmVyVGV4
dCB8fCAhbV9pbm5lclRleHQtPnJlbmRlcmVyKCkgfHwgIW1faW5uZXJUZXh0LT5yZW5kZXJCb3go
KS0+aGVpZ2h0KCkpIHsKLSAgICAgICAgY2FjaGVTZWxlY3Rpb24oc3RhcnQsIGVuZCk7CisgICAg
aWYgKHRleHRDb250cm9sLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8ICF0ZXh0
Q29udHJvbC0+bV9pbm5lclRleHQKKyAgICAgICAgfHwgIXRleHRDb250cm9sLT5tX2lubmVyVGV4
dC0+cmVuZGVyZXIoKSB8fCAhdGV4dENvbnRyb2wtPm1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+
aGVpZ2h0KCkpIHsKKyAgICAgICAgdGV4dENvbnRyb2wtPmNhY2hlU2VsZWN0aW9uKHN0YXJ0LCBl
bmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoc3RhcnQpOworICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gdGV4dENvbnRyb2wtPnZpc2libGVQb3NpdGlvbkZvckluZGV4
KHN0YXJ0KTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb247CiAgICAgaWYgKHN0YXJ0
ID09IGVuZCkKICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwogICAgIGVsc2UK
LSAgICAgICAgZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChlbmQpOworICAg
ICAgICBlbmRQb3NpdGlvbiA9IHRleHRDb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChl
bmQpOwogCiAgICAgLy8gc3RhcnRQb3NpdGlvbiBhbmQgZW5kUG9zaXRpb24gY2FuIGJlIG51bGwg
cG9zaXRpb24gZm9yIGV4YW1wbGUgd2hlbgogICAgIC8vICItd2Via2l0LXVzZXItc2VsZWN0OiBu
b25lIiBzdHlsZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLgogICAgIGlmIChzdGFydFBvc2l0aW9u
LmlzTm90TnVsbCgpICYmIGVuZFBvc2l0aW9uLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIEFTU0VS
VChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKSA9PSBub2RlKCkgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNo
YWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUoKSk7CisgICAgICAgIEFTU0VSVChzdGFydFBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2Rl
ICYmIGVuZFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKSA9PSBub2RlKTsKICAgICB9CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24g
PSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAotICAgIGlm
IChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKQorICAgIGlmIChGcmFtZSogZnJhbWUgPSBu
b2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNl
dFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmgJKHJldmlzaW9uIDcwODIxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDYgQEAgcHVibGlj
OgogCiAgICAgaW50IHNlbGVjdGlvblN0YXJ0KCk7CiAgICAgaW50IHNlbGVjdGlvbkVuZCgpOwot
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbkVu
ZChpbnQpOwotICAgIHZvaWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShp
bnQgc3RhcnQsIGludCBlbmQpOwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbihpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFu
Z2VkKCk7CkBAIC0xMTIsOCArMTA4LDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3dhc0NoYW5n
ZWRTaW5jZUxhc3RDaGFuZ2VFdmVudDsKICAgICBib29sIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0
OwogICAgIFJlZlB0cjxUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ+IG1faW5uZXJUZXh0Owor
CisgICAgZnJpZW5kIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoTm9kZSosIGludCBzdGFydCwgaW50
IGVuZCk7CiB9OwogCit2b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUqLCBpbnQgc3RhcnQsIGlu
dCBlbmQpOworCiBpbmxpbmUgUmVuZGVyVGV4dENvbnRyb2wqIHRvUmVuZGVyVGV4dENvbnRyb2wo
UmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7IAogICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNUZXh0Q29udHJvbCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72355</attachid>
            <date>2010-10-29 11:32:51 -0700</date>
            <delta_ts>2010-10-29 12:38:40 -0700</delta_ts>
            <desc>Fixed some details</desc>
            <filename>bug-47870-20101029113250.patch</filename>
            <type>text/plain</type>
            <size>8173</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDkwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMTAtMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4NzAKKworICAgICAgICBNYWRlIFJl
bmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZSBhIGdsb2JhbCBmdW5jdGlvbi4KKyAg
ICAgICAgUmVtb3ZlZCBzZXRTZWxlY3Rpb25TdGFydCwgc2V0U2VsZWN0aW9uRW5kLCBhbmQgc2Vs
ZWN0IGZyb20gUmVuZGVyVGV4dENvbnRyb2wuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSBh
ZGRlZCBzaW5jZSB0aGVyZSBpcyBubyBiZWhhdmlvcmFsIGNoYW5nZS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6IENh
bGxzIHNldFNlbGVjdGVkVGV4dFJhbmdlLgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSk6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3Rh
cnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzZXRTZWxlY3Rpb25FbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZWxlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6IFNlZSBhYm92ZS4KKyAgICAgICAg
KFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuaDogRGl0dG8uCisKIDIwMTAtMTAtMjkgIFRvbnkgQ2hhbmcgIDx0b255QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzA4NTAuCklu
ZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA3MDgyMSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4OSwxMSArMTk4
OSwxMCBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0CiB2b2lkIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWlu
VGV4dFJhbmdlJiByYW5nZSkKIHsKICAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJvbCgpKSB7Ci0g
ICAgICAgIFJlbmRlclRleHRDb250cm9sKiB0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRy
b2wobV9yZW5kZXJlcik7Ci0gICAgICAgIHRleHRDb250cm9sLT5zZXRTZWxlY3Rpb25SYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOworICAgICAgICBzZXRTZWxl
Y3Rpb25SYW5nZShtX3JlbmRlcmVyLT5ub2RlKCksIHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCAr
IHJhbmdlLmxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNzA4
MjEpCisrKyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcsMTAgKzEwNyw4IEBAIHZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSgK
ICAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0KLSAgICBpZiAoUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5k
ZXJUZXh0Q29udHJvbChlbGVtZW50LT5yZW5kZXJlcigpKSkKLSAgICAgICAgcmVuZGVyZXItPnNl
dFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOworICAgIGlmICh0b1JlbmRlclRleHRDb250cm9s
KGVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZShlbGVtZW50
LCBzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MDgyMSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ4
LDI2ICs1NDgsMjMgQEAgUmVuZGVyVGV4dENvbnRyb2wqIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbAog
CiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQg
c3RhcnQpCiB7Ci0gICAgaWYgKFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRleHRSZW5k
ZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25T
dGFydChzdGFydCk7CisgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgc3RhcnQs
IHN0ZDo6bWF4KHN0YXJ0LCBzZWxlY3Rpb25FbmQoKSkpOwogfQogCiB2b2lkIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKIHsKLSAgICBpZiAoUmVu
ZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQo
KSkKLSAgICAgICAgcmVuZGVyZXItPnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIFdlYkNvcmU6
OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIHN0ZDo6bWluKGVuZCwgc2VsZWN0aW9uU3RhcnQoKSks
IGVuZCk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgpCiB7
CiAgICAgaWYgKFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRleHRSZW5kZXJlckFmdGVy
VXBkYXRlTGF5b3V0KCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZWxlY3QoKTsKKyAgICAgICAgV2Vi
Q29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgMCwgcmVuZGVyZXItPnRleHQoKS5sZW5ndGgo
KSk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJh
bmdlKGludCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBpZiAoUmVuZGVyVGV4dENvbnRyb2wqIHJl
bmRlcmVyID0gdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKSkKLSAgICAgICAgcmVuZGVy
ZXItPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpOworICAgIFdlYkNvcmU6OnNldFNlbGVj
dGlvblJhbmdlKHRoaXMsIHN0YXJ0LCBlbmQpOwogfQogCiBpbnQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDcwODIxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNDkgKzIxNiwzOSBAQCBp
bnQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvbkVuZCgpCiAgICAgcmV0dXJuIGluZGV4Rm9y
VmlzaWJsZVBvc2l0aW9uKGZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkpOwogfQogCi12b2lkIFJl
bmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCit2b2lkIHNldFNl
bGVjdGlvblJhbmdlKE5vZGUqIG5vZGUsIGludCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwg
bWF4KHN0YXJ0LCBlbGVtZW50LT5zZWxlY3Rpb25FbmQoKSkpOwotfQotCi12b2lkIFJlbmRlclRl
eHRDb250cm9sOjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKLXsKLSAgICBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Kj4obm9kZSgpKTsKLSAgICBzZXRTZWxlY3Rpb25SYW5nZShtaW4oZW5kLCBlbGVtZW50
LT5zZWxlY3Rpb25TdGFydCgpKSwgZW5kKTsKLX0KKyAgICBBU1NFUlQobm9kZSk7CisgICAgbm9k
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAK
LXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdCgpCi17Ci0gICAgc2V0U2VsZWN0aW9uUmFu
Z2UoMCwgdGV4dCgpLmxlbmd0aCgpKTsKLX0KKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkgfHwg
IW5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuOwogCi12
b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBl
bmQpCi17CiAgICAgZW5kID0gbWF4KGVuZCwgMCk7CiAgICAgc3RhcnQgPSBtaW4obWF4KHN0YXJ0
LCAwKSwgZW5kKTsKIAotICAgIEFTU0VSVCghZG9jdW1lbnQoKS0+Y2hpbGROZWVkc0FuZE5vdElu
U3R5bGVSZWNhbGMoKSk7CisgICAgUmVuZGVyVGV4dENvbnRyb2wqIGNvbnRyb2wgPSB0b1JlbmRl
clRleHRDb250cm9sKG5vZGUtPnJlbmRlcmVyKCkpOwogCi0gICAgaWYgKHN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBISURERU4gfHwgIW1faW5uZXJUZXh0IHx8ICFtX2lubmVyVGV4dC0+cmVuZGVy
ZXIoKSB8fCAhbV9pbm5lclRleHQtPnJlbmRlckJveCgpLT5oZWlnaHQoKSkgewotICAgICAgICBj
YWNoZVNlbGVjdGlvbihzdGFydCwgZW5kKTsKKyAgICBpZiAoY29udHJvbC0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IEhJRERFTiB8fCAhY29udHJvbC0+bV9pbm5lclRleHQKKyAgICAgICAgfHwg
IWNvbnRyb2wtPm1faW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFjb250cm9sLT5tX2lubmVyVGV4
dC0+cmVuZGVyQm94KCktPmhlaWdodCgpKSB7CisgICAgICAgIGNvbnRyb2wtPmNhY2hlU2VsZWN0
aW9uKHN0YXJ0LCBlbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoc3RhcnQpOworICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gY29udHJvbC0+dmlzaWJsZVBvc2l0aW9u
Rm9ySW5kZXgoc3RhcnQpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbjsKICAgICBp
ZiAoc3RhcnQgPT0gZW5kKQogICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CiAg
ICAgZWxzZQotICAgICAgICBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KGVu
ZCk7CisgICAgICAgIGVuZFBvc2l0aW9uID0gY29udHJvbC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5k
ZXgoZW5kKTsKIAogICAgIC8vIHN0YXJ0UG9zaXRpb24gYW5kIGVuZFBvc2l0aW9uIGNhbiBiZSBu
dWxsIHBvc2l0aW9uIGZvciBleGFtcGxlIHdoZW4KICAgICAvLyAiLXdlYmtpdC11c2VyLXNlbGVj
dDogbm9uZSIgc3R5bGUgYXR0cmlidXRlIGlzIHNwZWNpZmllZC4KICAgICBpZiAoc3RhcnRQb3Np
dGlvbi5pc05vdE51bGwoKSAmJiBlbmRQb3NpdGlvbi5pc05vdE51bGwoKSkgewotICAgICAgICBB
U1NFUlQoc3RhcnRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCkgPT0gbm9kZSgpICYmIGVuZFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKCkpOworICAgICAgICBBU1NFUlQoc3RhcnRQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0g
bm9kZSAmJiBlbmRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCkgPT0gbm9kZSk7CiAgICAgfQogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0
aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAKLSAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKKyAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5oCShyZXZpc2lvbiA3MDgyMSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0Miw2IEBAIHB1
YmxpYzoKIAogICAgIGludCBzZWxlY3Rpb25TdGFydCgpOwogICAgIGludCBzZWxlY3Rpb25FbmQo
KTsKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rp
b25FbmQoaW50KTsKLSAgICB2b2lkIHNlbGVjdCgpOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFu
Z2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24o
aW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFz
Q2hhbmdlZCgpOwpAQCAtMTEyLDggKzEwOCwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV93YXND
aGFuZ2VkU2luY2VMYXN0Q2hhbmdlRXZlbnQ7CiAgICAgYm9vbCBtX2xhc3RDaGFuZ2VXYXNVc2Vy
RWRpdDsKICAgICBSZWZQdHI8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBtX2lubmVyVGV4
dDsKKworICAgIGZyaWVuZCB2b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUqLCBpbnQgc3RhcnQs
IGludCBlbmQpOwogfTsKIAordm9pZCBzZXRTZWxlY3Rpb25SYW5nZShOb2RlKiwgaW50IHN0YXJ0
LCBpbnQgZW5kKTsKKwogaW5saW5lIFJlbmRlclRleHRDb250cm9sKiB0b1JlbmRlclRleHRDb250
cm9sKFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAKICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmpl
Y3QtPmlzVGV4dENvbnRyb2woKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72373</attachid>
            <date>2010-10-29 12:38:45 -0700</date>
            <delta_ts>2010-10-29 13:23:08 -0700</delta_ts>
            <desc>More fixes per Darin&apos;s comment</desc>
            <filename>bug-47870-20101029123844.patch</filename>
            <type>text/plain</type>
            <size>10592</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDkwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMTAtMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4NzAKKworICAgICAgICBNYWRlIFJl
bmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZSBhIGdsb2JhbCBmdW5jdGlvbi4KKyAg
ICAgICAgUmVtb3ZlZCBzZXRTZWxlY3Rpb25TdGFydCwgc2V0U2VsZWN0aW9uRW5kLCBhbmQgc2Vs
ZWN0IGZyb20gUmVuZGVyVGV4dENvbnRyb2wuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSBh
ZGRlZCBzaW5jZSB0aGVyZSBpcyBubyBiZWhhdmlvcmFsIGNoYW5nZS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6IENh
bGxzIHNldFNlbGVjdGVkVGV4dFJhbmdlLgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSk6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3Rh
cnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzZXRTZWxlY3Rpb25FbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZWxlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbDo6aGFzVmlzaWJsZVRleHRBcmVhKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzZXRTZWxlY3Rpb25SYW5nZSk6IFNlZSBhYm92ZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKwogMjAxMC0xMC0yOSAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDg1MC4K
SW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDcwODIxKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTg5LDExICsx
OTg5LDEwIEBAIFBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QKIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxh
aW5UZXh0UmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChpc05hdGl2ZVRleHRDb250cm9sKCkpIHsK
LSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRDb250cm9sID0gdG9SZW5kZXJUZXh0Q29u
dHJvbChtX3JlbmRlcmVyKTsKLSAgICAgICAgdGV4dENvbnRyb2wtPnNldFNlbGVjdGlvblJhbmdl
KHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7CisgICAgICAgIHNldFNl
bGVjdGlvblJhbmdlKG1fcmVuZGVyZXItPm5vZGUoKSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLnN0YXJ0
ICsgcmFuZ2UubGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1
bWVudCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3
MDgyMSkKKysrIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNywxMCArMTA3LDcgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdl
KAogICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBlbGVtZW50LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKLQotICAgIGlmIChSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0b1Jl
bmRlclRleHRDb250cm9sKGVsZW1lbnQtPnJlbmRlcmVyKCkpKQotICAgICAgICByZW5kZXJlci0+
c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2UoZWxl
bWVudCwgc3RhcnQsIGVuZCk7CiB9CiAKIHZvaWQgSW5wdXRFbGVtZW50OjphYm91dFRvVW5sb2Fk
KElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50KQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNzA4MjEpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAgOiBIVE1MRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkKQEAgLTU0OCwyNiArNTQ5LDIzIEBAIFJlbmRlclRleHRDb250
cm9sKiBIVE1MVGV4dEZvcm1Db250cm9sRWwKIAogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQogewotICAgIGlmIChSZW5kZXJUZXh0
Q29udHJvbCogcmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXJBZnRlclVwZGF0ZUxheW91dCgpKQotICAg
ICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOworICAgIHNldFNlbGVjdGlv
blJhbmdlKHN0YXJ0LCBtYXgoc3RhcnQsIHNlbGVjdGlvbkVuZCgpKSk7CiB9CiAKIHZvaWQgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChpbnQgZW5kKQogewotICAg
IGlmIChSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXJBZnRlclVwZGF0
ZUxheW91dCgpKQotICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uRW5kKGVuZCk7CisgICAg
c2V0U2VsZWN0aW9uUmFuZ2UobWluKGVuZCwgc2VsZWN0aW9uU3RhcnQoKSksIGVuZCk7CiB9CiAK
IHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgpCiB7CiAgICAgaWYgKFJl
bmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0
KCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZWxlY3QoKTsKKyAgICAgICAgc2V0U2VsZWN0aW9uUmFu
Z2UoMCwgcmVuZGVyZXItPnRleHQoKS5sZW5ndGgoKSk7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKIHsK
LSAgICBpZiAoUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdGV4dFJlbmRlcmVyQWZ0ZXJV
cGRhdGVMYXlvdXQoKSkKLSAgICAgICAgcmVuZGVyZXItPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0
LCBlbmQpOworICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIHN0YXJ0LCBlbmQp
OwogfQogCiBpbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDcw
ODIxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTYsNDkgKzIxNiw0MyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVj
dGlvbkVuZCgpCiAgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGZyYW1lLT5zZWxl
Y3Rpb24oKS0+ZW5kKCkpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rp
b25TdGFydChpbnQgc3RhcnQpCitib29sIFJlbmRlclRleHRDb250cm9sOjpoYXNWaXNpYmxlVGV4
dEFyZWEoKSBjb25zdAogewotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihub2RlKCkpOwotICAg
IHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBtYXgoc3RhcnQsIGVsZW1lbnQtPnNlbGVjdGlvbkVu
ZCgpKSk7CisgICAgcmV0dXJuIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgIW1f
aW5uZXJUZXh0IHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyZXIoKSB8fCAhbV9pbm5lclRleHQtPnJl
bmRlckJveCgpLT5oZWlnaHQoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2Vs
ZWN0aW9uRW5kKGludCBlbmQpCit2b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUqIG5vZGUsIGlu
dCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsK
LSAgICBzZXRTZWxlY3Rpb25SYW5nZShtaW4oZW5kLCBlbGVtZW50LT5zZWxlY3Rpb25TdGFydCgp
KSwgZW5kKTsKLX0KKyAgICBBU1NFUlQobm9kZSk7CisgICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLXZvaWQgUmVuZGVyVGV4dENv
bnRyb2w6OnNlbGVjdCgpCi17Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2UoMCwgdGV4dCgpLmxlbmd0
aCgpKTsKLX0KKyAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkt
PmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFJlbmRlclRleHRDb250
cm9sOjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpCi17CiAgICAgZW5kID0g
bWF4KGVuZCwgMCk7CiAgICAgc3RhcnQgPSBtaW4obWF4KHN0YXJ0LCAwKSwgZW5kKTsKIAotICAg
IEFTU0VSVCghZG9jdW1lbnQoKS0+Y2hpbGROZWVkc0FuZE5vdEluU3R5bGVSZWNhbGMoKSk7Cisg
ICAgUmVuZGVyVGV4dENvbnRyb2wqIGNvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sKG5vZGUt
PnJlbmRlcmVyKCkpOwogCi0gICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4g
fHwgIW1faW5uZXJUZXh0IHx8ICFtX2lubmVyVGV4dC0+cmVuZGVyZXIoKSB8fCAhbV9pbm5lclRl
eHQtPnJlbmRlckJveCgpLT5oZWlnaHQoKSkgewotICAgICAgICBjYWNoZVNlbGVjdGlvbihzdGFy
dCwgZW5kKTsKKyAgICBpZiAoY29udHJvbC0+aGFzVmlzaWJsZVRleHRBcmVhKCkpIHsKKyAgICAg
ICAgY29udHJvbC0+Y2FjaGVTZWxlY3Rpb24oc3RhcnQsIGVuZCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRp
b25Gb3JJbmRleChzdGFydCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBj
b250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChzdGFydCk7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFBvc2l0aW9uOwogICAgIGlmIChzdGFydCA9PSBlbmQpCiAgICAgICAgIGVuZFBvc2l0
aW9uID0gc3RhcnRQb3NpdGlvbjsKICAgICBlbHNlCi0gICAgICAgIGVuZFBvc2l0aW9uID0gdmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kKTsKKyAgICAgICAgZW5kUG9zaXRpb24gPSBjb250cm9s
LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChlbmQpOwogCiAgICAgLy8gc3RhcnRQb3NpdGlvbiBh
bmQgZW5kUG9zaXRpb24gY2FuIGJlIG51bGwgcG9zaXRpb24gZm9yIGV4YW1wbGUgd2hlbgogICAg
IC8vICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lIiBzdHlsZSBhdHRyaWJ1dGUgaXMgc3BlY2lm
aWVkLgogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIGVuZFBvc2l0aW9uLmlz
Tm90TnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKCkgJiYgZW5kUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUoKSk7
CisgICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlICYmIGVuZFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKTsKICAgICB9CiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKTsKIAotICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgp
KQorICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwogfQog
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9uIDcwODIx
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsMTAgKzQyLDYgQEAgcHVibGljOgogCiAgICAgaW50IHNlbGVjdGlvblN0YXJ0KCk7
CiAgICAgaW50IHNlbGVjdGlvbkVuZCgpOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50
KTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChpbnQpOwotICAgIHZvaWQgc2VsZWN0KCk7Ci0g
ICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwogICAgIFBhc3NS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwogCiAgICAg
dmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CkBAIC0xMTIsOCArMTA4LDEzIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX3dhc0NoYW5nZWRTaW5jZUxhc3RDaGFuZ2VFdmVudDsKICAgICBi
b29sIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0OwogICAgIFJlZlB0cjxUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQ+IG1faW5uZXJUZXh0OworCisgICAgYm9vbCBoYXNWaXNpYmxlVGV4dEFyZWEo
KSBjb25zdDsKKyAgICBmcmllbmQgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShOb2RlKiwgaW50IHN0
YXJ0LCBpbnQgZW5kKTsKIH07CiAKK3ZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoTm9kZSosIGludCBz
dGFydCwgaW50IGVuZCk7CisKIGlubGluZSBSZW5kZXJUZXh0Q29udHJvbCogdG9SZW5kZXJUZXh0
Q29udHJvbChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsgCiAgICAgQVNTRVJUKCFvYmplY3QgfHwg
b2JqZWN0LT5pc1RleHRDb250cm9sKCkpOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MDkxNCkKKysrIFdlYktp
dC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0xMC0y
OSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgUmVuZGVyVGV4dENvbnRyb2w6OnNl
dFNlbGVjdGlvblJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Nzg3MAorCisgICAgICAgIENvbnZlcnRlZCBSZW5kZXJUZXh0Q29udHJvbGw6OnNl
dFNlbGVjdGlvblJhbmdlIHRvIGEgZ2xvYmFsIGZ1bmN0aW9uLgorCisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6aW5wdXRNZXRob2RFdmVudCk6
IENhbGxzIHNldFNlbGVjdGlvblJhbmdlLgorCiAyMDEwLTEwLTI5ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDcwODIxKQorKysgV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjQsMTQgKzEwMjQsOSBAQCB2b2lkIFFXZWJQ
YWdlUHJpdmF0ZTo6aW5wdXRNZXRob2RFdmVudChRCiAgICAgfQogCiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IDA7Ci0gICAgUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlclRleHRDb250cm9s
ID0gMDsKLQogICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSkKICAgICAgICAgcmVuZGVyZXIgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCk7CiAKLSAgICBpZiAocmVu
ZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgcmVuZGVyVGV4dENv
bnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKTsKLQogICAgIFZlY3RvcjxDb21w
b3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKICAgICBib29sIGhhc1NlbGVjdGlvbiA9IGZh
bHNlOwogCkBAIC0xMDU4LDkgKzEwNTMsOSBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6aW5wdXRN
ZXRob2RFdmVudChRCiAgICAgICAgIGNhc2UgUUlucHV0TWV0aG9kRXZlbnQ6OlNlbGVjdGlvbjog
ewogICAgICAgICAgICAgaGFzU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIEEgc2Vs
ZWN0aW9uIGluIHRoZSBpbnB1dE1ldGhvZEV2ZW50IGlzIGFsd2F5cyByZWZsZWN0ZWQgaW4gdGhl
IHZpc2libGUgdGV4dAotICAgICAgICAgICAgaWYgKHJlbmRlclRleHRDb250cm9sKSB7Ci0gICAg
ICAgICAgICAgICAgcmVuZGVyVGV4dENvbnRyb2wtPnNldFNlbGVjdGlvblN0YXJ0KHFNaW4oYS5z
dGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpKTsKLSAgICAgICAgICAgICAgICByZW5kZXJUZXh0
Q29udHJvbC0+c2V0U2VsZWN0aW9uRW5kKHFNYXgoYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0
aCkpKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0Q29udHJv
bCgpICYmIHJlbmRlcmVyLT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25T
dGFydChyZW5kZXJlci0+bm9kZSgpLCBxTWluKGEuc3RhcnQsIChhLnN0YXJ0ICsgYS5sZW5ndGgp
KSk7CisgICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uRW5kKHJlbmRlcmVyLT5ub2RlKCksIHFN
YXgoYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKCFldi0+cHJlZWRpdFN0cmluZygpLmlzRW1wdHkoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72381</attachid>
            <date>2010-10-29 13:23:13 -0700</date>
            <delta_ts>2010-10-29 14:02:38 -0700</delta_ts>
            <desc>qt build fix</desc>
            <filename>bug-47870-20101029132312.patch</filename>
            <type>text/plain</type>
            <size>10611</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDkxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMTAtMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4NzAKKworICAgICAgICBNYWRlIFJl
bmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25SYW5nZSBhIGdsb2JhbCBmdW5jdGlvbi4KKyAg
ICAgICAgUmVtb3ZlZCBzZXRTZWxlY3Rpb25TdGFydCwgc2V0U2VsZWN0aW9uRW5kLCBhbmQgc2Vs
ZWN0IGZyb20gUmVuZGVyVGV4dENvbnRyb2wuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSBh
ZGRlZCBzaW5jZSB0aGVyZSBpcyBubyBiZWhhdmlvcmFsIGNoYW5nZS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6IENh
bGxzIHNldFNlbGVjdGVkVGV4dFJhbmdlLgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSk6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3Rh
cnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzZXRTZWxlY3Rpb25FbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZWxlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSk6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbDo6aGFzVmlzaWJsZVRleHRBcmVhKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzZXRTZWxlY3Rpb25SYW5nZSk6IFNlZSBhYm92ZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKwogMjAxMC0xMC0yOSAgUGF0cmljayBHYW5zdGVyZXIg
IDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJ
bmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gNzA5MTUpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5ODksMTEgKzE5
ODksMTAgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdAogdm9pZCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFp
blRleHRSYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKGlzTmF0aXZlVGV4dENvbnRyb2woKSkgewot
ICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250
cm9sKG1fcmVuZGVyZXIpOwotICAgICAgICB0ZXh0Q29udHJvbC0+c2V0U2VsZWN0aW9uUmFuZ2Uo
cmFuZ2Uuc3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgc2V0U2Vs
ZWN0aW9uUmFuZ2UobV9yZW5kZXJlci0+bm9kZSgpLCByYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQg
KyByYW5nZS5sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3Vt
ZW50KQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDcw
OTE1KQorKysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDEwICsxMDcsNyBAQCB2b2lkIElucHV0RWxlbWVudDo6dXBkYXRlU2VsZWN0aW9uUmFuZ2Uo
CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwotCi0gICAgaWYgKFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVu
ZGVyVGV4dENvbnRyb2woZWxlbWVudC0+cmVuZGVyZXIoKSkpCi0gICAgICAgIHJlbmRlcmVyLT5z
ZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKKyAgICBzZXRTZWxlY3Rpb25SYW5nZShlbGVt
ZW50LCBzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQo
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MDkxNSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQpAQCAtNTQ4LDI2ICs1NDksMjMgQEAgUmVuZGVyVGV4dENvbnRy
b2wqIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbAogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7Ci0gICAgaWYgKFJlbmRlclRleHRD
b250cm9sKiByZW5kZXJlciA9IHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkpCi0gICAg
ICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGFydChzdGFydCk7CisgICAgc2V0U2VsZWN0aW9u
UmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgc2VsZWN0aW9uRW5kKCkpKTsKIH0KIAogdm9pZCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKGludCBlbmQpCiB7Ci0gICAg
aWYgKFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRleHRSZW5kZXJlckFmdGVyVXBkYXRl
TGF5b3V0KCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25FbmQoZW5kKTsKKyAgICBz
ZXRTZWxlY3Rpb25SYW5nZShtaW4oZW5kLCBzZWxlY3Rpb25TdGFydCgpKSwgZW5kKTsKIH0KIAog
dm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0KCkKIHsKICAgICBpZiAoUmVu
ZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQo
KSkKLSAgICAgICAgcmVuZGVyZXItPnNlbGVjdCgpOworICAgICAgICBzZXRTZWxlY3Rpb25SYW5n
ZSgwLCByZW5kZXJlci0+dGV4dCgpLmxlbmd0aCgpKTsKIH0KIAogdm9pZCBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQogewot
ICAgIGlmIChSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXJBZnRlclVw
ZGF0ZUxheW91dCgpKQotICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQs
IGVuZCk7CisgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgc3RhcnQsIGVuZCk7
CiB9CiAKIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoKQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNzA5
MTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNiw0OSArMjE2LDQzIEBAIGludCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0
aW9uRW5kKCkKICAgICByZXR1cm4gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oZnJhbWUtPnNlbGVj
dGlvbigpLT5lbmQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNldFNlbGVjdGlv
blN0YXJ0KGludCBzdGFydCkKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2w6Omhhc1Zpc2libGVUZXh0
QXJlYSgpIGNvbnN0CiB7Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAg
c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgZWxlbWVudC0+c2VsZWN0aW9uRW5k
KCkpKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9p
bm5lclRleHQgfHwgIW1faW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFtX2lubmVyVGV4dC0+cmVu
ZGVyQm94KCktPmhlaWdodCgpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxl
Y3Rpb25FbmQoaW50IGVuZCkKK3ZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoTm9kZSogbm9kZSwgaW50
IHN0YXJ0LCBpbnQgZW5kKQogewotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihub2RlKCkpOwot
ICAgIHNldFNlbGVjdGlvblJhbmdlKG1pbihlbmQsIGVsZW1lbnQtPnNlbGVjdGlvblN0YXJ0KCkp
LCBlbmQpOwotfQorICAgIEFTU0VSVChub2RlKTsKKyAgICBub2RlLT5kb2N1bWVudCgpLT51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbDo6c2VsZWN0KCkKLXsKLSAgICBzZXRTZWxlY3Rpb25SYW5nZSgwLCB0ZXh0KCkubGVuZ3Ro
KCkpOwotfQorICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVuZGVyZXIoKS0+
aXNUZXh0Q29udHJvbCgpKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OnNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKLXsKICAgICBlbmQgPSBt
YXgoZW5kLCAwKTsKICAgICBzdGFydCA9IG1pbihtYXgoc3RhcnQsIDApLCBlbmQpOwogCi0gICAg
QVNTRVJUKCFkb2N1bWVudCgpLT5jaGlsZE5lZWRzQW5kTm90SW5TdHlsZVJlY2FsYygpKTsKKyAg
ICBSZW5kZXJUZXh0Q29udHJvbCogY29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZS0+
cmVuZGVyZXIoKSk7CiAKLSAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8
fCAhbV9pbm5lclRleHQgfHwgIW1faW5uZXJUZXh0LT5yZW5kZXJlcigpIHx8ICFtX2lubmVyVGV4
dC0+cmVuZGVyQm94KCktPmhlaWdodCgpKSB7Ci0gICAgICAgIGNhY2hlU2VsZWN0aW9uKHN0YXJ0
LCBlbmQpOworICAgIGlmIChjb250cm9sLT5oYXNWaXNpYmxlVGV4dEFyZWEoKSkgeworICAgICAg
ICBjb250cm9sLT5jYWNoZVNlbGVjdGlvbihzdGFydCwgZW5kKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkZvckluZGV4KHN0YXJ0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNv
bnRyb2wtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0KTsKICAgICBWaXNpYmxlUG9zaXRp
b24gZW5kUG9zaXRpb247CiAgICAgaWYgKHN0YXJ0ID09IGVuZCkKICAgICAgICAgZW5kUG9zaXRp
b24gPSBzdGFydFBvc2l0aW9uOwogICAgIGVsc2UKLSAgICAgICAgZW5kUG9zaXRpb24gPSB2aXNp
YmxlUG9zaXRpb25Gb3JJbmRleChlbmQpOworICAgICAgICBlbmRQb3NpdGlvbiA9IGNvbnRyb2wt
PnZpc2libGVQb3NpdGlvbkZvckluZGV4KGVuZCk7CiAKICAgICAvLyBzdGFydFBvc2l0aW9uIGFu
ZCBlbmRQb3NpdGlvbiBjYW4gYmUgbnVsbCBwb3NpdGlvbiBmb3IgZXhhbXBsZSB3aGVuCiAgICAg
Ly8gIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmUiIHN0eWxlIGF0dHJpYnV0ZSBpcyBzcGVjaWZp
ZWQuCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgZW5kUG9zaXRpb24uaXNO
b3ROdWxsKCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUoKSAmJiBlbmRQb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSgpKTsK
KyAgICAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNo
YWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUpOwogICAgIH0KICAgICBWaXNp
YmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRQb3NpdGlv
biwgZW5kUG9zaXRpb24pOwogCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkp
CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkocmV2aXNpb24gNzA5MTUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MiwxMCArNDIsNiBAQCBwdWJsaWM6CiAKICAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKTsK
ICAgICBpbnQgc2VsZWN0aW9uRW5kKCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChpbnQp
OwotICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGludCk7Ci0gICAgdm9pZCBzZWxlY3QoKTsKLSAg
ICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCk7CiAgICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gc2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKQEAgLTExMiw4ICsxMDgsMTMgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fd2FzQ2hhbmdlZFNpbmNlTGFzdENoYW5nZUV2ZW50OwogICAgIGJv
b2wgbV9sYXN0Q2hhbmdlV2FzVXNlckVkaXQ7CiAgICAgUmVmUHRyPFRleHRDb250cm9sSW5uZXJU
ZXh0RWxlbWVudD4gbV9pbm5lclRleHQ7CisKKyAgICBib29sIGhhc1Zpc2libGVUZXh0QXJlYSgp
IGNvbnN0OworICAgIGZyaWVuZCB2b2lkIHNldFNlbGVjdGlvblJhbmdlKE5vZGUqLCBpbnQgc3Rh
cnQsIGludCBlbmQpOwogfTsKIAordm9pZCBzZXRTZWxlY3Rpb25SYW5nZShOb2RlKiwgaW50IHN0
YXJ0LCBpbnQgZW5kKTsKKwogaW5saW5lIFJlbmRlclRleHRDb250cm9sKiB0b1JlbmRlclRleHRD
b250cm9sKFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAKICAgICBBU1NFUlQoIW9iamVjdCB8fCBv
YmplY3QtPmlzVGV4dENvbnRyb2woKSk7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDcwOTE1KQorKysgV2ViS2l0
L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTEwLTI5
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBSZW5kZXJUZXh0Q29udHJvbDo6c2V0
U2VsZWN0aW9uUmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3ODcwCisKKyAgICAgICAgQ29udmVydGVkIFJlbmRlclRleHRDb250cm9sbDo6c2V0
U2VsZWN0aW9uUmFuZ2UgdG8gYSBnbG9iYWwgZnVuY3Rpb24uCisKKyAgICAgICAgKiBBcGkvcXdl
YnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjppbnB1dE1ldGhvZEV2ZW50KTog
Q2FsbHMgc2V0U2VsZWN0aW9uUmFuZ2UuCisKIDIwMTAtMTAtMjkgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNzA5MTUpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNCwxNCArMTAyNCw5IEBAIHZvaWQgUVdlYlBh
Z2VQcml2YXRlOjppbnB1dE1ldGhvZEV2ZW50KFEKICAgICB9CiAKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gMDsKLSAgICBSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVyVGV4dENvbnRyb2wg
PSAwOwotCiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
KQogICAgICAgICByZW5kZXJlciA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKTsKIAotICAgIGlmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICByZW5kZXJUZXh0Q29u
dHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIpOwotCiAgICAgVmVjdG9yPENvbXBv
c2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gZmFs
c2U7CiAKQEAgLTEwNTgsMTAgKzEwNTMsOCBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6aW5wdXRN
ZXRob2RFdmVudChRCiAgICAgICAgIGNhc2UgUUlucHV0TWV0aG9kRXZlbnQ6OlNlbGVjdGlvbjog
ewogICAgICAgICAgICAgaGFzU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIEEgc2Vs
ZWN0aW9uIGluIHRoZSBpbnB1dE1ldGhvZEV2ZW50IGlzIGFsd2F5cyByZWZsZWN0ZWQgaW4gdGhl
IHZpc2libGUgdGV4dAotICAgICAgICAgICAgaWYgKHJlbmRlclRleHRDb250cm9sKSB7Ci0gICAg
ICAgICAgICAgICAgcmVuZGVyVGV4dENvbnRyb2wtPnNldFNlbGVjdGlvblN0YXJ0KHFNaW4oYS5z
dGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpKTsKLSAgICAgICAgICAgICAgICByZW5kZXJUZXh0
Q29udHJvbC0+c2V0U2VsZWN0aW9uRW5kKHFNYXgoYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0
aCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJl
ci0+aXNUZXh0Q29udHJvbCgpICYmIHJlbmRlcmVyLT5ub2RlKCkpCisgICAgICAgICAgICAgICAg
c2V0U2VsZWN0aW9uUmFuZ2UocmVuZGVyZXItPm5vZGUoKSwgcU1pbihhLnN0YXJ0LCAoYS5zdGFy
dCArIGEubGVuZ3RoKSksIHFNYXgoYS5zdGFydCwgKGEuc3RhcnQgKyBhLmxlbmd0aCkpKTsKIAog
ICAgICAgICAgICAgaWYgKCFldi0+cHJlZWRpdFN0cmluZygpLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oZXYtPnByZWVkaXRTdHJpbmcoKSwgdW5k
ZXJsaW5lcywK
</data>
<flag name="review"
          id="62621"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>