<?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>33668</bug_id>
          
          <creation_ts>2010-01-14 04:08:38 -0800</creation_ts>
          <short_desc>WebCore::InsertListCommand::modifyRange infinite loop (100% CPU usage)</short_desc>
          <delta_ts>2010-08-25 15:16:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows Vista</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://skypher.com/SkyLined/Repro/WebKit/Bug%2033668%20-%20WebCore..InsertListCommand..modifyRange%20infinite%20loop%20(100%25%20CPU%20usage)/repro.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>42841</dependson>
    
    <dependson>43166</dependson>
          <blocked>42436</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Berend-Jan Wever">skylined</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180669</commentid>
    <comment_count>0</comment_count>
    <who name="Berend-Jan Wever">skylined</who>
    <bug_when>2010-01-14 04:08:38 -0800</bug_when>
    <thetext>from WebKit›WebCore›editing›InsertListCommand.cpp:

bool InsertListCommand::modifyRange()
{
    VisibleSelection selection = selectionForParagraphIteration(endingSelection());
    ASSERT(selection.isRange());
    VisiblePosition startOfSelection = selection.visibleStart();
    VisiblePosition endOfSelection = selection.visibleEnd();
    VisiblePosition startOfLastParagraph = startOfParagraph(endOfSelection);

    if (startOfParagraph(startOfSelection) == startOfLastParagraph)
        return false;

    Node* startList = enclosingList(startOfSelection.deepEquivalent().node());
    Node* endList = enclosingList(endOfSelection.deepEquivalent().node());
    if (!startList || startList != endList)
        m_forceCreateList = true;

    setEndingSelection(startOfSelection);
    doApply();
    // Fetch the start of the selection after moving the first paragraph,
    // because moving the paragraph will invalidate the original start.
    // We&apos;ll use the new start to restore the original selection after
    // we modified all selected paragraphs.
    startOfSelection = endingSelection().visibleStart();
    VisiblePosition startOfCurrentParagraph = startOfNextParagraph(startOfSelection);
    while (startOfCurrentParagraph != startOfLastParagraph) {
        // doApply() may operate on and remove the last paragraph of the selection from the document
        // if it&apos;s in the same list item as startOfCurrentParagraph.  Return early to avoid an
        // infinite loop and because there is no more work to be done.
        // FIXME(&lt;rdar://problem/5983974&gt;): The endingSelection() may be incorrect here.  Compute
        // the new location of endOfSelection and use it as the end of the new selection.
        if (!startOfLastParagraph.deepEquivalent().node()-&gt;inDocument())
            return true;
        setEndingSelection(startOfCurrentParagraph);
        doApply();
        startOfCurrentParagraph = startOfNextParagraph(endingSelection().visibleStart());
    }
    setEndingSelection(endOfSelection);
    doApply();
    // Fetch the end of the selection, for the reason mentioned above.
    endOfSelection = endingSelection().visibleEnd();
    setEndingSelection(VisibleSelection(startOfSelection, endOfSelection));
    m_forceCreateList = false;
    return true;
}

The while loop will run forever using this repro:

&lt;BODY&gt;&lt;/BODY&gt;
&lt;SCRIPT&gt;
  document.execCommand(&quot;selectall&quot;,false,true);
  document.designMode=&quot;on&quot;;
  document.execCommand(&quot;inserthorizontalrule&quot;,8);
  document.execCommand(&quot;InsertImage&quot;,false,&quot;&quot;);
  document.execCommand(&quot;justifyleft&quot;,false,1);
  document.execCommand(&quot;insertparagraph&quot;,false);
  document.execCommand(&quot;SelectAll&quot;,false,undefined);
  document.execCommand(&quot;InsertOrderedList&quot;,false,null);
&lt;/SCRIPT&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180670</commentid>
    <comment_count>1</comment_count>
    <who name="Berend-Jan Wever">skylined</who>
    <bug_when>2010-01-14 04:10:28 -0800</bug_when>
    <thetext>Online repro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202357</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-03-21 15:55:02 -0700</bug_when>
    <thetext>This bug seems to be caused in the modifyRange when startOfCurrentParagraph becomes null.  The bug reproduces when trying to InsertOrderedList on the following HTML as well:

&lt;ul&gt;&lt;ul&gt;&lt;li&gt;hello&lt;/li&gt;&lt;/ul&gt;world&lt;ol&gt;&lt;li&gt;WebKit&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;

I could work-around the issue by adding a condition to while but I&apos;m not sure startOfCurrentParagraph should ever be null.  Because with that condition, &quot;WebKit&quot; moves before &quot;world&quot;, which is obviously wrong behavior.

We probably need to cleanup InsertListCommand first as we did in IndentOutdentCommand (filed as bug 36430).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202542</commentid>
    <comment_count>3</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-03-22 09:26:25 -0700</bug_when>
    <thetext>Normally this happens when iterating over a range of nodes that has changed (namely nodes have been removed). I fixed a similar issue in IndentOutdentCommand a while ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202640</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-03-22 11:36:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Normally this happens when iterating over a range of nodes that has changed
&gt; (namely nodes have been removed). I fixed a similar issue in
&gt; IndentOutdentCommand a while ago.

Could you point me to the bug/patch or elaborate on how you fixed it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202658</commentid>
    <comment_count>5</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-03-22 11:46:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Normally this happens when iterating over a range of nodes that has changed
&gt; &gt; (namely nodes have been removed). I fixed a similar issue in
&gt; &gt; IndentOutdentCommand a while ago.
&gt; 
&gt; Could you point me to the bug/patch or elaborate on how you fixed it?

I think this is an example. http://trac.webkit.org/changeset/51704
I&apos;ll try to find another one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202659</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-03-22 11:48:43 -0700</bug_when>
    <thetext>Here is another one.
http://trac.webkit.org/changeset/50536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202720</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-03-22 13:10:01 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Here is another one.
&gt; http://trac.webkit.org/changeset/50536

Thanks for the reply.  So it seems adding isNotNull check to http://trac.webkit.org/browser/trunk/WebCore/editing/InsertListCommand.cpp#L86 will suffice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251293</commentid>
    <comment_count>8</comment_count>
      <attachid>61540</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-14 11:05:10 -0700</bug_when>
    <thetext>Created attachment 61540
demonstrates the bug (crashes WebKit without a patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251538</commentid>
    <comment_count>9</comment_count>
      <attachid>61587</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-14 17:25:57 -0700</bug_when>
    <thetext>Created attachment 61587
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251542</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-14 17:32:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=61587) [details]

Note that the expected result of this patch does NOT match that of MSIE and Firefox.  When intending

&lt;ul&gt;
	&lt;ul&gt;&lt;li&gt;hello&lt;/li&gt;&lt;/ul&gt;
	world
	&lt;ol&gt;&lt;li&gt;WebKit&lt;/li&gt;&lt;/ol&gt;
&lt;/ul&gt;

Both MSIE and Firefox gives

&lt;OL&gt;
	&lt;OL&gt;&lt;LI&gt;hello&lt;/LI&gt;&lt;/OL&gt;
	world
	&lt;OL&gt;&lt;LI&gt;WebKit&lt;/LI&gt;&lt;/OL&gt;
&lt;/OL&gt;

But WebKit gives

&lt;ul&gt;
	&lt;ol&gt;&lt;li&gt;hello&lt;/li&gt;&lt;/ol&gt;
&lt;/ul&gt;
&lt;ol&gt;
	&lt;li&gt;world&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
	&lt;ol&gt;&lt;li&gt;WebKit&lt;/li&gt;&lt;/ol&gt;
&lt;/ul&gt;

I tried really hard to match new behavior to that of Firefox and MSIE but because we are iterating through multiple paragraphs, we cannot tell whether outer ul can be converted to ol or not when encountering &quot;world&quot;. (i.e. if the user selected &quot;world&quot; alone, we should certainly not converting the outer ul to ol).  One approach to solve this problem is to keep the original selection as a range and check whether outer list is contained within the range but this requires more refactoring and fixing, which was not feasible at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254923</commentid>
    <comment_count>11</comment_count>
      <attachid>61587</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-22 12:30:23 -0700</bug_when>
    <thetext>Comment on attachment 61587
fixes the bug

I&apos;m splitting this patch into a cleanup and the actual fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255174</commentid>
    <comment_count>12</comment_count>
      <attachid>62374</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-22 20:08:19 -0700</bug_when>
    <thetext>Created attachment 62374
reflects the cleanup done in 42841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255612</commentid>
    <comment_count>13</comment_count>
      <attachid>62374</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-23 17:15:14 -0700</bug_when>
    <thetext>Comment on attachment 62374
reflects the cleanup done in 42841

I didn&apos;t scrutinize the code too closely since the test output doesn&apos;t look right to me.

&gt; --- LayoutTests/ChangeLog	(revision 63943)
&gt; +        The behavior of WebKit when inserting ordered/unordered list on a list with
&gt; +        an orphaned nested list at the end (5207369.html) is updated to match that of MSIE instead of Firefox.

This doesn&apos;t match what I get in IE8. I get:
&lt;P&gt;One&lt;/P&gt; 
&lt;P&gt;Two&lt;/P&gt; 
&lt;UL&gt; 
&lt;LI&gt;Three&lt;/LI&gt; 
&lt;LI&gt;Four&lt;/LI&gt;&lt;/UL&gt;

&gt; +++ LayoutTests/editing/execCommand/5207369-expected.txt	(working copy)
&gt; -&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;
&gt; +&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;ul&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;

This output doesn&apos;t look right to me. Why is the ul wrapped in an ol? FWIW, our current behavior matches Opera. Firefox just inserts and LI at the top (clearly wrong). IE removes the outer list entirely. In either case, this new output doesn&apos;t match other browsers and seems worse than the old output. Seems like the ideal behavior, from a user perspective, would be to output something like &lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;. It would be good to try this in Word, TextEdit and WordPad to see what they do in this case.

&gt; +++ LayoutTests/editing/execCommand/insert-list-orphaned-item-with-nested-lists.html	(revision 0)
&gt; +var e = document.getElementById(&apos;test&apos;)
&gt; +var r = document.createRange();
&gt; +var s = window.getSelection();

One letter variable names are frowned upon in webkit code. The one exception is using &quot;e&quot; for the name of an event argument to a function might be OK since it&apos;s so common.

&gt; +r.setStart(e, 0);
&gt; +r.setEnd(e, e.childNodes.length);
&gt; +s.removeAllRanges();
&gt; +s.addRange(r);
These four lines can just be s.selectAllChildren(e);

&gt; +document.execCommand(&apos;InsertOrderedList&apos;, false, null);
&gt; +
&gt; +Markup.description(&quot;This tests crash when listifying nested lists with an orphaned list child in between (see bug 33668).&quot;)
Technically, it&apos;s an infinite loop, not a crash, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255668</commentid>
    <comment_count>14</comment_count>
      <attachid>62487</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-23 22:58:53 -0700</bug_when>
    <thetext>Created attachment 62487
fixed per ojan&apos;s comments

(In reply to comment #13)
&gt; This doesn&apos;t match what I get in IE8. I get:
&gt; &lt;P&gt;One&lt;/P&gt; 
&gt; &lt;P&gt;Two&lt;/P&gt; 
&gt; &lt;UL&gt; 
&gt; &lt;LI&gt;Three&lt;/LI&gt; 
&gt; &lt;LI&gt;Four&lt;/LI&gt;&lt;/UL&gt;

I think you did InsertOrderedList as supposed to InsertUnorderedList.  When I do InsertUnorderedList on MSIE, I get:
&lt;ul&gt;
&lt;li&gt;one&lt;/li&gt;
&lt;li&gt;two&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;three&lt;/li&gt;
&lt;li&gt;four&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;

But this is visually identical to
&lt;ul&gt;
&lt;li&gt;one&lt;/li&gt;
&lt;li&gt;two&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;ul&gt;
&lt;li&gt;three&lt;/li&gt;
&lt;li&gt;four&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;

&gt; &gt; +++ LayoutTests/editing/execCommand/5207369-expected.txt	(working copy)
&gt; &gt; -&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;
&gt; &gt; +&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;ul&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;
&gt; 
&gt; This output doesn&apos;t look right to me. Why is the ul wrapped in an ol? FWIW, our current behavior matches Opera. Firefox just inserts and LI at the top (clearly wrong). IE removes the outer list entirely. In either case, this new output doesn&apos;t match other browsers and seems worse than the old output.

Again, I think you did InsertOrderedList.

&gt; Seems like the ideal behavior, from a user perspective, would be to output something like &lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;.

Right.  That&apos;s what I&apos;m trying to accomplish here but with our current implementation, we can&apos;t tell if the outer list is contained within the selection because we modify the selection.  So the best we can do is to leave the outer OL intact.  I could add a logic to merge outer lists when the only content of the list is another list.  That will produce the above HTML as desired.  Ideally, when the entire list is selected, we can convert the type of the list element without having to work on each paragraph separately and then merge.

&gt; &gt; +r.setStart(e, 0);
&gt; &gt; +r.setEnd(e, e.childNodes.length);
&gt; &gt; +s.removeAllRanges();
&gt; &gt; +s.addRange(r);
&gt; These four lines can just be s.selectAllChildren(e);

Good point.

&gt; &gt; +document.execCommand(&apos;InsertOrderedList&apos;, false, null);
&gt; &gt; +
&gt; &gt; +Markup.description(&quot;This tests crash when listifying nested lists with an orphaned list child in between (see bug 33668).&quot;)
&gt; Technically, it&apos;s an infinite loop, not a crash, right?

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256339</commentid>
    <comment_count>15</comment_count>
      <attachid>62487</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-26 17:01:12 -0700</bug_when>
    <thetext>Comment on attachment 62487
fixed per ojan&apos;s comments

&gt; I think you did InsertOrderedList as supposed to InsertUnorderedList.  When I do InsertUnorderedList on MSIE, I get:
&gt; &lt;ul&gt;
&gt; &lt;li&gt;one&lt;/li&gt;
&gt; &lt;li&gt;two&lt;/li&gt;
&gt; &lt;ul&gt;
&gt; &lt;li&gt;three&lt;/li&gt;
&gt; &lt;li&gt;four&lt;/li&gt;
&gt; &lt;/ul&gt;
&gt; &lt;/ul&gt;
&gt; 
&gt; But this is visually identical to
&gt; &lt;ul&gt;
&gt; &lt;li&gt;one&lt;/li&gt;
&gt; &lt;li&gt;two&lt;/li&gt;
&gt; &lt;/ul&gt;
&gt; &lt;ol&gt;
&gt; &lt;ul&gt;
&gt; &lt;li&gt;three&lt;/li&gt;
&gt; &lt;li&gt;four&lt;/li&gt;
&gt; &lt;/ul&gt;
&gt; &lt;/ol&gt;

It&apos;s only visually identical in the absence of CSS, e.g., &lt;style&gt;ul, ol {border: 1px solid blue}&lt;/style&gt; would render an extra border.

&gt; Right.  That&apos;s what I&apos;m trying to accomplish here but with our current implementation, we can&apos;t tell if the outer list is contained within the selection because we modify the selection.  So the best we can do is to leave the outer OL intact.  I could add a logic to merge outer lists when the only content of the list is another list.  That will produce the above HTML as desired.  Ideally, when the entire list is selected, we can convert the type of the list element without having to work on each paragraph separately and then merge.

The old results for this test are clearly wrong and the new results for this test are wrong. But I worry that the new results are more wrong. I don&apos;t think you need to make this test match IE in this patch, but is there a way to avoid the infinite loop that doesn&apos;t change the results for this test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256360</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-26 18:15:15 -0700</bug_when>
    <thetext>Thanks for reviewing!

(In reply to comment #15)
&gt; The old results for this test are clearly wrong and the new results for this test are wrong. But I worry that the new results are more wrong. I don&apos;t think you need to make this test match IE in this patch, but is there a way to avoid the infinite loop that doesn&apos;t change the results for this test?

Okay, the real fix for this problem is to save the selection range and if a list is contained within the range, then we convert the entire list.  We&apos;ll still need to walk through each paragraph after the conversion because inner lists still need to be converted. But I just think that&apos;s too much work / backlogging to fix this P1 bug.  This would work perfectly well for:

&lt;ol&gt;
&lt;li&gt;hello&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;world&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;webkit&lt;/li&gt;
&lt;/ol&gt;

An alternative work-around we can take is to merge the outer list when we&apos;ve inserted a list child into an inner list, and the outer list solely consists of the inner list. But this is too gross to my taste and won&apos;t work for the above case for various reasons.

But I don&apos;t really see why this is more wrong than the original result.  The inner UL was inside the outer OL to begin with.  If we had only selected the inner UL, then we&apos;ll be only converting the inner list, leaving the outer OL intact.  And we always split the list and only convert the parts of lists that are selected.  That said, Firefox&apos;s behavior of converting all of OLs in the above HTML seems most reasonable to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257381</commentid>
    <comment_count>17</comment_count>
      <attachid>62883</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-28 15:08:07 -0700</bug_when>
    <thetext>Created attachment 62883
new attempt

I need to split this patch since it contains several fixes but this solves the problem ojan was addressing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257493</commentid>
    <comment_count>18</comment_count>
      <attachid>62883</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-28 18:01:50 -0700</bug_when>
    <thetext>Comment on attachment 62883
new attempt

&gt;          Reviewed by Ojan Vafai.
&gt; Index: LayoutTests/editing/execCommand/insert-list-orphaned-item-with-nested-lists-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/editing/execCommand/insert-list-orphaned-item-with-nested-lists-expected.txt	(revision 0)
&gt; +++ LayoutTests/editing/execCommand/insert-list-orphaned-item-with-nested-lists-expected.txt	(revision 0)
&gt; @@ -0,0 +1,23 @@
&gt; +This tests hang when listifying nested lists with an orphaned list child in between (see bug 33668).
&gt; +
&gt; +&lt;DIV id=&quot;test&quot; contentEditable=&quot;&quot;&gt;
&gt; +&lt;#text&gt;
&gt; +&lt;/#text&gt;
&gt; +&lt;OL&gt;
&gt; +&lt;UL&gt;
&gt; +&lt;OL&gt;
&gt; +&lt;LI&gt;
&gt; +&lt;#text&gt;&lt;selection-caret&gt;hello&lt;/#text&gt;
&gt; +&lt;/LI&gt;
&gt; +&lt;/OL&gt;
&gt; +&lt;#text&gt;world&lt;/#text&gt;
&gt; +&lt;OL&gt;
&gt; +&lt;LI&gt;
&gt; +&lt;#text&gt;WebKit&lt;/#text&gt;
&gt; +&lt;/LI&gt;
&gt; +&lt;/OL&gt;
&gt; +&lt;/UL&gt;
&gt; +&lt;/OL&gt;
&gt; +&lt;#text&gt;
&gt; +&lt;/#text&gt;
&gt; +&lt;/DIV&gt;

This is OK for now since it&apos;s an improvement over the current behavior of hanging. :) Although, it would be more correct if that stray &lt;UL&gt; weren&apos;t there, right?

&gt; +++ LayoutTests/editing/execCommand/5207369-expected.txt	(working copy)
&gt; -&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;
&gt; +&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Three&lt;/li&gt;&lt;li&gt;Four&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;

Nice!

&gt; +++ LayoutTests/editing/execCommand/create-list-from-range-selection-expected.txt	(working copy)
&gt; @@ -16,6 +16,8 @@
&gt;  &lt;LI&gt;
&gt;  &lt;#text&gt;foo&lt;/#text&gt;
&gt;  &lt;/LI&gt;
&gt; +&lt;/OL&gt;
&gt; +&lt;OL&gt;
&gt;  &lt;LI&gt;
&gt;  &lt;#text&gt;bar&lt;/#text&gt;
&gt;  &lt;/LI&gt;

This doesn&apos;t look right to me. Does this match what other browsers do? Firefox does something insane with this HTML. But I would expect the following DOM (the nested ordered list would stay nested):
&lt;DIV id=&quot;test&quot; contentEditable=&quot;true&quot;&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;#text&gt;asd&lt;/#text&gt;
&lt;SPAN id=&quot;start&quot;&gt;
&lt;#text&gt;fo&lt;selection-anchor&gt;o&lt;/#text&gt;
&lt;/SPAN&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;#text&gt;bar&lt;/#text&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;#text&gt;baz&lt;/#text&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;#text&gt;foo&lt;/#text&gt;
&lt;/LI&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;#text&gt;bar&lt;/#text&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;LI&gt;
&lt;#text&gt;ba&lt;selection-focus&gt;z&lt;/#text&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;/DIV&gt;

Is my expectation wrong? What do Word/PowerPoint do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258088</commentid>
    <comment_count>19</comment_count>
      <attachid>63036</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-30 01:24:00 -0700</bug_when>
    <thetext>Created attachment 63036
new approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258266</commentid>
    <comment_count>20</comment_count>
      <attachid>63036</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-30 10:20:00 -0700</bug_when>
    <thetext>Comment on attachment 63036
new approach

&gt; +            ExceptionCode ec = 0;
&gt; +            if (rangeStartIsInList &amp;&amp; newList)
&gt; +                currentSelection-&gt;setStart(newList-&gt;parentNode(), newList-&gt;nodeIndex(), ec);
&gt; +            if (rangeEndIsInList &amp;&amp; newList)
&gt; +                currentSelection-&gt;setEnd(newList-&gt;parentNode(), newList-&gt;nodeIndex()+1, ec);

There should be spaces around the &quot;+&quot; operator here where we do &quot;+ 1&quot;.

Since nodeIndex is potentially a O(n^2) operation, I suggest restructuring the code so we compute it only once. On the other hand, if you don&apos;t plan to do that optimization, it would be better to use the Range::setStartAfter and Range::setEndBefore functions instead of calling nodeIndex directly here.

If you&apos;re going to ignore the exception code, there is no need to initialize it to 0.

Are all the code changes here covered by this single test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258403</commentid>
    <comment_count>21</comment_count>
      <attachid>63104</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-30 14:54:43 -0700</bug_when>
    <thetext>Created attachment 63104
fixed various problems.

(In reply to comment #20)
&gt; (From update of attachment 63036 [details])
&gt; &gt; +            ExceptionCode ec = 0;
&gt; &gt; +            if (rangeStartIsInList &amp;&amp; newList)
&gt; &gt; +                currentSelection-&gt;setStart(newList-&gt;parentNode(), newList-&gt;nodeIndex(), ec);
&gt; &gt; +            if (rangeEndIsInList &amp;&amp; newList)
&gt; &gt; +                currentSelection-&gt;setEnd(newList-&gt;parentNode(), newList-&gt;nodeIndex()+1, ec);
&gt; 
&gt; There should be spaces around the &quot;+&quot; operator here where we do &quot;+ 1&quot;.

Modified the approach.  Used the positions inside the list instead.

&gt; If you&apos;re going to ignore the exception code, there is no need to initialize it to 0.

Fixed.

&gt; Are all the code changes here covered by this single test?

When I modified the test to make sure rangeEndIsInList, there were other problems with my code
to convert the entire list.  So I fixed them all and also this exposed a bug in doApply where endOfSelection / startOfLastParagraph
can be orphaned / null.  Decided to save indexForVisiblePosition and restore it later.
I know it&apos;s a dirty trick but because moveParagraphWithClones removes the existing nodes, there is no other way to restore them.

I&apos;m really worn away by all sorts of bugs in editing. For example, TextIterator has a bug of not counting empty LI,
which causes index to shit by 1.  And that&apos;s the whole reason, I have that ugly if statement to execute that line only if necessary.
But this bug in TextIterator will eventually expose if we added sufficiently more test cases.

We need a better of keeping track of positions on nodes that are moved / removed.  InsertListCommand / IndentOutdentCommand
are very fragile preciously because moveParagraph / moveParagraphWithClones remove some nodes that these two
commands are using to iterate through paragraphs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260090</commentid>
    <comment_count>22</comment_count>
      <attachid>63036</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-04 10:24:27 -0700</bug_when>
    <thetext>Comment on attachment 63036
new approach

Cleared Darin Adler&apos;s review+ from obsolete attachment 63036 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268725</commentid>
    <comment_count>23</comment_count>
      <attachid>63104</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-24 12:47:49 -0700</bug_when>
    <thetext>Comment on attachment 63104
fixed various problems.

&gt; +static Node* enclosingListChild(Node* node, Node* listNode)

I think it’s a little confusing that this function is just named enclosingListChild even though it takes the two arguments. A clearer name might help. You didn&apos;t add the function, so the name is not your fault.

&gt; +                // save and restore endOfSelection and startOfLastParagraph when necessary
&gt; +                // since moveParagraph and movePragraphWithClones can remove nodes.

The word &quot;save&quot; here should be capitalized.

&gt; +                // FIXME: This is very inefficient and expensive operation.

A better comment would explain why it&apos;s inefficient and why it&apos;s not easy to fix or something like that. Just saying it’s inefficient is strange. Doesn’t make clear what the tradeoff is.

&gt; +                int indexForEndOfSelection = indexForVisiblePosition(endOfSelection);
&gt;                  doApplyForSingleParagraph(forceCreateList, listTag, currentSelection.get());
&gt; +                if (endOfSelection.isNull() || endOfSelection.isOrphan() || startOfLastParagraph.isNull() || startOfLastParagraph.isOrphan()) {
&gt; +                    RefPtr&lt;Range&gt; lastSelectionRange = TextIterator::rangeFromLocationAndLength(document()-&gt;documentElement(), indexForEndOfSelection, 0, true);
&gt; +                    endOfSelection = lastSelectionRange-&gt;startPosition();
&gt; +                    startOfLastParagraph = startOfParagraph(endOfSelection);
&gt; +                }

This indexForEndOfSelection approach seems weak. It’s a sort of “I give up and can’t figure out any other way to make it work” approach. Not that I have anything better to suggest. As long as we have sufficient test coverage someone can come back and tackle this later I guess.

&gt; +            // FIXME: moveParagraphWithClones (deleteSelection) does not remove the old list properly
&gt; +            // See bug 33668 and the test editing/execCommand/insert-list-orphaned-item-with-nested-lists.html

This comment is confusing. &quot;Does not remove properly&quot; doesn&apos;t tell you what it does. It says what it doesn&apos;t do. It would be better if the comment was more specific.

It seems impossible for one test to cover all the new code paths here. I&apos;m surprised you added only one test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269530</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 15:04:45 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 63104 [details])
&gt; &gt; +static Node* enclosingListChild(Node* node, Node* listNode)
&gt; 
&gt; I think it’s a little confusing that this function is just named enclosingListChild even though it takes the two arguments. A clearer name might help. You didn&apos;t add the function, so the name is not your fault.

Actually, I&apos;m the one who added that function.  It finds the enclosing child of the specified list so I could have named it like enclosignListChildOfList but that seemed rather redundant.  But I can change the name if you have a better alternative.

&gt; &gt; +                // save and restore endOfSelection and startOfLastParagraph when necessary
&gt; &gt; +                // since moveParagraph and movePragraphWithClones can remove nodes.
&gt; 
&gt; The word &quot;save&quot; here should be capitalized.

Will fix.

&gt; &gt; +                // FIXME: This is very inefficient and expensive operation.
&gt; 
&gt; A better comment would explain why it&apos;s inefficient and why it&apos;s not easy to fix or something like that. Just saying it’s inefficient is strange. Doesn’t make clear what the tradeoff is.

Changed to: This is an inefficient way to keep selection alive because indexForVisiblePosition walks from the beginning of the document to the endOfSelection everytime this code is executed. But not using index is hard because there are so many ways we can lose selection inside doApplyForSingleParagraph.

&gt; &gt; +                int indexForEndOfSelection = indexForVisiblePosition(endOfSelection);
&gt; &gt;                  doApplyForSingleParagraph(forceCreateList, listTag, currentSelection.get());
&gt; &gt; +                if (endOfSelection.isNull() || endOfSelection.isOrphan() || startOfLastParagraph.isNull() || startOfLastParagraph.isOrphan()) {
&gt; &gt; +                    RefPtr&lt;Range&gt; lastSelectionRange = TextIterator::rangeFromLocationAndLength(document()-&gt;documentElement(), indexForEndOfSelection, 0, true);
&gt; &gt; +                    endOfSelection = lastSelectionRange-&gt;startPosition();
&gt; &gt; +                    startOfLastParagraph = startOfParagraph(endOfSelection);
&gt; &gt; +                }
&gt; 
&gt; This indexForEndOfSelection approach seems weak. It’s a sort of “I give up and can’t figure out any other way to make it work” approach. Not that I have anything better to suggest. As long as we have sufficient test coverage someone can come back and tackle this later I guess.

It really is &quot;I give up and can&apos;t figure out any other way to make it work&quot;.  I tried many different ways but I can always find a test that crashes after adding 10-20 lines of code everywhere else.  Until we invent a better way of iterating through paragraphs, we should stick to this rather inefficient and desperate approach. At least, it prevents us from crashing.

&gt; &gt; +            // FIXME: moveParagraphWithClones (deleteSelection) does not remove the old list properly
&gt; &gt; +            // See bug 33668 and the test editing/execCommand/insert-list-orphaned-item-with-nested-lists.html
&gt; 
&gt; This comment is confusing. &quot;Does not remove properly&quot; doesn&apos;t tell you what it does. It says what it doesn&apos;t do. It would be better if the comment was more specific.

Updated to:
            // Manually remove listNode because moveParagraphWithClones sometimes leaves it behind in the document.
            // See the bug 33668 and editing/execCommand/insert-list-orphaned-item-with-nested-lists.html.
            // FIXME: This might be a bug in moveParagraphWithClones or deleteSelection.

&gt; It seems impossible for one test to cover all the new code paths here. I&apos;m surprised you added only one test.

Fortunately, there are many existing tests that uses new code paths so all new code paths are covered.  e.g. removing any line of new code will result in either crash or failure of some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269537</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 15:16:01 -0700</bug_when>
    <thetext>Committed r66048: &lt;http://trac.webkit.org/changeset/66048&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>61540</attachid>
            <date>2010-07-14 11:05:10 -0700</date>
            <delta_ts>2010-07-14 17:25:57 -0700</delta_ts>
            <desc>demonstrates the bug (crashes WebKit without a patch)</desc>
            <filename>bug33668.html</filename>
            <type>text/html</type>
            <size>882</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PGh0bWw+DQo8Ym9keT4NCjxwPlRoaXMgdGVzdHMgY3Jhc2ggd2hlbiBsaXN0aWZ5aW5nIG5lc3Rl
ZC48L3A+DQo8ZGl2IGlkPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGU+DQo8dWw+PHVsPjxsaT5oZWxs
bzwvbGk+PC91bD53b3JsZDxvbD48bGk+V2ViS2l0PC9saT48L29sPjwvdWw+DQo8L2Rpdj4NCjxw
IGlkPSJjb25zb2xlIj48L3A+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+IA0KDQpp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQ0KICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsNCg0KdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcp
DQp2YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7DQoNCnZhciByID0g
ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsNCnZhciBzID0gd2luZG93LmdldFNlbGVjdGlvbigpOw0K
ci5zZXRTdGFydChlLCAwKTsNCnIuc2V0RW5kKGUsIGUuY2hpbGROb2Rlcy5sZW5ndGgpOw0Kcy5y
ZW1vdmVBbGxSYW5nZXMoKTsNCnMuYWRkUmFuZ2Uocik7DQpkb2N1bWVudC5leGVjQ29tbWFuZCgn
SW5zZXJ0T3JkZXJlZExpc3QnLCBmYWxzZSwgbnVsbCk7DQoNCmlmIChlLmlubmVySFRNTCA9PSAn
PG9sPjxvbD48bGk+aGVsbG88L2xpPjwvb2w+d29ybGQ8b2w+PGxpPldlYktpdDwvbGk+PC9vbD48
L29sPicpDQogICAgYy5pbm5lclRleHQgPSAiUEFTU1xuIg0KZWxzZQ0KICAgIGMuaW5uZXJUZXh0
ICs9ICJFeHBlY3RlZCA8b2w+PG9sPjxsaT5oZWxsbzwvbGk+PC9vbD53b3JsZDxvbD48bGk+V2Vi
S2l0PC9saT48L29sPjwvb2w+IGJ1dCBnb3QgXG4iICsgZS5pbm5lckhUTUwgKyAnXG4nOw0KDQo8
L3NjcmlwdD4NCjxib2R5Pg0KPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61587</attachid>
            <date>2010-07-14 17:25:57 -0700</date>
            <delta_ts>2010-07-22 12:30:23 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>fix33668</filename>
            <type>text/plain</type>
            <size>14121</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzM3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDctMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
Q29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1vZGlmeVJhbmdlIGluZmluaXRlIGxvb3AgKDEwMCUg
Q1BVIHVzYWdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzM2NjgKKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0
LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMuaHRtbAorCisgICAgICAgIFRoZSBidWcg
d2FzIGNhdXNlZCBieSB1bmxpc3RpZnlQYXJhZ3JhcGggbm90IG9idGFpbmluZyBuZXh0TGlzdENo
aWxkIGFuZCBwcmV2aW91c0xpc3RDaGlsZCBwcm9wZXJseQorICAgICAgICB3aGVuIHRoZSBjb250
ZW50IGlzIG9ycGhhbmVkLiBBZGRlZCBhIHZlcnNpb24gb2YgZW5jbG9zaW5nTGlzdENoaWxkIHRo
YXQgZmluZHMgdGhlIGVuY2xvc2luZyBsaXN0IGNoaWxkCisgICAgICAgIGluc2lkZSBhIHNwZWNp
ZmllZCBvdXRlciBsaXN0IG5vZGUuCisKKyAgICAgICAgbGlzdGlmeVBhcmFncmFwaCBoYWQgYW4g
aXNzdWUgd2hlcmUgaXQgZG9lc24ndCBmaW5kIHRoZSBsaXN0cyBhdCB0aGUgc2FtZSBET00gbGV2
ZWwgYW5kIGl0IHdhcyBtb3ZpbmcKKyAgICAgICAgcGFyYWdyYXBocyB0byBhIHdyb25nIGxpc3Qu
IElzb2xhdGVkIGNvZGUgdG8gYWRqYWNlbnRFbmNsb3NpbmdMaXN0IGFuZCBhZGRlZCBhIGNoZWNr
IGZvciBlbmNsb3NpbmcgbGlzdC4KKyAgICAgICAgQWxzbyBmaXhlZCB0aGUgY2hlY2sgZm9yIGF2
b2lkaW5nIExJIGJlY2F1c2UgaXQgd2FzIGluY29ycmVjdGx5IGNoZWNraW5nIHRoZSBleGlzdGVu
Y2Ugb2YgbGlzdCBpdGVtCisgICAgICAgIGluIHRoZSBhbmNlc3RyeSBhdCB0aGUgaW5zZXJ0aW9u
IHBvaW50LgorCisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjplbmNsb3NpbmdMaXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
ZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmFwaCk6CisgICAgICAgIChX
ZWJDb3JlOjphZGphY2VudEVuY2xvc2luZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0
TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
TGlzdENvbW1hbmQuaDoKKwogMjAxMC0wNy0xNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDYzMjIyKQorKysgV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsMTcgQEAgSW5zZXJ0TGlzdENvbW1hbmQ6Okluc2VydExpc3RDb21tYW5kKERvYwogICAgIDog
Q29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3R5cGUodHlwZSkKIHsKIH0KKyAgICAK
K3N0YXRpYyBOb2RlKiBlbmNsb3NpbmdMaXN0Q2hpbGQoTm9kZSogbm9kZSwgTm9kZSogZW5jbG9z
aW5nTGlzdE5vZGUpCit7CisgICAgbm9kZSA9IGVuY2xvc2luZ0xpc3RDaGlsZChub2RlKTsKIAor
ICAgIHdoaWxlIChub2RlICYmIGVuY2xvc2luZ0xpc3Qobm9kZSkgIT0gZW5jbG9zaW5nTGlzdE5v
ZGUpCisgICAgICAgIG5vZGUgPSBlbmNsb3NpbmdMaXN0Q2hpbGQobm9kZS0+cGFyZW50Tm9kZSgp
KTsKKworICAgIHJldHVybiBub2RlOworfQorICAgIAogdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseSgpCiB7CiAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKQpAQCAtMTQz
LDE1ICsxNTMsMTcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZQog
ICAgICAgICAgICAgLy8gbGlzdENoaWxkTm9kZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlz
dCBhbmQgYSBsaXN0IG9mIHR5cGUgbV90eXBlIHdpbGwgYmUgY3JlYXRlZC4KICAgICAgICAgICAg
IHN3aXRjaExpc3RUeXBlID0gdHJ1ZTsKIAotICAgICAgICB1bmxpc3RpZnlQYXJhZ3JhcGgoZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIGxpc3ROb2RlLCBsaXN0Q2hpbGROb2RlKTsK
KyAgICAgICAgdW5saXN0aWZ5UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFy
dCgpKTsKICAgICB9CiAKICAgICBpZiAoIWxpc3RDaGlsZE5vZGUgfHwgc3dpdGNoTGlzdFR5cGUg
fHwgZm9yY2VDcmVhdGVMaXN0KQogICAgICAgICBtX2xpc3RFbGVtZW50ID0gbGlzdGlmeVBhcmFn
cmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSwgbGlzdFRhZyk7CiB9CiAKLXZv
aWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9z
aXRpb24mIG9yaWdpbmFsU3RhcnQsIEhUTUxFbGVtZW50KiBsaXN0Tm9kZSwgTm9kZSogbGlzdENo
aWxkTm9kZSkKK3ZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmFwaChjb25z
dCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQpCiB7CisgICAgTm9kZSogbGlzdENoaWxk
Tm9kZSA9IGVuY2xvc2luZ0xpc3RDaGlsZChvcmlnaW5hbFN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpKTsKKyAgICBIVE1MRWxlbWVudCogbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KGxpc3RD
aGlsZE5vZGUpOwogICAgIE5vZGUqIG5leHRMaXN0Q2hpbGQ7CiAgICAgTm9kZSogcHJldmlvdXNM
aXN0Q2hpbGQ7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OwpAQCAtMTY1LDE1ICsxNzcsMTEg
QEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYQogICAgICAgICAvLyBB
IHBhcmFncmFwaCBpcyB2aXN1YWxseSBhIGxpc3QgaXRlbSBtaW51cyBhIGxpc3QgbWFya2VyLiAg
VGhlIHBhcmFncmFwaCB3aWxsIGJlIG1vdmVkLgogICAgICAgICBzdGFydCA9IHN0YXJ0T2ZQYXJh
Z3JhcGgob3JpZ2luYWxTdGFydCk7CiAgICAgICAgIGVuZCA9IGVuZE9mUGFyYWdyYXBoKHN0YXJ0
KTsKLSAgICAgICAgbmV4dExpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChlbmQubmV4dCgp
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKG5leHRMaXN0Q2hpbGQg
IT0gbGlzdENoaWxkTm9kZSk7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdMaXN0KG5leHRMaXN0Q2hp
bGQpICE9IGxpc3ROb2RlKQotICAgICAgICAgICAgbmV4dExpc3RDaGlsZCA9IDA7Ci0gICAgICAg
IHByZXZpb3VzTGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKHN0YXJ0LnByZXZpb3VzKCku
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocHJldmlvdXNMaXN0Q2hp
bGQgIT0gbGlzdENoaWxkTm9kZSk7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdMaXN0KHByZXZpb3Vz
TGlzdENoaWxkKSAhPSBsaXN0Tm9kZSkKLSAgICAgICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0g
MDsKKyAgICAgICAgLy8gRmluZCBzdXJyb3VkaW5nIGxpc3QgY2hpbGRyZW4gd2hvc2UgZW5jbG9z
aW5nIGxpc3QgaXMgc2FtZSBhcyB0aGUgb25lIGJlaW5nIHVubGlzdGlmaWVkLgorICAgICAgICBu
ZXh0TGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGVuZC5uZXh0KCkuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCksIGxpc3ROb2RlKTsKKyAgICAgICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBlbmNs
b3NpbmdMaXN0Q2hpbGQoc3RhcnQucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwg
bGlzdE5vZGUpOwogICAgIH0KKwogICAgIC8vIFdoZW4gcmVtb3ZpbmcgYSBsaXN0LCB3ZSBtdXN0
IGFsd2F5cyBjcmVhdGUgYSBwbGFjZWhvbGRlciB0byBhY3QgYXMgYSBwb2ludCBvZiBpbnNlcnRp
b24KICAgICAvLyBmb3IgdGhlIGxpc3QgY29udGVudCBiZWluZyByZW1vdmVkLgogICAgIFJlZlB0
cjxFbGVtZW50PiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKTsK
QEAgLTIxMCwyOCArMjE4LDM2IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBh
cmFncmEKICAgICBtb3ZlUGFyYWdyYXBocyhzdGFydCwgZW5kLCBpbnNlcnRpb25Qb2ludCwgdHJ1
ZSk7CiB9CiAKKy8vIEZpbmRzIGFuIGVuY2xvc2luZyBsaXN0IGF0IHBvcyBvZiBsaXN0VGFnIHR5
cGUgKHVsIG9yIG9sKS4KK3N0YXRpYyBFbGVtZW50KiBhZGphY2VudEVuY2xvc2luZ0xpc3QoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3MsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYWRqYWNlbnRQ
b3MsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcpCit7CisgICAgRWxlbWVudCogbGlzdE5v
ZGUgPSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KGFkamFjZW50UG9zLmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpKTsKKworICAgIGlmICghbGlzdE5vZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKCFsaXN0Tm9kZS0+aGFzVGFnTmFtZShsaXN0VGFnKQorICAgICAgICB8fCBsaXN0Tm9kZS0+
Y29udGFpbnMocG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKQorICAgICAgICB8fCBlbmNsb3Np
bmdUYWJsZUNlbGwoYWRqYWNlbnRQb3MuZGVlcEVxdWl2YWxlbnQoKSkgIT0gZW5jbG9zaW5nVGFi
bGVDZWxsKHBvcy5kZWVwRXF1aXZhbGVudCgpKQorICAgICAgICB8fCBlbmNsb3NpbmdMaXN0KGxp
c3ROb2RlKSAhPSBlbmNsb3NpbmdMaXN0KHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGxpc3ROb2RlOworfQorCiBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlmeVBhcmFncmFwaChjb25zdCBW
aXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RU
YWcpCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChvcmln
aW5hbFN0YXJ0KTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gZW5kT2ZQYXJhZ3JhcGgoc3Rh
cnQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFkam9pbmluZyBsaXN0cy4KLSAgICBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNQb3NpdGlvbiA9IHN0YXJ0LnByZXZpb3VzKHRydWUpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBuZXh0UG9zaXRpb24gPSBlbmQubmV4dCh0cnVlKTsKICAgICBSZWZQdHI8SFRN
TEVsZW1lbnQ+IGxpc3RJdGVtRWxlbWVudCA9IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVu
dCgpKTsKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtF
bGVtZW50KGRvY3VtZW50KCkpOwogICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIsIGxpc3RJdGVt
RWxlbWVudCk7Ci0gICAgRWxlbWVudCogcHJldmlvdXNMaXN0ID0gb3V0ZXJtb3N0RW5jbG9zaW5n
TGlzdChwcmV2aW91c1Bvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKLSAgICBFbGVt
ZW50KiBuZXh0TGlzdCA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3QobmV4dFBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpKTsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKTsKLSAgICBOb2RlKiBwcmV2aW91c0NlbGwgPSBlbmNsb3NpbmdUYWJs
ZUNlbGwocHJldmlvdXNQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBOb2RlKiBuZXh0
Q2VsbCA9IGVuY2xvc2luZ1RhYmxlQ2VsbChuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7
Ci0gICAgTm9kZSogY3VycmVudENlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwoc3RhcnQuZGVlcEVx
dWl2YWxlbnQoKSk7Ci0gICAgaWYgKHByZXZpb3VzTGlzdCAmJiAoIXByZXZpb3VzTGlzdC0+aGFz
VGFnTmFtZShsaXN0VGFnKSB8fCBzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKHByZXZpb3VzTGlz
dCkgfHwgcHJldmlvdXNDZWxsICE9IGN1cnJlbnRDZWxsKSkKLSAgICAgICAgcHJldmlvdXNMaXN0
ID0gMDsKLSAgICBpZiAobmV4dExpc3QgJiYgKCFuZXh0TGlzdC0+aGFzVGFnTmFtZShsaXN0VGFn
KSB8fCBzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKG5leHRMaXN0KSB8fCBuZXh0Q2VsbCAhPSBj
dXJyZW50Q2VsbCkpCi0gICAgICAgIG5leHRMaXN0ID0gMDsKKwogICAgIC8vIFBsYWNlIGxpc3Qg
aXRlbSBpbnRvIGFkam9pbmluZyBsaXN0cy4KKyAgICBFbGVtZW50KiBwcmV2aW91c0xpc3QgPSBh
ZGphY2VudEVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSwgc3RhcnQucHJldmlv
dXModHJ1ZSksIGxpc3RUYWcpOworICAgIEVsZW1lbnQqIG5leHRMaXN0ID0gYWRqYWNlbnRFbmNs
b3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCksIGVuZC5uZXh0KHRydWUpLCBsaXN0VGFn
KTsKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RFbGVtZW50OwogICAgIGlmIChwcmV2aW91
c0xpc3QpCiAgICAgICAgIGFwcGVuZE5vZGUobGlzdEl0ZW1FbGVtZW50LCBwcmV2aW91c0xpc3Qp
OwpAQCAtMjU3LDE5ICsyNzMsMTcgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlz
dENvbW1hbgogICAgICAgICAvLyBpbmxpbmUgYW5jZXN0b3JzIG9mIHN0YXJ0LCBzaW5jZSBpdCBp
cyBlYXNpZXIgZm9yIGVkaXRpbmcgdG8gcHJvZHVjZSAKICAgICAgICAgLy8gY2xlYW4gbWFya3Vw
IHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBwdXNoZWQgZG93biBhcyBmYXIgYXMgcG9zc2libGUu
CiAgICAgICAgIFBvc2l0aW9uIGluc2VydGlvblBvcyhzdGFydC5kZWVwRXF1aXZhbGVudCgpLnVw
c3RyZWFtKCkpOwotICAgICAgICAvLyBBbHNvIGF2b2lkIHRoZSBjb250YWluaW5nIGxpc3QgaXRl
bS4KLSAgICAgICAgTm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGluc2VydGlv
blBvcy5ub2RlKCkpOwotICAgICAgICBpZiAobGlzdENoaWxkICYmIGxpc3RDaGlsZC0+aGFzVGFn
TmFtZShsaVRhZykpCi0gICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZShsaXN0Q2hpbGQpOwogCi0gICAgICAgIGluc2VydE5vZGVBdChsaXN0RWxlbWVu
dCwgaW5zZXJ0aW9uUG9zKTsKKyAgICAgICAgTm9kZSogbm9kZUF0SW5zZXJ0aW9uUG9zID0gaW5z
ZXJ0aW9uUG9zLm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGVBdEluc2VydGlvblBvcy0+aGFzVGFn
TmFtZShsaVRhZykgJiYgZW5jbG9zaW5nTGlzdChub2RlQXRJbnNlcnRpb25Qb3MpKQorICAgICAg
ICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShsaXN0RWxlbWVudCwgbm9kZUF0SW5zZXJ0aW9uUG9zKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGxpc3RFbGVtZW50LCBpbnNl
cnRpb25Qb3MpOwogCiAgICAgICAgIC8vIFdlIGluc2VydGVkIHRoZSBsaXN0IGF0IHRoZSBzdGFy
dCBvZiB0aGUgY29udGVudCB3ZSdyZSBhYm91dCB0byBtb3ZlCiAgICAgICAgIC8vIFVwZGF0ZSB0
aGUgc3RhcnQgb2YgY29udGVudCwgc28gd2UgZG9uJ3QgdHJ5IHRvIG1vdmUgdGhlIGxpc3QgaW50
byBpdHNlbGYuICBidWcgMTkwNjYKICAgICAgICAgaWYgKGluc2VydGlvblBvcyA9PSBzdGFydC5k
ZWVwRXF1aXZhbGVudCgpKQogICAgICAgICAgICAgc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKG9y
aWdpbmFsU3RhcnQpOwotICAgICAgICBwcmV2aW91c0xpc3QgPSBvdXRlcm1vc3RFbmNsb3NpbmdM
aXN0KHByZXZpb3VzUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCksIGVuY2xvc2luZ0xp
c3QobGlzdEVsZW1lbnQuZ2V0KCkpKTsKLSAgICAgICAgbmV4dExpc3QgPSBvdXRlcm1vc3RFbmNs
b3NpbmdMaXN0KG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwgZW5jbG9zaW5n
TGlzdChsaXN0RWxlbWVudC5nZXQoKSkpOwogICAgIH0KIAogICAgIG1vdmVQYXJhZ3JhcGgoc3Rh
cnQsIGVuZCwgVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSks
IHRydWUpOwpAQCAtMjgxLDYgKzI5NSw4IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2Vy
dExpc3RDb21tYW4KICAgICAgICAgbGlzdEVsZW1lbnQgPSBtX2xpc3RFbGVtZW50OwogCiAgICAg
aWYgKGxpc3RFbGVtZW50KSB7CisgICAgICAgIHByZXZpb3VzTGlzdCA9IGxpc3RFbGVtZW50LT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CisgICAgICAgIG5leHRMaXN0ID0gbGlzdEVsZW1lbnQt
Pm5leHRFbGVtZW50U2libGluZygpOwogICAgICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91
c0xpc3QsIGxpc3RFbGVtZW50LmdldCgpKSkKICAgICAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxl
bWVudHMocHJldmlvdXNMaXN0LCBsaXN0RWxlbWVudC5nZXQoKSk7CiAgICAgICAgIGlmIChjYW5N
ZXJnZUxpc3RzKGxpc3RFbGVtZW50LmdldCgpLCBuZXh0TGlzdCkpCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuaAkocmV2aXNpb24gNjMyMjIpCisrKyBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2
YXRlOgogICAgIEhUTUxFbGVtZW50KiBmaXhPcnBoYW5lZExpc3RDaGlsZChOb2RlKik7CiAgICAg
Ym9vbCBtb2RpZnlSYW5nZSgpOwogICAgIHZvaWQgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChi
b29sIGZvcmNlQ3JlYXRlTGlzdCk7Ci0gICAgdm9pZCB1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0YXJ0LCBIVE1MRWxlbWVudCogbGlzdE5vZGUsIE5v
ZGUqIGxpc3RDaGlsZE5vZGUpOworICAgIHZvaWQgdW5saXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCk7CiAgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gbGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcpOwogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4g
bV9saXN0RWxlbWVudDsKICAgICBUeXBlIG1fdHlwZTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMzc0
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTAtMDctMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViQ29yZTo6SW5zZXJ0
TGlzdENvbW1hbmQ6Om1vZGlmeVJhbmdlIGluZmluaXRlIGxvb3AgKDEwMCUgQ1BVIHVzYWdlKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM2NjgKKwor
ICAgICAgICBBZGRlZCBhIHRlc3QgdG8gaW5zZXJ0IG9yZGVyZWQgbGlzdCBvbiBhIGxpc3Qgd2hl
cmUgbGlzdCBjaGlsZHJlbiBhcmUgYW4gdW5vcmRlcmVkIGxpc3QsCisgICAgICAgIGFuIG9ycGhh
bmVkIGNoaWxkLCBhbmQgYW4gb3JkZXJlZCBsaXN0IHJlc3BlY3RpdmVseS4gV2ViS2l0IHNob3Vs
ZCBub3QgY3Jhc2ggb24gdGhpcyB0ZXN0LgorCisgICAgICAgIFRoZSBiZWhhdmlvciBvZiBXZWJL
aXQgd2hlbiBpbnNlcnRpbmcgb3JkZXJlZC91bm9yZGVyZWQgbGlzdCBvbiBhIGxpc3Qgd2l0aAor
ICAgICAgICBhbiBvcnBoYW5lZCBuZXN0ZWQgbGlzdCBhdCB0aGUgZW5kICg1MjA3MzY5Lmh0bWwp
IGlzIHVwZGF0ZWQgdG8gbWF0Y2ggdGhhdCBvZiBNU0lFIGluc3RlYWQgb2YgRmlyZWZveC4KKwor
ICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWw6CisgICAgICAgICogZWRpdGlu
Zy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3Rz
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbnNl
cnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWw6IEFkZGVkLgorCiAy
MDEwLTA3LTE0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBIHNwdXRuaWsgdGVzdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBTa2lwcGVkIGxpc3QgaW4g
cjYzMzY2IGJlY2F1c2UgaXQgd2FzIGEgYm9ndXMgZmlsZW5hbWUsCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDYzMjIyKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAKLVRoaXMgdGVzdHMg
Zm9yIGEgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZmxhdHRlbiBhIGxpc3QgY29udGFpbmluZyBhIHN1
Yi1saXN0IGF0IHRoZSBlbmQuIFlvdSBzaG91bGRuJ3QgZ2V0IGEgY3Jhc2ggYW5kIHRoZXJlIHNo
b3VsZCBiZSBhIHNpbmdsZSBsZXZlbCBsaXN0IGJlbG93LgorVGhpcyB0ZXN0cyBmb3IgYSBjcmFz
aCB3aGVuIHRyeWluZyB0byBmbGF0dGVuIGEgbGlzdCBjb250YWluaW5nIGEgc3ViLWxpc3QgYXQg
dGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQgYSBjcmFzaC4KIAogT25lCiBUd28KIFRocmVlCiBG
b3VyCi08dWw+PGxpPk9uZTwvbGk+PGxpPlR3bzwvbGk+PGxpPlRocmVlPC9saT48bGk+Rm91cjwv
bGk+PC91bD4KKzx1bD48bGk+T25lPC9saT48bGk+VHdvPC9saT48L3VsPjxvbD48dWw+PGxpPlRo
cmVlPC9saT48bGk+Rm91cjwvbGk+PC91bD48L29sPgogCiBQQVNTCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAkocmV2aXNpb24gNjMyMjIpCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDQgQEAKLTxwPlRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiB0cnlp
bmcgdG8gZmxhdHRlbiBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0IHRoZSBlbmQuIFlv
dSBzaG91bGRuJ3QgZ2V0IGEgY3Jhc2ggYW5kIHRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBsZXZl
bCBsaXN0IGJlbG93LjwvcD4KKzxwPlRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiB0cnlpbmcg
dG8gZmxhdHRlbiBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0IHRoZSBlbmQuIFlvdSBz
aG91bGRuJ3QgZ2V0IGEgY3Jhc2guPC9wPgogPGRpdiBpZD0iZGl2IiBjb250ZW50ZWRpdGFibGU9
InRydWUiPjxvbD48bGk+T25lPC9saT48bGk+VHdvPC9saT48dWw+PGxpPlRocmVlPC9saT48bGk+
Rm91cjwvbGk+PC9kaXY+CiA8cCBpZD0iY29uc29sZSI+PC9wPgogCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0
ZWQtbGlzdHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21t
YW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACisKKzxESVYgaWQ9InRlc3QiIGNvbnRl
bnRFZGl0YWJsZT0iIj4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8VUw+Cis8T0w+Cis8TEk+Cis8I3Rl
eHQ+PHNlbGVjdGlvbi1hbmNob3I+aGVsbG88LyN0ZXh0PgorPC9MST4KKzwvT0w+Cis8L1VMPgor
PE9MPgorPExJPgorPCN0ZXh0PndvcmxkPC8jdGV4dD4KKzwvTEk+Cis8L09MPgorPFVMPgorPE9M
PgorPExJPgorPCN0ZXh0PldlYktpdDxzZWxlY3Rpb24tZm9jdXM+PC8jdGV4dD4KKzwvTEk+Cis8
L09MPgorPC9VTD4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8L0RJVj4KSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3Rl
ZC1saXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1h
bmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1v
cnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzAgQEAKKzxodG1sPg0KKzxoZWFkPg0KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
ZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8Ym9keT4NCis8cD5UaGlz
IHRlc3RzIGNyYXNoIHdoZW4gbGlzdGlmeWluZyBuZXN0ZWQgbGlzdHMgc2FuZHdpdGNoaW5nIGEg
TEktbGVzcyBsaXN0IGNoaWxkIChzZWUgYnVnIDMzNjY4KS48L3A+DQorPGRpdiBpZD0idGVzdCIg
Y29udGVudGVkaXRhYmxlPg0KKzx1bD48dWw+PGxpPmhlbGxvPC9saT48L3VsPndvcmxkPG9sPjxs
aT5XZWJLaXQ8L2xpPjwvb2w+PC91bD4NCis8L2Rpdj4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+IA0KKw0KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpDQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsNCisNCit2YXIgZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd0ZXN0JykNCisNCit2YXIgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7
DQordmFyIHMgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7DQorci5zZXRTdGFydChlLCAwKTsNCity
LnNldEVuZChlLCBlLmNoaWxkTm9kZXMubGVuZ3RoKTsNCitzLnJlbW92ZUFsbFJhbmdlcygpOw0K
K3MuYWRkUmFuZ2Uocik7DQorZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0luc2VydE9yZGVyZWRMaXN0
JywgZmFsc2UsIG51bGwpOw0KKw0KK01hcmt1cC53YWl0VW50aWxEb25lKCk7DQorTWFya3VwLmR1
bXAoZSkNCisNCis8L3NjcmlwdD4NCis8L2JvZHk+DQorPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62374</attachid>
            <date>2010-07-22 20:08:19 -0700</date>
            <delta_ts>2010-07-23 22:58:53 -0700</delta_ts>
            <desc>reflects the cleanup done in 42841</desc>
            <filename>fix33668b</filename>
            <type>text/plain</type>
            <size>7124</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mzk0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDctMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
Q29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1vZGlmeVJhbmdlIGluZmluaXRlIGxvb3AgKDEwMCUg
Q1BVIHVzYWdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzM2NjgKKworICAgICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkgZW5jbG9zaW5nTGlzdENo
aWxkIHJldHVybmluZyBhIGxpc3QgY2hpbGQgd2hvc2UgZW5jbG9zaW5nIGxpc3QgaXMKKyAgICAg
ICAgYSBzaWJsaW5nIG9mIHRoZSBjdXJyZW50IGxpc3QgY2hpbGQuIEZpeGVkIGVuY2xvc2luZ0xp
c3RDaGlsZCB0byB0cmF2ZXJzZSB1cHdhcmRzCisgICAgICAgIGluIHRoZSBET00gdG8gZmluZCB0
aGUgbGlzdCBjaGlsZCB3aGljaCBpcyBhIHNpYmxpbmcgb2YgdGhlIGN1cnJlbnQgbGlzdCBjaGls
ZC4KKworICAgICAgICBhZGphY2VudEVuY2xvc2luZ0xpc3QgaXMgYWxzbyBtb2RpZmllZCB0byBm
aXggYSBzaW1pbGFyIHByb2JsZW0uCisKKyAgICAgICAgQWxzbyBmaXhlZCB0aGUgY2hlY2sgZm9y
IGF2b2lkaW5nIExJIGluIGxpc3RpZnlQYXJhZ3JhcGggYmVjYXVzZSBpdCB3YXMgaW5jb3JyZWN0
bHkgY2hlY2tpbmcKKyAgICAgICAgdGhlIGV4aXN0ZW5jZSBvZiBsaXN0IGl0ZW0gaW4gdGhlIGFu
Y2VzdHJ5IGF0IHRoZSBpbnNlcnRpb24gcG9pbnQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9l
eGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0
bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jbG9zaW5nTGlzdENoaWxkKTogRW5zdXJlZCB0aGF0IHRoZSBlbmNsb3Npbmcg
bGlzdCBvZiB0aGUgcmV0dXJuaW5nIGxpc3QgY2hpbGQgaXMgbGlzdE5vZGUuCisgICAgICAgIChX
ZWJDb3JlOjphZGphY2VudEVuY2xvc2luZ0xpc3QpOiAKKyAgICAgICAgKFdlYkNvcmU6Okluc2Vy
dExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKToKKwogMjAxMC0wNy0yMiAgTU9SSVRBIEhh
amltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZh
ZmFpLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCShyZXZpc2lvbiA2
Mzk0MSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Myw4ICsxNTMsOCBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5
Rm9yU2luZ2xlCiBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUqIG5vZGUsIE5v
ZGUqIGxpc3ROb2RlKQogewogICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGls
ZChub2RlKTsKLSAgICBpZiAoZW5jbG9zaW5nTGlzdChsaXN0Q2hpbGQpICE9IGxpc3ROb2RlKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAobGlzdENoaWxkICYmIGVuY2xvc2luZ0xpc3Qo
bGlzdENoaWxkKSAhPSBsaXN0Tm9kZSkKKyAgICAgICAgbGlzdENoaWxkID0gZW5jbG9zaW5nTGlz
dENoaWxkKGxpc3RDaGlsZC0+cGFyZW50Tm9kZSgpKTsKICAgICByZXR1cm4gbGlzdENoaWxkOwog
fQogCkBAIC0yMjEsMTIgKzIyMSwxMCBAQCBzdGF0aWMgRWxlbWVudCogYWRqYWNlbnRFbmNsb3Np
bmdMaXN0KGNvCiAgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBO
b2RlKiBwcmV2aW91c0NlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwocG9zLmRlZXBFcXVpdmFsZW50
KCkpOwotICAgIE5vZGUqIGN1cnJlbnRDZWxsID0gZW5jbG9zaW5nVGFibGVDZWxsKGFkamFjZW50
UG9zLmRlZXBFcXVpdmFsZW50KCkpOwotCiAgICAgaWYgKCFsaXN0Tm9kZS0+aGFzVGFnTmFtZShs
aXN0VGFnKQogICAgICAgICB8fCBsaXN0Tm9kZS0+Y29udGFpbnMocG9zLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpKQotICAgICAgICB8fCBwcmV2aW91c0NlbGwgIT0gY3VycmVudENlbGwpCisgICAg
ICAgIHx8IGVuY2xvc2luZ1RhYmxlQ2VsbChhZGphY2VudFBvcy5kZWVwRXF1aXZhbGVudCgpKSAh
PSBlbmNsb3NpbmdUYWJsZUNlbGwocG9zLmRlZXBFcXVpdmFsZW50KCkpCisgICAgICAgIHx8IGVu
Y2xvc2luZ0xpc3QobGlzdE5vZGUpICE9IGVuY2xvc2luZ0xpc3QocG9zLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGlzdE5vZGU7CkBA
IC0yNzAsMTIgKzI2OCwxMiBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29t
bWFuCiAgICAgICAgIC8vIGlubGluZSBhbmNlc3RvcnMgb2Ygc3RhcnQsIHNpbmNlIGl0IGlzIGVh
c2llciBmb3IgZWRpdGluZyB0byBwcm9kdWNlIAogICAgICAgICAvLyBjbGVhbiBtYXJrdXAgd2hl
biBpbmxpbmUgZWxlbWVudHMgYXJlIHB1c2hlZCBkb3duIGFzIGZhciBhcyBwb3NzaWJsZS4KICAg
ICAgICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9zKHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkudXBzdHJl
YW0oKSk7Ci0gICAgICAgIC8vIEFsc28gYXZvaWQgdGhlIGNvbnRhaW5pbmcgbGlzdCBpdGVtLgot
ICAgICAgICBOb2RlKiBsaXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoaW5zZXJ0aW9uUG9z
Lm5vZGUoKSk7Ci0gICAgICAgIGlmIChsaXN0Q2hpbGQgJiYgbGlzdENoaWxkLT5oYXNUYWdOYW1l
KGxpVGFnKSkKLSAgICAgICAgICAgIGluc2VydGlvblBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZv
cmVOb2RlKGxpc3RDaGlsZCk7CiAKLSAgICAgICAgaW5zZXJ0Tm9kZUF0KGxpc3RFbGVtZW50LCBp
bnNlcnRpb25Qb3MpOworICAgICAgICBOb2RlKiBub2RlQXRJbnNlcnRpb25Qb3MgPSBpbnNlcnRp
b25Qb3Mubm9kZSgpOworICAgICAgICBpZiAobm9kZUF0SW5zZXJ0aW9uUG9zLT5oYXNUYWdOYW1l
KGxpVGFnKSAmJiBlbmNsb3NpbmdMaXN0KG5vZGVBdEluc2VydGlvblBvcykpCisgICAgICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKGxpc3RFbGVtZW50LCBub2RlQXRJbnNlcnRpb25Qb3MpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBpbnNlcnROb2RlQXQobGlzdEVsZW1lbnQsIGluc2VydGlv
blBvcyk7CiAKICAgICAgICAgLy8gV2UgaW5zZXJ0ZWQgdGhlIGxpc3QgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBjb250ZW50IHdlJ3JlIGFib3V0IHRvIG1vdmUKICAgICAgICAgLy8gVXBkYXRlIHRoZSBz
dGFydCBvZiBjb250ZW50LCBzbyB3ZSBkb24ndCB0cnkgdG8gbW92ZSB0aGUgbGlzdCBpbnRvIGl0
c2VsZi4gIGJ1ZyAxOTA2NgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjM5NDMpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNy0yMiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6bW9k
aWZ5UmFuZ2UgaW5maW5pdGUgbG9vcCAoMTAwJSBDUFUgdXNhZ2UpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzY2OAorCisgICAgICAgIEFkZGVkIGEg
dGVzdCB0byBpbnNlcnQgb3JkZXJlZCBsaXN0IG9uIGEgbGlzdCB3aGVyZSBsaXN0IGNoaWxkcmVu
IGFyZSBhbiB1bm9yZGVyZWQgbGlzdCwKKyAgICAgICAgYW4gb3JwaGFuZWQgY2hpbGQsIGFuZCBh
biBvcmRlcmVkIGxpc3QgcmVzcGVjdGl2ZWx5LiBXZWJLaXQgc2hvdWxkIG5vdCBjcmFzaCBvbiB0
aGlzIHRlc3QuCisKKyAgICAgICAgVGhlIGJlaGF2aW9yIG9mIFdlYktpdCB3aGVuIGluc2VydGlu
ZyBvcmRlcmVkL3Vub3JkZXJlZCBsaXN0IG9uIGEgbGlzdCB3aXRoCisgICAgICAgIGFuIG9ycGhh
bmVkIG5lc3RlZCBsaXN0IGF0IHRoZSBlbmQgKDUyMDczNjkuaHRtbCkgaXMgdXBkYXRlZCB0byBt
YXRjaCB0aGF0IG9mIE1TSUUgaW5zdGVhZCBvZiBGaXJlZm94LgorCisgICAgICAgICogZWRpdGlu
Zy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBlZGl0aW5nL2V4
ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1s
aXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMuaHRtbDogQWRkZWQuCisKIDIwMTAt
MDctMjIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC81MjA3MzY5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2Mzk0MSkKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTQsNiArNCw2IEBAIE9uZQogVHdvCiBUaHJlZQogRm91cgotPHVsPjxsaT5P
bmU8L2xpPjxsaT5Ud288L2xpPjxsaT5UaHJlZTwvbGk+PGxpPkZvdXI8L2xpPjwvdWw+Cis8dWw+
PGxpPk9uZTwvbGk+PGxpPlR3bzwvbGk+PC91bD48b2w+PHVsPjxsaT5UaHJlZTwvbGk+PGxpPkZv
dXI8L2xpPjwvdWw+PC9vbD4KIAogUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2lu
c2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlz
dC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNyBAQAorVGhpcyB0ZXN0cyBjcmFzaCB3aGVuIGxpc3RpZnlpbmcgbmVz
dGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCBpbiBiZXR3ZWVuIChzZWUgYnVn
IDMzNjY4KS4KKworPERJViBpZD0idGVzdCIgY29udGVudEVkaXRhYmxlPSIiPgorPCN0ZXh0Pgor
PC8jdGV4dD4KKzxVTD4KKzxPTD4KKzxMST4KKzwjdGV4dD48c2VsZWN0aW9uLWFuY2hvcj5oZWxs
bzwvI3RleHQ+Cis8L0xJPgorPC9PTD4KKzwvVUw+Cis8T0w+Cis8TEk+Cis8I3RleHQ+d29ybGQ8
LyN0ZXh0PgorPC9MST4KKzwvT0w+Cis8VUw+Cis8T0w+Cis8TEk+Cis8I3RleHQ+V2ViS2l0PHNl
bGVjdGlvbi1mb2N1cz48LyN0ZXh0PgorPC9MST4KKzwvT0w+Cis8L1VMPgorPCN0ZXh0PgorPC8j
dGV4dD4KKzwvRElWPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNl
cnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1p
dGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQt
bGlzdHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJ0ZXN0
IiBjb250ZW50ZWRpdGFibGU+CisgICAgPHVsPjx1bD48bGk+aGVsbG88L2xpPjwvdWw+d29ybGQ8
b2w+PGxpPldlYktpdDwvbGk+PC9vbD48L3VsPgorPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+IAorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdCcpCit2YXIgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Cit2YXIg
cyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKworci5zZXRTdGFydChlLCAwKTsKK3Iuc2V0RW5k
KGUsIGUuY2hpbGROb2Rlcy5sZW5ndGgpOworcy5yZW1vdmVBbGxSYW5nZXMoKTsKK3MuYWRkUmFu
Z2Uocik7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnSW5zZXJ0T3JkZXJlZExpc3QnLCBmYWxzZSwg
bnVsbCk7CisKK01hcmt1cC5kZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBjcmFzaCB3aGVuIGxpc3Rp
ZnlpbmcgbmVzdGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCBpbiBiZXR3ZWVu
IChzZWUgYnVnIDMzNjY4KS4iKQorTWFya3VwLnNldE5vZGVUb0R1bXAoZSkKKzwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="50557"
          type_id="1"
          status="-"
          setter="ojan"
    />
    <flag name="commit-queue"
          id="50558"
          type_id="3"
          status="-"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62487</attachid>
            <date>2010-07-23 22:58:53 -0700</date>
            <delta_ts>2010-07-30 01:24:00 -0700</delta_ts>
            <desc>fixed per ojan&apos;s comments</desc>
            <filename>fix33668c</filename>
            <type>text/plain</type>
            <size>7085</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mzk0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDctMjMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
Q29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1vZGlmeVJhbmdlIGluZmluaXRlIGxvb3AgKDEwMCUg
Q1BVIHVzYWdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzM2NjgKKworICAgICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkgZW5jbG9zaW5nTGlzdENo
aWxkIHJldHVybmluZyBhIGxpc3QgY2hpbGQgd2hvc2UgZW5jbG9zaW5nIGxpc3QgaXMKKyAgICAg
ICAgYSBzaWJsaW5nIG9mIHRoZSBjdXJyZW50IGxpc3QgY2hpbGQuIEZpeGVkIGVuY2xvc2luZ0xp
c3RDaGlsZCB0byB0cmF2ZXJzZSB1cHdhcmRzCisgICAgICAgIGluIHRoZSBET00gdG8gZmluZCB0
aGUgbGlzdCBjaGlsZCB3aGljaCBpcyBhIHNpYmxpbmcgb2YgdGhlIGN1cnJlbnQgbGlzdCBjaGls
ZC4KKworICAgICAgICBhZGphY2VudEVuY2xvc2luZ0xpc3QgaXMgYWxzbyBtb2RpZmllZCB0byBm
aXggYSBzaW1pbGFyIHByb2JsZW0uCisKKyAgICAgICAgQWxzbyBmaXhlZCB0aGUgY2hlY2sgZm9y
IGF2b2lkaW5nIExJIGluIGxpc3RpZnlQYXJhZ3JhcGggYmVjYXVzZSBpdCB3YXMgaW5jb3JyZWN0
bHkgY2hlY2tpbmcKKyAgICAgICAgdGhlIGV4aXN0ZW5jZSBvZiBsaXN0IGl0ZW0gaW4gdGhlIGFu
Y2VzdHJ5IGF0IHRoZSBpbnNlcnRpb24gcG9pbnQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9l
eGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0
bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jbG9zaW5nTGlzdENoaWxkKTogRW5zdXJlZCB0aGF0IHRoZSBlbmNsb3Npbmcg
bGlzdCBvZiB0aGUgcmV0dXJuaW5nIGxpc3QgY2hpbGQgaXMgbGlzdE5vZGUuCisgICAgICAgIChX
ZWJDb3JlOjphZGphY2VudEVuY2xvc2luZ0xpc3QpOiAKKyAgICAgICAgKFdlYkNvcmU6Okluc2Vy
dExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKToKKwogMjAxMC0wNy0yMiAgTU9SSVRBIEhh
amltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZh
ZmFpLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCShyZXZpc2lvbiA2
Mzk0MSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Myw4ICsxNTMsOCBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5
Rm9yU2luZ2xlCiBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUqIG5vZGUsIE5v
ZGUqIGxpc3ROb2RlKQogewogICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGls
ZChub2RlKTsKLSAgICBpZiAoZW5jbG9zaW5nTGlzdChsaXN0Q2hpbGQpICE9IGxpc3ROb2RlKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAobGlzdENoaWxkICYmIGVuY2xvc2luZ0xpc3Qo
bGlzdENoaWxkKSAhPSBsaXN0Tm9kZSkKKyAgICAgICAgbGlzdENoaWxkID0gZW5jbG9zaW5nTGlz
dENoaWxkKGxpc3RDaGlsZC0+cGFyZW50Tm9kZSgpKTsKICAgICByZXR1cm4gbGlzdENoaWxkOwog
fQogCkBAIC0yMjEsMTIgKzIyMSwxMCBAQCBzdGF0aWMgRWxlbWVudCogYWRqYWNlbnRFbmNsb3Np
bmdMaXN0KGNvCiAgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBO
b2RlKiBwcmV2aW91c0NlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwocG9zLmRlZXBFcXVpdmFsZW50
KCkpOwotICAgIE5vZGUqIGN1cnJlbnRDZWxsID0gZW5jbG9zaW5nVGFibGVDZWxsKGFkamFjZW50
UG9zLmRlZXBFcXVpdmFsZW50KCkpOwotCiAgICAgaWYgKCFsaXN0Tm9kZS0+aGFzVGFnTmFtZShs
aXN0VGFnKQogICAgICAgICB8fCBsaXN0Tm9kZS0+Y29udGFpbnMocG9zLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpKQotICAgICAgICB8fCBwcmV2aW91c0NlbGwgIT0gY3VycmVudENlbGwpCisgICAg
ICAgIHx8IGVuY2xvc2luZ1RhYmxlQ2VsbChhZGphY2VudFBvcy5kZWVwRXF1aXZhbGVudCgpKSAh
PSBlbmNsb3NpbmdUYWJsZUNlbGwocG9zLmRlZXBFcXVpdmFsZW50KCkpCisgICAgICAgIHx8IGVu
Y2xvc2luZ0xpc3QobGlzdE5vZGUpICE9IGVuY2xvc2luZ0xpc3QocG9zLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGlzdE5vZGU7CkBA
IC0yNzAsMTIgKzI2OCwxMiBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29t
bWFuCiAgICAgICAgIC8vIGlubGluZSBhbmNlc3RvcnMgb2Ygc3RhcnQsIHNpbmNlIGl0IGlzIGVh
c2llciBmb3IgZWRpdGluZyB0byBwcm9kdWNlIAogICAgICAgICAvLyBjbGVhbiBtYXJrdXAgd2hl
biBpbmxpbmUgZWxlbWVudHMgYXJlIHB1c2hlZCBkb3duIGFzIGZhciBhcyBwb3NzaWJsZS4KICAg
ICAgICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9zKHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkudXBzdHJl
YW0oKSk7Ci0gICAgICAgIC8vIEFsc28gYXZvaWQgdGhlIGNvbnRhaW5pbmcgbGlzdCBpdGVtLgot
ICAgICAgICBOb2RlKiBsaXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoaW5zZXJ0aW9uUG9z
Lm5vZGUoKSk7Ci0gICAgICAgIGlmIChsaXN0Q2hpbGQgJiYgbGlzdENoaWxkLT5oYXNUYWdOYW1l
KGxpVGFnKSkKLSAgICAgICAgICAgIGluc2VydGlvblBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZv
cmVOb2RlKGxpc3RDaGlsZCk7CiAKLSAgICAgICAgaW5zZXJ0Tm9kZUF0KGxpc3RFbGVtZW50LCBp
bnNlcnRpb25Qb3MpOworICAgICAgICBOb2RlKiBub2RlQXRJbnNlcnRpb25Qb3MgPSBpbnNlcnRp
b25Qb3Mubm9kZSgpOworICAgICAgICBpZiAobm9kZUF0SW5zZXJ0aW9uUG9zLT5oYXNUYWdOYW1l
KGxpVGFnKSAmJiBlbmNsb3NpbmdMaXN0KG5vZGVBdEluc2VydGlvblBvcykpCisgICAgICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKGxpc3RFbGVtZW50LCBub2RlQXRJbnNlcnRpb25Qb3MpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBpbnNlcnROb2RlQXQobGlzdEVsZW1lbnQsIGluc2VydGlv
blBvcyk7CiAKICAgICAgICAgLy8gV2UgaW5zZXJ0ZWQgdGhlIGxpc3QgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBjb250ZW50IHdlJ3JlIGFib3V0IHRvIG1vdmUKICAgICAgICAgLy8gVXBkYXRlIHRoZSBz
dGFydCBvZiBjb250ZW50LCBzbyB3ZSBkb24ndCB0cnkgdG8gbW92ZSB0aGUgbGlzdCBpbnRvIGl0
c2VsZi4gIGJ1ZyAxOTA2NgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjM5NDMpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNy0yMyAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6bW9k
aWZ5UmFuZ2UgaW5maW5pdGUgbG9vcCAoMTAwJSBDUFUgdXNhZ2UpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzY2OAorCisgICAgICAgIEFkZGVkIGEg
dGVzdCB0byBpbnNlcnQgb3JkZXJlZCBsaXN0IG9uIGEgbGlzdCB3aGVyZSBsaXN0IGNoaWxkcmVu
IGFyZSBhbiB1bm9yZGVyZWQgbGlzdCwKKyAgICAgICAgYW4gb3JwaGFuZWQgY2hpbGQsIGFuZCBh
biBvcmRlcmVkIGxpc3QgcmVzcGVjdGl2ZWx5LiBXZWJLaXQgc2hvdWxkIG5vdCBjcmFzaCBvbiB0
aGlzIHRlc3QuCisKKyAgICAgICAgVGhlIGJlaGF2aW9yIG9mIFdlYktpdCB3aGVuIGluc2VydGlu
ZyBvcmRlcmVkL3Vub3JkZXJlZCBsaXN0IG9uIGEgbGlzdCB3aXRoCisgICAgICAgIGFuIG9ycGhh
bmVkIG5lc3RlZCBsaXN0IGF0IHRoZSBlbmQgKDUyMDczNjkuaHRtbCkgaXMgdXBkYXRlZCB0byBy
ZXNlbWJsZSB0aGF0IG9mIE1TSUUgaW5zdGVhZCBvZiBGaXJlZm94LgorICAgICAgICBJdCBjdXJy
ZW50bHkgZG9lcyBub3Qgc3dpdGNoIHRoZSB0eXBlIG9mIHRoZSBvdXRlciBsaXN0IGxpa2UgTVNJ
RSBkb2VzLgorCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVk
LWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBl
ZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQt
bGlzdHMuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMjIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA2Mzk0MSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
NTIwNzM2OS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw2IEBAIE9uZQog
VHdvCiBUaHJlZQogRm91cgotPHVsPjxsaT5PbmU8L2xpPjxsaT5Ud288L2xpPjxsaT5UaHJlZTwv
bGk+PGxpPkZvdXI8L2xpPjwvdWw+Cis8dWw+PGxpPk9uZTwvbGk+PGxpPlR3bzwvbGk+PC91bD48
b2w+PHVsPjxsaT5UaHJlZTwvbGk+PGxpPkZvdXI8L2xpPjwvdWw+PC9vbD4KIAogUEFTUwpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1p
dGVtLXdpdGgtbmVzdGVkLWxpc3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1u
ZXN0ZWQtbGlzdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxp
c3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorVGhpcyB0ZXN0
cyBoYW5nIHdoZW4gbGlzdGlmeWluZyBuZXN0ZWQgbGlzdHMgd2l0aCBhbiBvcnBoYW5lZCBsaXN0
IGNoaWxkIGluIGJldHdlZW4gKHNlZSBidWcgMzM2NjgpLgorCis8RElWIGlkPSJ0ZXN0IiBjb250
ZW50RWRpdGFibGU9IiI+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPFVMPgorPE9MPgorPExJPgorPCN0
ZXh0PjxzZWxlY3Rpb24tYW5jaG9yPmhlbGxvPC8jdGV4dD4KKzwvTEk+Cis8L09MPgorPC9VTD4K
KzxPTD4KKzxMST4KKzwjdGV4dD53b3JsZDwvI3RleHQ+Cis8L0xJPgorPC9PTD4KKzxVTD4KKzxP
TD4KKzxMST4KKzwjdGV4dD5XZWJLaXQ8c2VsZWN0aW9uLWZvY3VzPjwvI3RleHQ+Cis8L0xJPgor
PC9PTD4KKzwvVUw+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPC9ESVY+CkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0
ZWQtbGlzdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21t
YW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qt
b3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1IEBACis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpz
Ij48L3NjcmlwdD4KKzxkaXYgaWQ9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT4KKyAgICA8dWw+PHVs
PjxsaT5oZWxsbzwvbGk+PC91bD53b3JsZDxvbD48bGk+V2ViS2l0PC9saT48L29sPjwvdWw+Cis8
L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gCisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworCit3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Rlc3QnKSkKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdJbnNlcnRPcmRlcmVk
TGlzdCcsIGZhbHNlLCBudWxsKTsKKworTWFya3VwLmRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIGhh
bmcgd2hlbiBsaXN0aWZ5aW5nIG5lc3RlZCBsaXN0cyB3aXRoIGFuIG9ycGhhbmVkIGxpc3QgY2hp
bGQgaW4gYmV0d2VlbiAoc2VlIGJ1ZyAzMzY2OCkuIikKK01hcmt1cC5zZXROb2RlVG9EdW1wKCd0
ZXN0JykKKzwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="50704"
          type_id="1"
          status="-"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62883</attachid>
            <date>2010-07-28 15:08:07 -0700</date>
            <delta_ts>2010-07-30 01:24:00 -0700</delta_ts>
            <desc>new attempt</desc>
            <filename>attempt33668-new</filename>
            <type>text/plain</type>
            <size>13516</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkocmV2aXNpb24gNjQxOTAp
CisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw2ICs4MCw3IEBACiAgICAgaWYgKHZpc2libGVFbmQgIT0gdmlzaWJsZVN0YXJ0ICYm
IGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKSkKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kLnByZXZpb3VzKHRy
dWUpKSk7CiAKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lIGxpc3RUYWcgPSAobV90eXBlID09IE9y
ZGVyZWRMaXN0KSA/IG9sVGFnIDogdWxUYWc7CiAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlz
UmFuZ2UoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlv
bkZvclBhcmFncmFwaEl0ZXJhdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAgIEFTU0VS
VChzZWxlY3Rpb24uaXNSYW5nZSgpKTsKQEAgLTg4LDEwICs4OSwyMCBAQAogICAgICAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRPZkxhc3RQYXJhZ3JhcGggPSBzdGFydE9mUGFyYWdyYXBoKGVuZE9m
U2VsZWN0aW9uKTsKIAogICAgICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaChzdGFydE9mU2VsZWN0
aW9uKSAhPSBzdGFydE9mTGFzdFBhcmFncmFwaCkgewotICAgICAgICAgICAgTm9kZSogc3RhcnRM
aXN0ID0gZW5jbG9zaW5nTGlzdChzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpKTsKLSAgICAgICAgICAgIE5vZGUqIGVuZExpc3QgPSBlbmNsb3NpbmdMaXN0KGVuZE9mU2Vs
ZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKLSAgICAgICAgICAgIGJvb2wgZm9yY2VD
cmVhdGVMaXN0ID0gIXN0YXJ0TGlzdCB8fCBzdGFydExpc3QgIT0gZW5kTGlzdDsKKyAgICAgICAg
ICAgIGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0gIWVuY2xvc2luZ0xpc3Qoc3RhcnRPZlNlbGVjdGlv
bi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7OwogCisgICAgICAgICAgICAvLyBGb3JjZSBjcmVh
dGUgaWYgYW55IG9mIHRoZSBwYXJhZ3JhcGggaW4gdGhlIHNlbGVjdGlvbiBpcyBub3QgZW5jbG9z
ZWQgYnkgdGhlIGxpc3QgdGFnCisgICAgICAgICAgICBpZiAoIWZvcmNlQ3JlYXRlTGlzdCkgewor
ICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9
IHN0YXJ0T2ZTZWxlY3Rpb247CisgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0T2ZDdXJyZW50
UGFyYWdyYXBoLmlzTm90TnVsbCgpICYmIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoICE9IHN0YXJ0
T2ZMYXN0UGFyYWdyYXBoKSB7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGxpc3ROb2Rl
ID0gZW5jbG9zaW5nTGlzdChzdGFydE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdE5vZGUgfHwgIWxpc3ROb2Rl
LT5oYXNUYWdOYW1lKGxpc3RUYWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VDcmVh
dGVMaXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3Jh
cGggPSBzdGFydE9mTmV4dFBhcmFncmFwaChzdGFydE9mQ3VycmVudFBhcmFncmFwaCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IGN1cnJlbnRTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAg
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydE9m
U2VsZWN0aW9uOwogICAgICAgICAgICAgd2hpbGUgKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoICE9
IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoKSB7CiAgICAgICAgICAgICAgICAgLy8gZG9BcHBseSgpIG1h
eSBvcGVyYXRlIG9uIGFuZCByZW1vdmUgdGhlIGxhc3QgcGFyYWdyYXBoIG9mIHRoZSBzZWxlY3Rp
b24gZnJvbSB0aGUgZG9jdW1lbnQgCkBAIC0xMDIsNyArMTEzLDcgQEAKICAgICAgICAgICAgICAg
ICBpZiAoIXN0YXJ0T2ZMYXN0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRv
Y3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgpOwotICAgICAgICAgICAg
ICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0KTsKKyAgICAgICAg
ICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRh
ZywgY3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBGZXRjaCB0
aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiBhZnRlciBtb3ZpbmcgdGhlIGZpcnN0IHBhcmFncmFw
aCwKICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG1vdmluZyB0aGUgcGFyYWdyYXBoIHdpbGwg
aW52YWxpZGF0ZSB0aGUgb3JpZ2luYWwgc3RhcnQuICAKQEAgLTExNCw3ICsxMjUsNyBAQAogICAg
ICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZk5leHRQYXJhZ3Jh
cGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZE9mU2VsZWN0aW9uKTsKLSAgICAgICAgICAg
IGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0KTsKKyAgICAgICAgICAg
IGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjdXJy
ZW50U2VsZWN0aW9uLmdldCgpKTsKICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBlbmQgb2YgdGhl
IHNlbGVjdGlvbiwgZm9yIHRoZSByZWFzb24gbWVudGlvbmVkIGFib3ZlLgogICAgICAgICAgICAg
ZW5kT2ZTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CiAgICAgICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9u
LCBlbmRPZlNlbGVjdGlvbikpOwpAQCAtMTIyLDE2ICsxMzMsMTYgQEAKICAgICAgICAgfQogICAg
IH0KIAotICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZmFsc2UpOworICAgIFJlZlB0cjxS
YW5nZT4gY3VycmVudFNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
KyAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNlLCBsaXN0VGFnLCBjdXJyZW50U2Vs
ZWN0aW9uLmdldCgpKTsKIH0KIAotdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNp
bmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCkKK3ZvaWQgSW5zZXJ0TGlzdENvbW1h
bmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcsIFJhbmdlKiBjdXJyZW50U2VsZWN0aW9uKQogewogICAg
IC8vIEZJWE1FOiBUaGlzIHdpbGwgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgZm9yIGEgc2Vs
ZWN0aW9uIHRoYXQgc3RhcnRzIGp1c3QgYmVmb3JlIGEKICAgICAvLyB0YWJsZSBhbmQgZW5kcyBp
bnNpZGUgdGhlIGZpcnN0IGNlbGwsIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbiBzaG91
bGQgcHJvYmFibHkKICAgICAvLyBiZSByZW5hbWVkIGFuZCBkZXBsb3llZCBpbnNpZGUgc2V0RW5k
aW5nU2VsZWN0aW9uKCkuCiAgICAgTm9kZSogc2VsZWN0aW9uTm9kZSA9IGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCkubm9kZSgpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUgbGlzdFRhZyA9ICht
X3R5cGUgPT0gT3JkZXJlZExpc3QpID8gb2xUYWcgOiB1bFRhZzsKICAgICBOb2RlKiBsaXN0Q2hp
bGROb2RlID0gZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlvbk5vZGUpOwogICAgIGJvb2wgc3dp
dGNoTGlzdFR5cGUgPSBmYWxzZTsKICAgICBpZiAobGlzdENoaWxkTm9kZSkgewpAQCAtMTQzLDYg
KzE1NCwyNCBAQAogICAgICAgICAgICAgLy8gbGlzdENoaWxkTm9kZSB3aWxsIGJlIHJlbW92ZWQg
ZnJvbSB0aGUgbGlzdCBhbmQgYSBsaXN0IG9mIHR5cGUgbV90eXBlIHdpbGwgYmUgY3JlYXRlZC4K
ICAgICAgICAgICAgIHN3aXRjaExpc3RUeXBlID0gdHJ1ZTsKIAorICAgICAgICBpZiAoIXN3aXRj
aExpc3RUeXBlICYmIGZvcmNlQ3JlYXRlTGlzdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBJZiB0aGUgZW50aXJlIGxpc3QgaXMgc2VsZWN0ZWQsIHRoZW4gY29udmVydCB0aGUg
d2hvbGUgbGlzdC4KKyAgICAgICAgaWYgKHN3aXRjaExpc3RUeXBlICYmIGxpc3ROb2RlICYmIGlz
Tm9kZVZpc2libHlDb250YWluZWRXaXRoaW4obGlzdE5vZGUsIGN1cnJlbnRTZWxlY3Rpb24pKSB7
CisgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RFbGVtZW50ID0gY3JlYXRlSFRN
TEVsZW1lbnQoZG9jdW1lbnQoKSwgbGlzdFRhZyk7CisgICAgICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKGxpc3RFbGVtZW50LCBsaXN0Tm9kZSk7CisgICAgICAgICAgICBOb2RlKiBvdXRlckJsb2Nr
ID0gbGlzdENoaWxkTm9kZS0+aXNCbG9ja0Zsb3coKSA/IGxpc3RDaGlsZE5vZGUgOiBsaXN0Tm9k
ZTsKKyAgICAgICAgICAgIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzKGZpcnN0UG9zaXRpb25Jbk5v
ZGUobGlzdE5vZGUpLCBsYXN0UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUpLCBsaXN0RWxlbWVudC5n
ZXQoKSwgb3V0ZXJCbG9jayk7CisgICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0xpc3QgPSBs
aXN0RWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOworICAgICAgICAgICAgRWxlbWVu
dCogbmV4dExpc3QgPSBsaXN0RWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CisgICAgICAg
ICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91c0xpc3QsIGxpc3RFbGVtZW50LmdldCgpKSkK
KyAgICAgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlzdCwgbGlz
dEVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGNhbk1lcmdlTGlzdHMobGlzdEVsZW1l
bnQuZ2V0KCksIG5leHRMaXN0KSkKKyAgICAgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1l
bnRzKGxpc3RFbGVtZW50LmdldCgpLCBuZXh0TGlzdCk7CisgICAgICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobGlzdEVsZW1lbnQu
Z2V0KCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgdW5saXN0
aWZ5UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBsaXN0Tm9kZSwg
bGlzdENoaWxkTm9kZSk7CiAgICAgfQogCkBAIC0xNTMsOCArMTgyLDggQEAKIHN0YXRpYyBOb2Rl
KiBlbmNsb3NpbmdMaXN0Q2hpbGQoTm9kZSogbm9kZSwgTm9kZSogbGlzdE5vZGUpCiB7CiAgICAg
Tm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKG5vZGUpOwotICAgIGlmIChlbmNs
b3NpbmdMaXN0KGxpc3RDaGlsZCkgIT0gbGlzdE5vZGUpCi0gICAgICAgIHJldHVybiAwOworICAg
IHdoaWxlIChsaXN0Q2hpbGQgJiYgZW5jbG9zaW5nTGlzdChsaXN0Q2hpbGQpICE9IGxpc3ROb2Rl
KQorICAgICAgICBsaXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQobGlzdENoaWxkLT5wYXJl
bnROb2RlKCkpOwogICAgIHJldHVybiBsaXN0Q2hpbGQ7CiB9CiAKQEAgLTIyMSwxMiArMjUwLDEw
IEBACiAgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBOb2RlKiBw
cmV2aW91c0NlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwocG9zLmRlZXBFcXVpdmFsZW50KCkpOwot
ICAgIE5vZGUqIGN1cnJlbnRDZWxsID0gZW5jbG9zaW5nVGFibGVDZWxsKGFkamFjZW50UG9zLmRl
ZXBFcXVpdmFsZW50KCkpOwotCiAgICAgaWYgKCFsaXN0Tm9kZS0+aGFzVGFnTmFtZShsaXN0VGFn
KQogICAgICAgICB8fCBsaXN0Tm9kZS0+Y29udGFpbnMocG9zLmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpKQotICAgICAgICB8fCBwcmV2aW91c0NlbGwgIT0gY3VycmVudENlbGwpCisgICAgICAgIHx8
IGVuY2xvc2luZ1RhYmxlQ2VsbChhZGphY2VudFBvcy5kZWVwRXF1aXZhbGVudCgpKSAhPSBlbmNs
b3NpbmdUYWJsZUNlbGwocG9zLmRlZXBFcXVpdmFsZW50KCkpCisgICAgICAgIHx8IGVuY2xvc2lu
Z0xpc3QobGlzdE5vZGUpICE9IGVuY2xvc2luZ0xpc3QocG9zLmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGlzdE5vZGU7CkBAIC0yNzAs
MTIgKzI5NywxMiBAQAogICAgICAgICAvLyBpbmxpbmUgYW5jZXN0b3JzIG9mIHN0YXJ0LCBzaW5j
ZSBpdCBpcyBlYXNpZXIgZm9yIGVkaXRpbmcgdG8gcHJvZHVjZSAKICAgICAgICAgLy8gY2xlYW4g
bWFya3VwIHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBwdXNoZWQgZG93biBhcyBmYXIgYXMgcG9z
c2libGUuCiAgICAgICAgIFBvc2l0aW9uIGluc2VydGlvblBvcyhzdGFydC5kZWVwRXF1aXZhbGVu
dCgpLnVwc3RyZWFtKCkpOwotICAgICAgICAvLyBBbHNvIGF2b2lkIHRoZSBjb250YWluaW5nIGxp
c3QgaXRlbS4KLSAgICAgICAgTm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGlu
c2VydGlvblBvcy5ub2RlKCkpOwotICAgICAgICBpZiAobGlzdENoaWxkICYmIGxpc3RDaGlsZC0+
aGFzVGFnTmFtZShsaVRhZykpCi0gICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBwb3NpdGlvbklu
UGFyZW50QmVmb3JlTm9kZShsaXN0Q2hpbGQpOwogCi0gICAgICAgIGluc2VydE5vZGVBdChsaXN0
RWxlbWVudCwgaW5zZXJ0aW9uUG9zKTsKKyAgICAgICAgTm9kZSogbm9kZUF0SW5zZXJ0aW9uUG9z
ID0gaW5zZXJ0aW9uUG9zLm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGVBdEluc2VydGlvblBvcy0+
aGFzVGFnTmFtZShsaVRhZykgJiYgZW5jbG9zaW5nTGlzdChub2RlQXRJbnNlcnRpb25Qb3MpKQor
ICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShsaXN0RWxlbWVudCwgbm9kZUF0SW5zZXJ0aW9u
UG9zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGxpc3RFbGVtZW50
LCBpbnNlcnRpb25Qb3MpOwogCiAgICAgICAgIC8vIFdlIGluc2VydGVkIHRoZSBsaXN0IGF0IHRo
ZSBzdGFydCBvZiB0aGUgY29udGVudCB3ZSdyZSBhYm91dCB0byBtb3ZlCiAgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgc3RhcnQgb2YgY29udGVudCwgc28gd2UgZG9uJ3QgdHJ5IHRvIG1vdmUgdGhlIGxp
c3QgaW50byBpdHNlbGYuICBidWcgMTkwNjYKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aXN0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5oCShyZXZpc2lvbiA2NDE5MCkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBACiAKICAgICBIVE1MRWxlbWVu
dCogZml4T3JwaGFuZWRMaXN0Q2hpbGQoTm9kZSopOwogICAgIGJvb2wgbW9kaWZ5UmFuZ2UoKTsK
LSAgICB2b2lkIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3Qp
OworICAgIHZvaWQgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlz
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlzdFRhZywgUmFuZ2UqIGN1cnJlbnRTZWxlY3Rpb24p
OwogICAgIHZvaWQgdW5saXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3Jp
Z2luYWxTdGFydCwgSFRNTEVsZW1lbnQqIGxpc3ROb2RlLCBOb2RlKiBsaXN0Q2hpbGROb2RlKTsK
ICAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlzdFRhZyk7
CiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX2xpc3RFbGVtZW50OwpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0MTkw
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAor
MjAxMC0wNy0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJDb3JlOjpJbnNlcnRMaXN0
Q29tbWFuZDo6bW9kaWZ5UmFuZ2UgaW5maW5pdGUgbG9vcCAoMTAwJSBDUFUgdXNhZ2UpCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzY2OAorCisgICAg
ICAgIFRoZSBidWcgd2FzIGNhdXNlZCBieSBlbmNsb3NpbmdMaXN0Q2hpbGQgcmV0dXJuaW5nIGEg
bGlzdCBjaGlsZCB3aG9zZSBlbmNsb3NpbmcgbGlzdCBpcworICAgICAgICBhIHNpYmxpbmcgb2Yg
dGhlIGN1cnJlbnQgbGlzdCBjaGlsZC4gRml4ZWQgZW5jbG9zaW5nTGlzdENoaWxkIHRvIHRyYXZl
cnNlIHVwd2FyZHMKKyAgICAgICAgaW4gdGhlIERPTSB0byBmaW5kIHRoZSBsaXN0IGNoaWxkIHdo
aWNoIGlzIGEgc2libGluZyBvZiB0aGUgY3VycmVudCBsaXN0IGNoaWxkLgorCisgICAgICAgIGFk
amFjZW50RW5jbG9zaW5nTGlzdCBpcyBhbHNvIG1vZGlmaWVkIHRvIGZpeCBhIHNpbWlsYXIgcHJv
YmxlbS4KKworICAgICAgICBBbHNvIGZpeGVkIHRoZSBjaGVjayBmb3IgYXZvaWRpbmcgTEkgaW4g
bGlzdGlmeVBhcmFncmFwaCBiZWNhdXNlIGl0IHdhcyBpbmNvcnJlY3RseSBjaGVja2luZworICAg
ICAgICB0aGUgZXhpc3RlbmNlIG9mIGxpc3QgaXRlbSBpbiB0aGUgYW5jZXN0cnkgYXQgdGhlIGlu
c2VydGlvbiBwb2ludC4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luc2Vy
dC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMuaHRtbAorCisgICAgICAgICog
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdMaXN0Q2hpbGQpOiBFbnN1cmVkIHRoYXQgdGhlIGVuY2xvc2luZyBsaXN0IG9mIHRoZSByZXR1
cm5pbmcgbGlzdCBjaGlsZCBpcyBsaXN0Tm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OmFkamFjZW50
RW5jbG9zaW5nTGlzdCk6IAorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Omxp
c3RpZnlQYXJhZ3JhcGgpOgorCiAyMDEwLTA3LTI3ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdp
dGgtbmVzdGVkLWxpc3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQt
bGlzdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorVGhpcyB0ZXN0cyBoYW5n
IHdoZW4gbGlzdGlmeWluZyBuZXN0ZWQgbGlzdHMgd2l0aCBhbiBvcnBoYW5lZCBsaXN0IGNoaWxk
IGluIGJldHdlZW4gKHNlZSBidWcgMzM2NjgpLgorCis8RElWIGlkPSJ0ZXN0IiBjb250ZW50RWRp
dGFibGU9IiI+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPE9MPgorPFVMPgorPE9MPgorPExJPgorPCN0
ZXh0PjxzZWxlY3Rpb24tY2FyZXQ+aGVsbG88LyN0ZXh0PgorPC9MST4KKzwvT0w+Cis8I3RleHQ+
d29ybGQ8LyN0ZXh0PgorPE9MPgorPExJPgorPCN0ZXh0PldlYktpdDwvI3RleHQ+Cis8L0xJPgor
PC9PTD4KKzwvVUw+Cis8L09MPgorPCN0ZXh0PgorPC8jdGV4dD4KKzwvRElWPgpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA2NDE5MCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
NTIwNzM2OS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw2IEBACiBUd28K
IFRocmVlCiBGb3VyCi08dWw+PGxpPk9uZTwvbGk+PGxpPlR3bzwvbGk+PGxpPlRocmVlPC9saT48
bGk+Rm91cjwvbGk+PC91bD4KKzx1bD48bGk+T25lPC9saT48bGk+VHdvPC9saT48dWw+PGxpPlRo
cmVlPC9saT48bGk+Rm91cjwvbGk+PC91bD48L3VsPgogCiBQQVNTCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2NyZWF0ZS1saXN0LWZyb20tcmFuZ2Utc2VsZWN0aW9uLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2NyZWF0ZS1saXN0LWZyb20tcmFuZ2Utc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NjQxOTApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2NyZWF0ZS1saXN0LWZy
b20tcmFuZ2Utc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTYsNiAr
MTYsOCBAQAogPExJPgogPCN0ZXh0PmZvbzwvI3RleHQ+CiA8L0xJPgorPC9PTD4KKzxPTD4KIDxM
ST4KIDwjdGV4dD5iYXI8LyN0ZXh0PgogPC9MST4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0
LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1p
dGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAK
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0
PgorPGRpdiBpZD0idGVzdCIgY29udGVudGVkaXRhYmxlPgorICAgIDx1bD48dWw+PGxpPmhlbGxv
PC9saT48L3VsPndvcmxkPG9sPjxsaT5XZWJLaXQ8L2xpPjwvb2w+PC91bD4KKzwvZGl2PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiAKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3dpbmRv
dy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGVzdCcpKQorZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0luc2VydE9yZGVyZWRMaXN0JywgZmFs
c2UsIG51bGwpOworCitNYXJrdXAuZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgaGFuZyB3aGVuIGxp
c3RpZnlpbmcgbmVzdGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCBpbiBiZXR3
ZWVuIChzZWUgYnVnIDMzNjY4KS4iKQorTWFya3VwLnNldE5vZGVUb0R1bXAoJ3Rlc3QnKQorPC9z
Y3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDE5MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA3LTI4ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjptb2RpZnlSYW5nZSBp
bmZpbml0ZSBsb29wICgxMDAlIENQVSB1c2FnZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNjY4CisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGlu
c2VydCBvcmRlcmVkIGxpc3Qgb24gYSBsaXN0IHdoZXJlIGxpc3QgY2hpbGRyZW4gYXJlIGFuIHVu
b3JkZXJlZCBsaXN0LAorICAgICAgICBhbiBvcnBoYW5lZCBjaGlsZCwgYW5kIGFuIG9yZGVyZWQg
bGlzdCByZXNwZWN0aXZlbHkuIFdlYktpdCBzaG91bGQgbm90IGNyYXNoIG9uIHRoaXMgdGVzdC4K
KworICAgICAgICBUaGUgYmVoYXZpb3Igb2YgV2ViS2l0IHdoZW4gaW5zZXJ0aW5nIG9yZGVyZWQv
dW5vcmRlcmVkIGxpc3Qgb24gYSBsaXN0IHdpdGgKKyAgICAgICAgYW4gb3JwaGFuZWQgbmVzdGVk
IGxpc3QgYXQgdGhlIGVuZCAoNTIwNzM2OS5odG1sKSBpcyB1cGRhdGVkIHRvIHJlc2VtYmxlIHRo
YXQgb2YgTVNJRSBpbnN0ZWFkIG9mIEZpcmVmb3guCisgICAgICAgIEl0IGN1cnJlbnRseSBkb2Vz
IG5vdCBzd2l0Y2ggdGhlIHR5cGUgb2YgdGhlIG91dGVyIGxpc3QgbGlrZSBNU0lFIGRvZXMuCisK
KyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRo
LW5lc3RlZC1saXN0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhl
Y0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy5odG1s
OiBBZGRlZC4KKwogMjAxMC0wNy0yNyAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZDsgcmVtb3ZlIHBsYXRmb3JtLXNwZWNpZmljIGV4cGVjdGVkIHJl
c3VsdHMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63036</attachid>
            <date>2010-07-30 01:24:00 -0700</date>
            <delta_ts>2010-08-04 10:24:27 -0700</delta_ts>
            <desc>new approach</desc>
            <filename>fix33668d</filename>
            <type>text/plain</type>
            <size>8566</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDM0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
Q29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1vZGlmeVJhbmdlIGluZmluaXRlIGxvb3AgKDEwMCUg
Q1BVIHVzYWdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzM2NjgKKworICAgICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkgZW5jbG9zaW5nTGlzdENo
aWxkIHJldHVybmluZyBhIGxpc3QgY2hpbGQgd2hvc2UgZW5jbG9zaW5nIGxpc3QgaXMKKyAgICAg
ICAgYSBzaWJsaW5nIG9mIHRoZSBjdXJyZW50IGxpc3QgY2hpbGQuIEZpeGVkIGVuY2xvc2luZ0xp
c3RDaGlsZCB0byB0cmF2ZXJzZSB1cHdhcmRzCisgICAgICAgIGluIHRoZSBET00gdG8gZmluZCB0
aGUgbGlzdCBjaGlsZCB3aGljaCBpcyBhIHNpYmxpbmcgb2YgdGhlIGN1cnJlbnQgbGlzdCBjaGls
ZC4KKyAgICAgICAgQWxzbyBmaXhlZCBhZGphY2VudEVuY2xvc2luZ0xpc3QgdG8gb25seSByZXR1
cm5zIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZSBvdXRlciBsaXN0LgorCisgICAg
ICAgIEluIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgsIGlmIHRoZSBzdGFydCBvciB0aGUgZW5k
IG9mIGN1cnJlbnRTZWxlY3Rpb24gZXhpc3RlZCBpbnNpZGUgYSBsaXN0IGNvbnRlbnQKKyAgICAg
ICAgbW92ZWQgYnkgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMsIGVpdGhlciBlbmQgY291bGQgcG9p
bnQgdG8gYSB3cm9uZyBwb3NpdGlvbiBhZnRlciB0aGUgbW92ZS4KKyAgICAgICAgRml4ZWQgdGhp
cyBwcm9ibGVtIGJ5IGNoZWNraW5nIHRoaXMgY29uZGl0aW9uIHVwZnJvbnQgYW5kIHJlc3Rvcmlu
ZyBsYXRlci4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0
LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMuaHRtbAorCisgICAgICAgICogZWRpdGlu
Zy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdMaXN0
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6YWRqYWNlbnRFbmNsb3NpbmdMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBo
KToKKwogMjAxMC0wNy0zMCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQGluZi51LXN6ZWdlZC5odT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MzM5KQorKysgV2ViQ29yZS9l
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CitzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUqIG5vZGUsIE5vZGUqIGxpc3RO
b2RlKQoreworICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChub2RlKTsK
KyAgICB3aGlsZSAobGlzdENoaWxkICYmIGVuY2xvc2luZ0xpc3QobGlzdENoaWxkKSAhPSBsaXN0
Tm9kZSkKKyAgICAgICAgbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGxpc3RDaGlsZC0+
cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gbGlzdENoaWxkOworfQorCiBQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6aW5zZXJ0TGlzdChEb2N1bWVudCogZG9jdW1l
bnQsIFR5cGUgdHlwZSkKIHsKICAgICBSZWZQdHI8SW5zZXJ0TGlzdENvbW1hbmQ+IGluc2VydENv
bW1hbmQgPSBjcmVhdGUoZG9jdW1lbnQsIHR5cGUpOwpAQCAtMTg2LDExICsxOTQsMjQgQEAgdm9p
ZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZQogCiAgICAgICAgIC8vIElmIHRo
ZSBlbnRpcmUgbGlzdCBpcyBzZWxlY3RlZCwgdGhlbiBjb252ZXJ0IHRoZSB3aG9sZSBsaXN0Lgog
ICAgICAgICBpZiAoc3dpdGNoTGlzdFR5cGUgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bihsaXN0Tm9kZS5nZXQoKSwgY3VycmVudFNlbGVjdGlvbikpIHsKKyAgICAgICAgICAgIGJvb2wg
cmFuZ2VTdGFydElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShsaXN0Tm9kZS5n
ZXQoKSkgPT0gY3VycmVudFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOworICAgICAgICAgICAg
Ym9vbCByYW5nZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGxpc3ROb2Rl
LmdldCgpKSA9PSBjdXJyZW50U2VsZWN0aW9uLT5lbmRQb3NpdGlvbigpOworCiAgICAgICAgICAg
ICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG5ld0xpc3QgPSBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVu
dCgpLCBsaXN0VGFnKTsKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobmV3TGlzdCwgbGlz
dE5vZGUpOwotICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9jayA9IGxpc3RDaGlsZE5vZGUtPmlz
QmxvY2tGbG93KCkgPyBsaXN0Q2hpbGROb2RlIDogbGlzdE5vZGUuZ2V0KCk7CisgICAgICAgICAg
ICBOb2RlKiBmaXJzdENoaWxkSW5MaXN0ID0gZW5jbG9zaW5nTGlzdENoaWxkKFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihsaXN0Tm9kZSwgMCkpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLCBsaXN0
Tm9kZS5nZXQoKSk7CisgICAgICAgICAgICBOb2RlKiBvdXRlckJsb2NrID0gZmlyc3RDaGlsZElu
TGlzdC0+aXNCbG9ja0Zsb3coKSA/IGZpcnN0Q2hpbGRJbkxpc3QgOiBsaXN0Tm9kZS5nZXQoKTsK
ICAgICAgICAgICAgIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzKGZpcnN0UG9zaXRpb25Jbk5vZGUo
bGlzdE5vZGUuZ2V0KCkpLCBsYXN0UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpLCBuZXdM
aXN0LmdldCgpLCBvdXRlckJsb2NrKTsKICAgICAgICAgICAgIG5ld0xpc3QgPSBtZXJnZVdpdGhO
ZWlnaGJvcmluZ0xpc3RzKG5ld0xpc3QpOworCisgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBz
dGFydCBhbmQgdGhlIGVuZCBvZiBjdXJyZW50IHNlbGVjdGlvbiBpZiB0aGV5IHN0YXJ0ZWQgaW5z
aWRlIGxpc3ROb2RlCisgICAgICAgICAgICAvLyBiZWNhdXNlIG1vdmVQYXJhZ3JhcGhXaXRoQ2xv
bmVzIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGVtLgorICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgICAgICAgICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3QpCisg
ICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQobmV3TGlzdC0+cGFyZW50
Tm9kZSgpLCBuZXdMaXN0LT5ub2RlSW5kZXgoKSwgZWMpOworICAgICAgICAgICAgaWYgKHJhbmdl
RW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKKyAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9u
LT5zZXRFbmQobmV3TGlzdC0+cGFyZW50Tm9kZSgpLCBuZXdMaXN0LT5ub2RlSW5kZXgoKSsxLCBl
Yyk7CisKICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oZmly
c3RQb3NpdGlvbkluTm9kZShuZXdMaXN0LmdldCgpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0yMDIsMTQgKzIyMyw2IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRv
QXBwbHlGb3JTaW5nbGUKICAgICAgICAgbV9saXN0RWxlbWVudCA9IGxpc3RpZnlQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIGxpc3RUYWcpOwogfQogCi1zdGF0aWMg
Tm9kZSogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUqIG5vZGUsIE5vZGUqIGxpc3ROb2RlKQotewot
ICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChub2RlKTsKLSAgICBpZiAo
ZW5jbG9zaW5nTGlzdChsaXN0Q2hpbGQpICE9IGxpc3ROb2RlKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbGlzdENoaWxkOwotfQotCiB2b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxp
c3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0YXJ0LCBIVE1M
RWxlbWVudCogbGlzdE5vZGUsIE5vZGUqIGxpc3RDaGlsZE5vZGUpCiB7CiAgICAgTm9kZSogbmV4
dExpc3RDaGlsZDsKQEAgLTI3MywxMiArMjg2LDEwIEBAIHN0YXRpYyBFbGVtZW50KiBhZGphY2Vu
dEVuY2xvc2luZ0xpc3QoY28KICAgICBpZiAoIWxpc3ROb2RlKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIE5vZGUqIHByZXZpb3VzQ2VsbCA9IGVuY2xvc2luZ1RhYmxlQ2VsbChwb3MuZGVlcEVx
dWl2YWxlbnQoKSk7Ci0gICAgTm9kZSogY3VycmVudENlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwo
YWRqYWNlbnRQb3MuZGVlcEVxdWl2YWxlbnQoKSk7Ci0KICAgICBpZiAoIWxpc3ROb2RlLT5oYXNU
YWdOYW1lKGxpc3RUYWcpCiAgICAgICAgIHx8IGxpc3ROb2RlLT5jb250YWlucyhwb3MuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCkpCi0gICAgICAgIHx8IHByZXZpb3VzQ2VsbCAhPSBjdXJyZW50Q2Vs
bCkKKyAgICAgICAgfHwgZW5jbG9zaW5nVGFibGVDZWxsKGFkamFjZW50UG9zLmRlZXBFcXVpdmFs
ZW50KCkpICE9IGVuY2xvc2luZ1RhYmxlQ2VsbChwb3MuZGVlcEVxdWl2YWxlbnQoKSkKKyAgICAg
ICAgfHwgZW5jbG9zaW5nTGlzdChsaXN0Tm9kZSkgIT0gZW5jbG9zaW5nTGlzdChwb3MuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBsaXN0
Tm9kZTsKQEAgLTMyMiwxMiArMzMzLDExIEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2Vy
dExpc3RDb21tYW4KICAgICAgICAgLy8gaW5saW5lIGFuY2VzdG9ycyBvZiBzdGFydCwgc2luY2Ug
aXQgaXMgZWFzaWVyIGZvciBlZGl0aW5nIHRvIHByb2R1Y2UgCiAgICAgICAgIC8vIGNsZWFuIG1h
cmt1cCB3aGVuIGlubGluZSBlbGVtZW50cyBhcmUgcHVzaGVkIGRvd24gYXMgZmFyIGFzIHBvc3Np
YmxlLgogICAgICAgICBQb3NpdGlvbiBpbnNlcnRpb25Qb3Moc3RhcnQuZGVlcEVxdWl2YWxlbnQo
KS51cHN0cmVhbSgpKTsKLSAgICAgICAgLy8gQWxzbyBhdm9pZCB0aGUgY29udGFpbmluZyBsaXN0
IGl0ZW0uCi0gICAgICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChpbnNl
cnRpb25Qb3Mubm9kZSgpKTsKLSAgICAgICAgaWYgKGxpc3RDaGlsZCAmJiBsaXN0Q2hpbGQtPmhh
c1RhZ05hbWUobGlUYWcpKQotICAgICAgICAgICAgaW5zZXJ0aW9uUG9zID0gcG9zaXRpb25JblBh
cmVudEJlZm9yZU5vZGUobGlzdENoaWxkKTsKLQotICAgICAgICBpbnNlcnROb2RlQXQobGlzdEVs
ZW1lbnQsIGluc2VydGlvblBvcyk7CisgICAgICAgIE5vZGUqIG5vZGVBdEluc2VydGlvblBvcyA9
IGluc2VydGlvblBvcy5ub2RlKCk7CisgICAgICAgIGlmIChub2RlQXRJbnNlcnRpb25Qb3MtPmhh
c1RhZ05hbWUobGlUYWcpICYmIGVuY2xvc2luZ0xpc3Qobm9kZUF0SW5zZXJ0aW9uUG9zKSkKKyAg
ICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobGlzdEVsZW1lbnQsIG5vZGVBdEluc2VydGlvblBv
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc2VydE5vZGVBdChsaXN0RWxlbWVudCwg
aW5zZXJ0aW9uUG9zKTsKIAogICAgICAgICAvLyBXZSBpbnNlcnRlZCB0aGUgbGlzdCBhdCB0aGUg
c3RhcnQgb2YgdGhlIGNvbnRlbnQgd2UncmUgYWJvdXQgdG8gbW92ZQogICAgICAgICAvLyBVcGRh
dGUgdGhlIHN0YXJ0IG9mIGNvbnRlbnQsIHNvIHdlIGRvbid0IHRyeSB0byBtb3ZlIHRoZSBsaXN0
IGludG8gaXRzZWxmLiAgYnVnIDE5MDY2CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDM0MCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEw
LTA3LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkNvcmU6Okluc2VydExpc3RDb21t
YW5kOjptb2RpZnlSYW5nZSBpbmZpbml0ZSBsb29wICgxMDAlIENQVSB1c2FnZSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNjY4CisKKyAgICAgICAg
QWRkZWQgYSB0ZXN0IHRvIGNvbnZlcnQgbmVzdGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlz
dCBjaGlsZCB0byBhbiBvcmRlcmVkIG5lc3RlZCBsaXN0LgorCisgICAgICAgICogZWRpdGluZy9l
eGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQt
bGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWw6IEFkZGVkLgorCiAyMDEw
LTA3LTMwICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5z
ZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1RoaXMgdGVzdHMgaGFuZyB3aGVuIGxpc3RpZnlp
bmcgbmVzdGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCBpbiBiZXR3ZWVuIChz
ZWUgYnVnIDMzNjY4KS4KK3wgIgorICAgICIKK3wgPG9sPgorfCAgIDxvbD4KK3wgICAgIDxsaT4K
K3wgICAgICAgIjwjc2VsZWN0aW9uLWNhcmV0PmhlbGxvIgorfCAgICJ3b3JsZCIKK3wgICA8b2w+
Cit8ICAgICA8bGk+Cit8ICAgICAgICJXZWJLaXQiCit8ICIKKyIKSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3Rl
ZC1saXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1h
bmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3RlZC1saXN0cy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1v
cnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTUgQEAKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMi
Pjwvc2NyaXB0PgorPGRpdiBpZD0idGVzdCIgY29udGVudGVkaXRhYmxlPgorICAgIDx1bD48dWw+
PGxpPmhlbGxvPC9saT48L3VsPndvcmxkPG9sPjxsaT5XZWJLaXQ8L2xpPjwvb2w+PC91bD4KKzwv
ZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiAKKworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisKK3dpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdCcpKQorZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0luc2VydE9yZGVyZWRM
aXN0JywgZmFsc2UsIG51bGwpOworCitNYXJrdXAuZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgaGFu
ZyB3aGVuIGxpc3RpZnlpbmcgbmVzdGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGls
ZCBpbiBiZXR3ZWVuIChzZWUgYnVnIDMzNjY4KS4iKQorTWFya3VwLnNldE5vZGVUb0R1bXAoJ3Rl
c3QnKQorPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63104</attachid>
            <date>2010-07-30 14:54:43 -0700</date>
            <delta_ts>2010-08-24 12:47:49 -0700</delta_ts>
            <desc>fixed various problems.</desc>
            <filename>fix33668g</filename>
            <type>text/plain</type>
            <size>10503</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDM3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
Q29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1vZGlmeVJhbmdlIGluZmluaXRlIGxvb3AgKDEwMCUg
Q1BVIHVzYWdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzM2NjgKKworICAgICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkgZW5jbG9zaW5nTGlzdENo
aWxkIHJldHVybmluZyBhIGxpc3QgY2hpbGQgd2hvc2UgZW5jbG9zaW5nIGxpc3QgaXMKKyAgICAg
ICAgYSBzaWJsaW5nIG9mIHRoZSBjdXJyZW50IGxpc3QgY2hpbGQuIEZpeGVkIGVuY2xvc2luZ0xp
c3RDaGlsZCB0byB0cmF2ZXJzZSB1cHdhcmRzCisgICAgICAgIGluIHRoZSBET00gdG8gZmluZCB0
aGUgbGlzdCBjaGlsZCB3aGljaCBpcyBhIHNpYmxpbmcgb2YgdGhlIGN1cnJlbnQgbGlzdCBjaGls
ZC4KKyAgICAgICAgQWxzbyBmaXhlZCBhZGphY2VudEVuY2xvc2luZ0xpc3QgdG8gb25seSByZXR1
cm5zIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZSBvdXRlciBsaXN0LgorCisgICAg
ICAgIEluIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgsIGlmIHRoZSBzdGFydCBvciB0aGUgZW5k
IG9mIGN1cnJlbnRTZWxlY3Rpb24gZXhpc3RlZCBpbnNpZGUgYSBsaXN0IGNvbnRlbnQKKyAgICAg
ICAgbW92ZWQgYnkgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMsIGVpdGhlciBlbmQgY291bGQgcG9p
bnQgdG8gYSB3cm9uZyBwb3NpdGlvbiBhZnRlciB0aGUgbW92ZS4KKyAgICAgICAgRml4ZWQgdGhp
cyBwcm9ibGVtIGJ5IGNoZWNraW5nIHRoaXMgY29uZGl0aW9uIHVwZnJvbnQgYW5kIHJlc3Rvcmlu
ZyBsYXRlci4KKworICAgICAgICBJbiBkb0FwcGx5LCBpZiBtb3ZlUGFyYWdyYXBoIG9yIG1vdmVQ
YXJhZ3JhcGhXaXRoQ2xvbmVzLCBlbmRPZlNlbGVjdGlvbiBvciBzdGFydE9mTGFzdFBhcmFncmFw
aAorICAgICAgICBjb3VsZCBiZSBudWxsIG9yIG9ycGhhbmVkLCBmaXhlZCB0aGlzIHByb2JsZW0g
YnkgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24uCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9leGVj
Q29tbWFuZC9pbnNlcnQtbGlzdC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWwK
KworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZW5j
bG9zaW5nTGlzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpk
b0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmFkamFjZW50RW5j
bG9zaW5nTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlm
eVBhcmFncmFwaCk6CisKIDIwMTAtMDctMzAgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MzYyKQorKysgV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCitzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUqIG5vZGUsIE5vZGUqIGxp
c3ROb2RlKQoreworICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChub2Rl
KTsKKyAgICB3aGlsZSAobGlzdENoaWxkICYmIGVuY2xvc2luZ0xpc3QobGlzdENoaWxkKSAhPSBs
aXN0Tm9kZSkKKyAgICAgICAgbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGxpc3RDaGls
ZC0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gbGlzdENoaWxkOworfQorCiBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6aW5zZXJ0TGlzdChEb2N1bWVudCogZG9j
dW1lbnQsIFR5cGUgdHlwZSkKIHsKICAgICBSZWZQdHI8SW5zZXJ0TGlzdENvbW1hbmQ+IGluc2Vy
dENvbW1hbmQgPSBjcmVhdGUoZG9jdW1lbnQsIHR5cGUpOwpAQCAtMTM4LDcgKzE0NiwxNyBAQCB2
b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICBpZiAoIXN0
YXJ0T2ZMYXN0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgpOworCisgICAgICAgICAgICAgICAgLy8g
c2F2ZSBhbmQgcmVzdG9yZSBlbmRPZlNlbGVjdGlvbiBhbmQgc3RhcnRPZkxhc3RQYXJhZ3JhcGgg
d2hlbiBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAvLyBzaW5jZSBtb3ZlUGFyYWdyYXBoIGFu
ZCBtb3ZlUHJhZ3JhcGhXaXRoQ2xvbmVzIGNhbiByZW1vdmUgbm9kZXMuCisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdmVyeSBpbmVmZmljaWVudCBhbmQgZXhwZW5zaXZlIG9wZXJh
dGlvbi4KKyAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JFbmRPZlNlbGVjdGlvbiA9IGluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKGVuZE9mU2VsZWN0aW9uKTsKICAgICAgICAgICAgICAgICBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNl
bGVjdGlvbi5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGVuZE9mU2VsZWN0aW9uLmlzTnVs
bCgpIHx8IGVuZE9mU2VsZWN0aW9uLmlzT3JwaGFuKCkgfHwgc3RhcnRPZkxhc3RQYXJhZ3JhcGgu
aXNOdWxsKCkgfHwgc3RhcnRPZkxhc3RQYXJhZ3JhcGguaXNPcnBoYW4oKSkgeworICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGxhc3RTZWxlY3Rpb25SYW5nZSA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCksIGluZGV4Rm9yRW5kT2ZTZWxlY3Rpb24sIDAsIHRydWUpOworICAgICAgICAgICAgICAgICAg
ICBlbmRPZlNlbGVjdGlvbiA9IGxhc3RTZWxlY3Rpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgICAgICAgICBzdGFydE9mTGFzdFBhcmFncmFwaCA9IHN0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kT2ZTZWxlY3Rpb24pOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IC8vIEZldGNoIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGFmdGVyIG1vdmluZyB0aGUgZmly
c3QgcGFyYWdyYXBoLAogICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgbW92aW5nIHRoZSBwYXJh
Z3JhcGggd2lsbCBpbnZhbGlkYXRlIHRoZSBvcmlnaW5hbCBzdGFydC4gIApAQCAtMTg2LDEyICsy
MDQsMzQgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZQogCiAgICAg
ICAgIC8vIElmIHRoZSBlbnRpcmUgbGlzdCBpcyBzZWxlY3RlZCwgdGhlbiBjb252ZXJ0IHRoZSB3
aG9sZSBsaXN0LgogICAgICAgICBpZiAoc3dpdGNoTGlzdFR5cGUgJiYgaXNOb2RlVmlzaWJseUNv
bnRhaW5lZFdpdGhpbihsaXN0Tm9kZS5nZXQoKSwgY3VycmVudFNlbGVjdGlvbikpIHsKKyAgICAg
ICAgICAgIGJvb2wgcmFuZ2VTdGFydElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZShsaXN0Tm9kZS5nZXQoKSkgPT0gY3VycmVudFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgYm9vbCByYW5nZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJO
b2RlKGxpc3ROb2RlLmdldCgpKSA9PSBjdXJyZW50U2VsZWN0aW9uLT5lbmRQb3NpdGlvbigpOwor
CiAgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG5ld0xpc3QgPSBjcmVhdGVIVE1MRWxl
bWVudChkb2N1bWVudCgpLCBsaXN0VGFnKTsKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUo
bmV3TGlzdCwgbGlzdE5vZGUpOwotICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9jayA9IGxpc3RD
aGlsZE5vZGUtPmlzQmxvY2tGbG93KCkgPyBsaXN0Q2hpbGROb2RlIDogbGlzdE5vZGUuZ2V0KCk7
CisKKyAgICAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGRJbkxpc3QgPSBlbmNsb3NpbmdMaXN0Q2hp
bGQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGxpc3ROb2RlLCAwKSkuZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCksIGxpc3ROb2RlLmdldCgpKTsKKyAgICAgICAgICAgIE5vZGUqIG91dGVyQmxvY2sg
PSBmaXJzdENoaWxkSW5MaXN0LT5pc0Jsb2NrRmxvdygpID8gZmlyc3RDaGlsZEluTGlzdCA6IGxp
c3ROb2RlLmdldCgpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBtb3ZlUGFyYWdyYXBoV2l0
aENsb25lcyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgpKSwgbGFzdFBvc2l0aW9u
SW5Ob2RlKGxpc3ROb2RlLmdldCgpKSwgbmV3TGlzdC5nZXQoKSwgb3V0ZXJCbG9jayk7CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyAoZGVsZXRlU2VsZWN0
aW9uKSBkb2VzIG5vdCByZW1vdmUgdGhlIG9sZCBsaXN0IHByb3Blcmx5CisgICAgICAgICAgICAv
LyBTZWUgYnVnIDMzNjY4IGFuZCB0aGUgdGVzdCBlZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1s
aXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMuaHRtbAorICAgICAgICAgICAgaWYg
KGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgcmVt
b3ZlTm9kZShsaXN0Tm9kZSk7CisKICAgICAgICAgICAgIG5ld0xpc3QgPSBtZXJnZVdpdGhOZWln
aGJvcmluZ0xpc3RzKG5ld0xpc3QpOworCisgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBzdGFy
dCBhbmQgdGhlIGVuZCBvZiBjdXJyZW50IHNlbGVjdGlvbiBpZiB0aGV5IHN0YXJ0ZWQgaW5zaWRl
IGxpc3ROb2RlCisgICAgICAgICAgICAvLyBiZWNhdXNlIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVz
IGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGVtLgorICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsK
KyAgICAgICAgICAgIGlmIChyYW5nZVN0YXJ0SXNJbkxpc3QgJiYgbmV3TGlzdCkKKyAgICAgICAg
ICAgICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRTdGFydChuZXdMaXN0LCAwLCBlYyk7CisgICAg
ICAgICAgICBpZiAocmFuZ2VFbmRJc0luTGlzdCAmJiBuZXdMaXN0KQorICAgICAgICAgICAgICAg
IGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZChuZXdMaXN0LCBsYXN0T2Zmc2V0SW5Ob2RlKG5ld0xp
c3QuZ2V0KCkpLCBlYyk7CisKICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxl
UG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShuZXdMaXN0LmdldCgpKSkpOworCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDIsMTQgKzI0Miw2IEBAIHZv
aWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGUKICAgICAgICAgbV9saXN0RWxl
bWVudCA9IGxpc3RpZnlQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCks
IGxpc3RUYWcpOwogfQogCi1zdGF0aWMgTm9kZSogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUqIG5v
ZGUsIE5vZGUqIGxpc3ROb2RlKQotewotICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xp
c3RDaGlsZChub2RlKTsKLSAgICBpZiAoZW5jbG9zaW5nTGlzdChsaXN0Q2hpbGQpICE9IGxpc3RO
b2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGlzdENoaWxkOwotfQotCiB2b2lk
IEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBvcmlnaW5hbFN0YXJ0LCBIVE1MRWxlbWVudCogbGlzdE5vZGUsIE5vZGUqIGxpc3RDaGls
ZE5vZGUpCiB7CiAgICAgTm9kZSogbmV4dExpc3RDaGlsZDsKQEAgLTI3OCw3ICszMTAsOCBAQCBz
dGF0aWMgRWxlbWVudCogYWRqYWNlbnRFbmNsb3NpbmdMaXN0KGNvCiAKICAgICBpZiAoIWxpc3RO
b2RlLT5oYXNUYWdOYW1lKGxpc3RUYWcpCiAgICAgICAgIHx8IGxpc3ROb2RlLT5jb250YWlucyhw
b3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpCi0gICAgICAgIHx8IHByZXZpb3VzQ2VsbCAhPSBj
dXJyZW50Q2VsbCkKKyAgICAgICAgfHwgcHJldmlvdXNDZWxsICE9IGN1cnJlbnRDZWxsCisgICAg
ICAgIHx8IGVuY2xvc2luZ0xpc3QobGlzdE5vZGUpICE9IGVuY2xvc2luZ0xpc3QocG9zLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGlz
dE5vZGU7CkBAIC0yODgsNiArMzIxLDkgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0
TGlzdENvbW1hbgogewogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZQYXJhZ3Jh
cGgob3JpZ2luYWxTdGFydCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdy
YXBoKHN0YXJ0KTsKKyAgICAKKyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENoZWNrIGZvciBhZGpvaW5pbmcgbGlzdHMu
CiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0SXRlbUVsZW1lbnQgPSBjcmVhdGVMaXN0SXRl
bUVsZW1lbnQoZG9jdW1lbnQoKSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDM3NikKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA3
LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5k
Ojptb2RpZnlSYW5nZSBpbmZpbml0ZSBsb29wICgxMDAlIENQVSB1c2FnZSkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNjY4CisKKyAgICAgICAgQWRk
ZWQgYSB0ZXN0IHRvIGNvbnZlcnQgbmVzdGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBj
aGlsZCB0byBhbiBvcmRlcmVkIG5lc3RlZCBsaXN0LgorICAgICAgICBTZWxlY3Rpb24gaW4gc3dp
dGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QuaHRtbCBpcyByZXN0b3JlZCBjb3JyZWN0bHkg
YWZ0ZXIgaW5zZXJ0aW5nIGxpc3QuCisKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2lu
c2VydC1saXN0LW9ycGhhbmVkLWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luc2VydC1saXN0LW9ycGhhbmVk
LWl0ZW0td2l0aC1uZXN0ZWQtbGlzdHMuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9l
eGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtaW5uZXItbGlzdC1leHBlY3RlZC50eHQ6
IFNlbGVjdGlvbiBpcyByZXN0b3JlZCBjb3JyZWN0bHkuCisKIDIwMTAtMDctMzAgIFNhdGlzaCBT
YW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZp
ZCBMZXZpbi4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxp
c3QtbmVzdGVkLXdpdGgtb3JwaGFuZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3QtbmVzdGVkLXdpdGgtb3JwaGFu
ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9pbnNlcnQtbGlzdC1uZXN0ZWQtd2l0aC1vcnBoYW5lZC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgdGVzdHMgaGFuZyB3aGVuIGxpc3RpZnlp
bmcgbmVzdGVkIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCBpbiBiZXR3ZWVuIChz
ZWUgYnVnIDMzNjY4KS4KK3wgIgorIgorfCA8b2w+Cit8ICAgPG9sPgorfCAgICAgPGxpPgorfCAg
ICAgICAiaGVsbG8iCit8ICAgIgorICAgIHdvcmxkCisgICAgIgorfCAgIDxvbD4KK3wgICAgIDxs
aT4KK3wgICAgICAgIldlYktpdCIKK3wgICAgIDxsaT4KK3wgICAgICAgInJvY2tzIgorfCAgICAg
IgorICAgICAgICAiCit8ICAgICA8b2w+Cit8ICAgICAgIDxsaT4KK3wgICAgICAgICAiPCNzZWxl
Y3Rpb24tY2FyZXQ+YmVjYXVzZSBvZiB5b3UiCit8ICAgIgorICAgICIKK3wgIgorIgpJbmRleDog
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlzdC1uZXN0ZWQtd2l0aC1v
cnBoYW5lZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1h
bmQvaW5zZXJ0LWxpc3QtbmVzdGVkLXdpdGgtb3JwaGFuZWQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3QtbmVzdGVkLXdpdGgt
b3JwaGFuZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJ0
ZXN0IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+CisgICAgPHVsPjxsaT5oZWxsbzwvbGk+PC91bD4K
KyAgICB3b3JsZAorICAgIDxvbD48bGk+V2ViS2l0PC9saT48L29sPgorICAgIDx1bD4KKyAgICAg
ICAgPGxpPnJvY2tzPC9saT4KKyAgICAgICAgPHVsPjxsaT5iZWNhdXNlIG9mIHlvdTwvbGk+PC91
bD4KKyAgICA8L3VsPgorPC91bD4KKzwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPiAKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3dpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RB
bGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpKQorZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ0luc2VydE9yZGVyZWRMaXN0JywgZmFsc2UsIG51bGwpOworCitNYXJrdXAuZGVz
Y3JpcHRpb24oIlRoaXMgdGVzdHMgaGFuZyB3aGVuIGxpc3RpZnlpbmcgbmVzdGVkIGxpc3RzIHdp
dGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCBpbiBiZXR3ZWVuIChzZWUgYnVnIDMzNjY4KS4iKQor
TWFya3VwLnNldE5vZGVUb0R1bXAoJ3Rlc3QnKQorPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0LWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NjQzNjIpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5
cGUtd2l0aC1pbm5lci1saXN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICsz
LDcgQEAgVGhpcyB0ZXN0cyBzd2l0Y2hpbmcgYW4gdW5vcmRlcmVkIGxpc3QgdwogIgogfCA8b2w+
CiB8ICAgPGxpPgotfCAgICAgIjwjc2VsZWN0aW9uLWNhcmV0PmhlbGxvIgorfCAgICAgIjwjc2Vs
ZWN0aW9uLWFuY2hvcj5oZWxsbyIKIHwgICAiCiAgICAgIgogfCAgIDxvbD4KQEAgLTE2LDYgKzE2
LDYgQEAgVGhpcyB0ZXN0cyBzd2l0Y2hpbmcgYW4gdW5vcmRlcmVkIGxpc3QgdwogfCAgICIKICAg
ICAiCiB8ICAgPGxpPgotfCAgICAgIndlYmtpdCIKK3wgICAgICJ3ZWJraXQ8I3NlbGVjdGlvbi1m
b2N1cz4iCiB8ICIKICIK
</data>
<flag name="review"
          id="51405"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>