<?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>24187</bug_id>
          
          <creation_ts>2009-02-26 00:43:11 -0800</creation_ts>
          <short_desc>RTL: tooltip does not get its directionality from its element&apos;s directionality</short_desc>
          <delta_ts>2009-07-23 00:15:52 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xiaomei Ji">xji</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>aharon</cc>
    
    <cc>darin</cc>
    
    <cc>mitz</cc>
    
    <cc>playmobil</cc>
    
    <cc>progame+wk</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>111138</commentid>
    <comment_count>0</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-02-26 00:43:11 -0800</bug_when>
    <thetext>1. Open the attached test file

2. Hover over the red span. 
the tooltip reads (visually) &quot;&amp;#1513;&amp;#1500;&amp;#1493;&amp;#1501;!&quot;. What expected is &quot;!&amp;#1513;&amp;#1500;&amp;#1493;&amp;#1501;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111139</commentid>
    <comment_count>1</comment_count>
      <attachid>28009</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-02-26 00:44:04 -0800</bug_when>
    <thetext>Created attachment 28009
tooltip directionality test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111140</commentid>
    <comment_count>2</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-02-26 00:44:55 -0800</bug_when>
    <thetext>Related Chrome bug:
http://code.google.com/p/chromium/issues/detail?id=5996

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111141</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-02-26 01:00:45 -0800</bug_when>
    <thetext>Note that the issue is not as severe in Mac OS X because AppKit uses the &quot;natural writing direction&quot; for help tags (so it actually behaves correctly with the attached test case).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123616</commentid>
    <comment_count>4</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-05-29 14:39:51 -0700</bug_when>
    <thetext>The following patch in HitTestResult::title() seems fixes the bug, but I am not sure whether this is the right place to fix it and whether this is the right fix.

Please advice.


Index: HitTestResult.cpp
===================================================================
--- HitTestResult.cpp   (revision 43938)
+++ HitTestResult.cpp   (working copy)
@@ -21,6 +21,7 @@
 #include &quot;config.h&quot;
 #include &quot;HitTestResult.h&quot;

+#include &quot;CharacterNames.h&quot;
 #include &quot;Frame.h&quot;
 #include &quot;FrameTree.h&quot;
 #include &quot;HTMLAnchorElement.h&quot;
@@ -180,8 +181,24 @@
     for (Node* titleNode = m_innerNode.get(); titleNode; titleNode = titleNode-
&gt;parentNode()) {
         if (titleNode-&gt;isElementNode()) {
             String title = static_cast&lt;Element*&gt;(titleNode)-&gt;title();
-            if (!title.isEmpty())
-                return title;
+            if (!title.isEmpty()) {
+                String displayTitle;
+                const RenderObject* renderer = titleNode-&gt;renderer();
+                if (!renderer)
+                    return title;
+                if (renderer-&gt;style()-&gt;direction() == LTR) {
+                    // This node is a LTR node.
+                    displayTitle.append(leftToRightEmbed);
+                    displayTitle.append(title);
+                    displayTitle.append(popDirectionalFormatting);
+                } else {
+                    // This node is an RTL node.
+                    displayTitle.append(rightToLeftEmbed);
+                    displayTitle.append(title);
+                    displayTitle.append(popDirectionalFormatting);
+                }
+                return displayTitle;
+            }
         }
     }
     return String();
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127643</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-23 10:14:03 -0700</bug_when>
    <thetext>What’s our usual approach for RTL text in other functions that return plain text? Do we use LTR/RTL override characters in other functions? Do we need a raw version of the title too, in addition to the “display” version of the title?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127645</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-06-23 10:30:58 -0700</bug_when>
    <thetext>I don’t think we handle directionality in any other API right now. I am concerned that in-band signaling using Unicode control characters may not work best for all clients. An alternative approach would be to retain the plain-text title API and add an API for returning the directionality. Clients could call that if needed and use whatever mechanism they want (e.g. if their text system supports attributes, use attributes instead of control characters).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127647</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-23 10:37:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I don’t think we handle directionality in any other API right now. I am
&gt; concerned that in-band signaling using Unicode control characters may not work
&gt; best for all clients. An alternative approach would be to retain the plain-text
&gt; title API and add an API for returning the directionality. Clients could call
&gt; that if needed and use whatever mechanism they want (e.g. if their text system
&gt; supports attributes, use attributes instead of control characters).

That approach sounds good to me. Where are the other APIs that currently return only text but should perhaps have a way to return the directionality too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127964</commentid>
    <comment_count>8</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-06-24 12:14:35 -0700</bug_when>
    <thetext>Thanks Mitz and Darin for your quick and helpful comments. I am fixing it as what Mitz suggested in comment #6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128225</commentid>
    <comment_count>9</comment_count>
      <attachid>31868</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-06-25 11:33:20 -0700</bug_when>
    <thetext>Created attachment 31868
patch w/o layout test

I do not know how to create a layout test for the patch.
Since the patch does not change any layout explicitly, the test should be testing HitTestResult::spellingToolTipDirection() and HitTestResult::titleDirection().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128229</commentid>
    <comment_count>10</comment_count>
      <attachid>31868</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-25 11:53:00 -0700</bug_when>
    <thetext>Comment on attachment 31868
patch w/o layout test

Looks like a step in the right &quot;direction&quot;. I see a few problems.

&gt; +    TextDirection toolTipDirection = LTR;
&gt;      // First priority is a potential toolTip representing a spelling or grammar error
&gt;      String toolTip = result.spellingToolTip();
&gt; +    toolTipDirection = result.spellingToolTipDirection();

There&apos;s no need to initialize toolTipDirection twice here. You should just define it where it&apos;s initialized instead of first setting it LTR two lines before.

&gt;                          toolTip = form-&gt;action();
&gt; +                        if (form-&gt;renderer())
&gt; +                            toolTipDirection = form-&gt;renderer()-&gt;style()-&gt;direction();

It seems strange to leave toolTipDirection set to result.spellingToolTipDirection() if there is a form with no renderer. I suggest setting toolTipDirection to LTR in that case, or not setting the toolTip at all in that case.

&gt; -        if (toolTip.isEmpty())
&gt; +        if (toolTip.isEmpty()) {
&gt;              // FIXME: Need to pass this URL through userVisibleString once that&apos;s in WebCore
&gt;              toolTip = result.absoluteLinkURL().string();
&gt; +            // URL always display as LTR, no need to reset toolTipDirectionality.
&gt; +        }

Comment is fine, but code is wrong. toolTipDirection will be result.spellingToolTipDirection(), not LTR.

&gt;                          toolTip = String::adopt(names);
&gt; +                        // FIXME: is filename always LTR?

Again, this leaves toolTipDirection set to result.spellingToolTipDirection(), not LTR.

&gt; +    return (m_innerNonSharedNode-&gt;renderer()) ?
&gt; +               (m_innerNonSharedNode-&gt;renderer()-&gt;style()-&gt;direction()) : LTR;

The formatting here is a little messy. We don&apos;t usually use extra parentheses like the ones here, nor do we indent the way you&apos;re indenting here. Maybe use an if statement instead of ? : and a local variable to more consistent with the other early exist in this function.

&gt; +TextDirection HitTestResult::titleDirection() const
&gt; +{
&gt; +    for (Node* titleNode = m_innerNode.get(); titleNode; titleNode = titleNode-&gt;parentNode()) {
&gt; +        if (titleNode-&gt;isElementNode()) {
&gt; +            String title = static_cast&lt;Element*&gt;(titleNode)-&gt;title();
&gt; +            if (!title.isEmpty())
&gt; +                return (titleNode-&gt;renderer()) ? (titleNode-&gt;renderer()-&gt;style()-&gt;direction()) : LTR;
&gt; +        }
&gt; +    }
&gt; +    return LTR;
&gt; +}

I don&apos;t like the fact that this function repeats the logic about finding title elements; it&apos;s really unclear to me that the first element with a non-empty title is the right one to return. Can this share code with HitTestResult::title in some way?

Also, the extra parentheses in the ? : line don&apos;t seem good. Maybe put the renderer into a local variable.

&gt; -void WebChromeClient::setToolTip(const String&amp; toolTip)
&gt; +void WebChromeClient::setToolTip(const String&amp; toolTip, WebCore::TextDirection dir)

You need to leave out the name for the TextDirection argument, because otherwise we&apos;ll get an unused parameter warning and so this will not compile.

Also, I don&apos;t think you need the WebCore:: prefix inside the file because it has using namespace WebCore at the top.

What about other platforms with setToolTip functions? Won&apos;t this break the build for those platforms? Please include fixes for that in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128230</commentid>
    <comment_count>11</comment_count>
      <attachid>31868</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-06-25 11:54:10 -0700</bug_when>
    <thetext>Comment on attachment 31868
patch w/o layout test

I am removing the review flag since this patch changes the signature of 
virtual void ChromeClient::setToolTip(const String&amp;, TextDirection) = 0,
which requires all client uses this method to change and recompile.

I will upload another patch to keep the signature the same and added another virtual API instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128247</commentid>
    <comment_count>12</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-06-25 13:13:59 -0700</bug_when>
    <thetext>Hi Darin,

Thanks a lot for your quick response!
Please see my comments inline.


(In reply to comment #10)
&gt; (From update of attachment 31868 [review])
&gt; Looks like a step in the right &quot;direction&quot;. I see a few problems.
&gt; 
&gt; &gt; +    TextDirection toolTipDirection = LTR;
&gt; &gt;      // First priority is a potential toolTip representing a spelling or grammar error
&gt; &gt;      String toolTip = result.spellingToolTip();
&gt; &gt; +    toolTipDirection = result.spellingToolTipDirection();
&gt; 
&gt; There&apos;s no need to initialize toolTipDirection twice here. You should just
&gt; define it where it&apos;s initialized instead of first setting it LTR two lines
&gt; before.

Yes, you are right.
I will remove the 1st assignment.

&gt; 
&gt; &gt;                          toolTip = form-&gt;action();
&gt; &gt; +                        if (form-&gt;renderer())
&gt; &gt; +                            toolTipDirection = form-&gt;renderer()-&gt;style()-&gt;direction();
&gt; 
&gt; It seems strange to leave toolTipDirection set to
&gt; result.spellingToolTipDirection() if there is a form with no renderer. I
&gt; suggest setting toolTipDirection to LTR in that case, or not setting the
&gt; toolTip at all in that case.

This is only called when toolTip.isEmpty() after result.spellingToolTipDirection(), in which case, the toolTipDirection should be set to LTR in result.spellingToolTipDirection(). But setting it explicitly as LTR is a good idea.

&gt; 
&gt; &gt; -        if (toolTip.isEmpty())
&gt; &gt; +        if (toolTip.isEmpty()) {
&gt; &gt;              // FIXME: Need to pass this URL through userVisibleString once that&apos;s in WebCore
&gt; &gt;              toolTip = result.absoluteLinkURL().string();
&gt; &gt; +            // URL always display as LTR, no need to reset toolTipDirectionality.
&gt; &gt; +        }
&gt; 
&gt; Comment is fine, but code is wrong. toolTipDirection will be
&gt; result.spellingToolTipDirection(), not LTR.

This is only called when the toolTip.isEmpty() after result.spellingToolTipDirection() and the &quot;form&quot;, in which case, I think the direction should be LTR. But I will set the direction explicitly as LTR.

&gt; 
&gt; &gt;                          toolTip = String::adopt(names);
&gt; &gt; +                        // FIXME: is filename always LTR?
&gt; 
&gt; Again, this leaves toolTipDirection set to result.spellingToolTipDirection(),
&gt; not LTR.

Same as above.

&gt; 
&gt; &gt; +    return (m_innerNonSharedNode-&gt;renderer()) ?
&gt; &gt; +               (m_innerNonSharedNode-&gt;renderer()-&gt;style()-&gt;direction()) : LTR;
&gt; 
&gt; The formatting here is a little messy. We don&apos;t usually use extra parentheses
&gt; like the ones here, nor do we indent the way you&apos;re indenting here. Maybe use
&gt; an if statement instead of ? : and a local variable to more consistent with the
&gt; other early exist in this function.

I will change it to local variable + &quot;if&quot; statement.

&gt; 
&gt; &gt; +TextDirection HitTestResult::titleDirection() const
&gt; &gt; +{
&gt; &gt; +    for (Node* titleNode = m_innerNode.get(); titleNode; titleNode = titleNode-&gt;parentNode()) {
&gt; &gt; +        if (titleNode-&gt;isElementNode()) {
&gt; &gt; +            String title = static_cast&lt;Element*&gt;(titleNode)-&gt;title();
&gt; &gt; +            if (!title.isEmpty())
&gt; &gt; +                return (titleNode-&gt;renderer()) ? (titleNode-&gt;renderer()-&gt;style()-&gt;direction()) : LTR;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +    return LTR;
&gt; &gt; +}
&gt; 
&gt; I don&apos;t like the fact that this function repeats the logic about finding title
&gt; elements; it&apos;s really unclear to me that the first element with a non-empty
&gt; title is the right one to return. 

I do not know this part, I am following the logic in title().

&gt; Can this share code with HitTestResult::title
&gt; in some way?

I will merge these 2 functions into 1 and use &quot;direction&quot; as OUT parameter.
String HitTestResult::title(TextDirection&amp;) const;
Same for spellingToolTip().



&gt; 
&gt; Also, the extra parentheses in the ? : line don&apos;t seem good. Maybe put the
&gt; renderer into a local variable.

I will do that.

&gt; 
&gt; &gt; -void WebChromeClient::setToolTip(const String&amp; toolTip)
&gt; &gt; +void WebChromeClient::setToolTip(const String&amp; toolTip, WebCore::TextDirection dir)
&gt; 
&gt; You need to leave out the name for the TextDirection argument, because
&gt; otherwise we&apos;ll get an unused parameter warning and so this will not compile.

I will do that.

&gt; 
&gt; Also, I don&apos;t think you need the WebCore:: prefix inside the file because it
&gt; has using namespace WebCore at the top.

This one is under Webkit/mac/WebCoreSupport. 
Seems there is no &quot;using WebCore&quot; at the top. I will double check and remove it if correct.


&gt; 
&gt; What about other platforms with setToolTip functions? Won&apos;t this break the
&gt; build for those platforms? Please include fixes for that in the patch.
&gt; 

I did not realize you are this quick!
I tried the approach in Chrome before uploading the patch, and it worked. But I neglected the fact that the Chrome side code *has to* be changed/re-compiled after pick up this webkit patch. I was removing the review flag almost at the same time when you submitted the review feedback.

Looks like with this patch, there is no way for webkit to avoid the recompilation of other platforms.

So, I am thinking, instead of changing the signature of WebCore::ChromeClient::setToolTip(), I need to leave it as is and add a non-pure empty virtual function setToolTipDirection() in  WebCore::ChromeClient for tooltip direction, so, other  platforms do not have to recompile after pick up the webkit change. But the client wanting to handle the direction needs to get the direction inside its setToolTip() to display it correctly.

So, the change would be:
1. in ChromeClent.h
virtual void setToolTipDirection(TextDirection dir) { };

2. in Chrome.cpp, at the very end:
m_client-&gt;setToolTipDirection(toolTipDirection);
m_client-&gt;setToolTip();

3. changes in EmptyClient and WebChromeClient (because of ChromeClient::setToolTip() signagure change) wont be needed anymore

4. In client side, for example Chrome, maybe need to have a private data member to save the tooltip direction, and a corresponding getter. (I am not sure whether such data member and getter function should be in WebCore::ChromeClient or in client.)

Or maybe some other better ways. What do you think?

Thanks,
Xiaomei
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128248</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-25 13:21:44 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I tried the approach in Chrome before uploading the patch, and it worked. But I
&gt; neglected the fact that the Chrome side code *has to* be changed/re-compiled
&gt; after pick up this webkit patch. I was removing the review flag almost at the
&gt; same time when you submitted the review feedback.
&gt; 
&gt; Looks like with this patch, there is no way for webkit to avoid the
&gt; recompilation of other platforms.

There&apos;s no need to avoid this. All these platforms are inside WebKit for a reason. We can change them all at once. It does make it harder to test the fix, but as long as your patch changes all platforms it&apos;s completely legitimate to change this internal interface to add the direction argument.

You just need to actually change them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128290</commentid>
    <comment_count>14</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-06-25 15:12:41 -0700</bug_when>
    <thetext>Yes, you are right.
I forgot the overload part in each client.

Thanks,
Xiaomei 

(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; I tried the approach in Chrome before uploading the patch, and it worked. But I
&gt; &gt; neglected the fact that the Chrome side code *has to* be changed/re-compiled
&gt; &gt; after pick up this webkit patch. I was removing the review flag almost at the
&gt; &gt; same time when you submitted the review feedback.
&gt; &gt; 
&gt; &gt; Looks like with this patch, there is no way for webkit to avoid the
&gt; &gt; recompilation of other platforms.
&gt; 
&gt; There&apos;s no need to avoid this. All these platforms are inside WebKit for a
&gt; reason. We can change them all at once. It does make it harder to test the fix,
&gt; but as long as your patch changes all platforms it&apos;s completely legitimate to
&gt; change this internal interface to add the direction argument.
&gt; 
&gt; You just need to actually change them all.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128577</commentid>
    <comment_count>15</comment_count>
      <attachid>31953</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-06-26 15:03:32 -0700</bug_when>
    <thetext>Created attachment 31953
patch w/o layout test (version 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131442</commentid>
    <comment_count>16</comment_count>
      <attachid>31953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-13 16:50:25 -0700</bug_when>
    <thetext>Comment on attachment 31953
patch w/o layout test (version 2)

&gt; +    RenderObject* renderer = m_innerNonSharedNode-&gt;renderer();
&gt; +    if (renderer)
&gt; +        dir = renderer-&gt;style()-&gt;direction();

Could have defined the variable inside the if statement.

&gt; +                RenderObject* renderer = titleNode-&gt;renderer();
&gt; +                if (renderer)
&gt; +                    dir = renderer-&gt;style()-&gt;direction();

Ditto.

&gt; +    }
&gt; +    else if (isEqual(WebElementTitleKey, key)) {

In WebKit coding style, the else goes on the same line as the brace.

&gt; +void WebChromeClient::setToolTip(const String&amp; toolTip, TextDirection /* dir */)

We normally omit the name entirely rather than having it included but commented out.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131631</commentid>
    <comment_count>17</comment_count>
      <attachid>32727</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-14 12:23:36 -0700</bug_when>
    <thetext>Created attachment 32727
updated patch for landing

I am uploading this updated patch for the convenience of landing.
The only differences between this updated patch and the patch Darin approved are those style changes per Darin&apos;s suggestion in comment #16.
Build succeed and test without extra diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131632</commentid>
    <comment_count>18</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-14 12:24:59 -0700</bug_when>
    <thetext>Hi Darin,

Thanks for your review and your comments, appreciated!

Xiaomei

(In reply to comment #16)
&gt; (From update of attachment 31953 [details])
&gt; &gt; +    RenderObject* renderer = m_innerNonSharedNode-&gt;renderer();
&gt; &gt; +    if (renderer)
&gt; &gt; +        dir = renderer-&gt;style()-&gt;direction();
&gt; 
&gt; Could have defined the variable inside the if statement.
&gt; 
&gt; &gt; +                RenderObject* renderer = titleNode-&gt;renderer();
&gt; &gt; +                if (renderer)
&gt; &gt; +                    dir = renderer-&gt;style()-&gt;direction();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; +    }
&gt; &gt; +    else if (isEqual(WebElementTitleKey, key)) {
&gt; 
&gt; In WebKit coding style, the else goes on the same line as the brace.
&gt; 
&gt; &gt; +void WebChromeClient::setToolTip(const String&amp; toolTip, TextDirection /* dir */)
&gt; 
&gt; We normally omit the name entirely rather than having it included but commented
&gt; out.
&gt; 
&gt; r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131644</commentid>
    <comment_count>19</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-14 12:44:46 -0700</bug_when>
    <thetext>Hi Darin,

A question about the testing:

I do not know how to create a layout test for the patch.
Since the patch does not change any layout explicitly, the test should be
testing HitTestResult::spellingToolTip() and
HitTestResult::title() or ... ?

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131806</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-14 21:54:37 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I do not know how to create a layout test for the patch.
&gt; Since the patch does not change any layout explicitly, the test should be
&gt; testing HitTestResult::spellingToolTip() and
&gt; HitTestResult::title() or ... ?

To create a regression test for this, we need to somehow expose the information to the DOM; that&apos;s not terribly difficult to do, but it would require adding code to DumpRenderTree. In some cases like this, though, we don&apos;t include a regression test.

And you&apos;d want to test all of the code paths, both title and spelling tool tip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132369</commentid>
    <comment_count>21</comment_count>
      <attachid>31953</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 15:26:07 -0700</bug_when>
    <thetext>Comment on attachment 31953
patch w/o layout test (version 2)

The real patch is the other one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132370</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 15:27:22 -0700</bug_when>
    <thetext>Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132377</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 15:43:37 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.base.exp
	M	WebCore/loader/EmptyClients.h
	M	WebCore/page/Chrome.cpp
	M	WebCore/page/ChromeClient.h
	M	WebCore/page/chromium/ChromeClientChromium.h
	M	WebCore/rendering/HitTestResult.cpp
	M	WebCore/rendering/HitTestResult.h
	M	WebKit/gtk/ChangeLog
	M	WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
	M	WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
	M	WebKit/mac/ChangeLog
	M	WebKit/mac/Misc/WebElementDictionary.mm
	M	WebKit/mac/WebCoreSupport/WebChromeClient.h
	M	WebKit/mac/WebCoreSupport/WebChromeClient.mm
	M	WebKit/qt/ChangeLog
	M	WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
	M	WebKit/qt/WebCoreSupport/ChromeClientQt.h
	M	WebKit/win/ChangeLog
	M	WebKit/win/WebCoreSupport/WebChromeClient.cpp
	M	WebKit/win/WebCoreSupport/WebChromeClient.h
	M	WebKit/win/WebElementPropertyBag.cpp
	M	WebKit/wx/ChangeLog
	M	WebKit/wx/WebKitSupport/ChromeClientWx.cpp
	M	WebKit/wx/WebKitSupport/ChromeClientWx.h
Committed r45991
	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/Configurations/FeatureDefines.xcconfig
r45990 = 6904d0a9e48800e162225ff7715d2fc1828d0a54 (trunk)
	M	WebKit/mac/WebCoreSupport/WebChromeClient.mm
	M	WebKit/mac/WebCoreSupport/WebChromeClient.h
	M	WebKit/mac/ChangeLog
	M	WebKit/mac/Misc/WebElementDictionary.mm
	M	WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
	M	WebKit/qt/WebCoreSupport/ChromeClientQt.h
	M	WebKit/qt/ChangeLog
	M	WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
	M	WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
	M	WebKit/gtk/ChangeLog
	M	WebKit/win/ChangeLog
	M	WebKit/win/WebCoreSupport/WebChromeClient.cpp
	M	WebKit/win/WebCoreSupport/WebChromeClient.h
	M	WebKit/win/WebElementPropertyBag.cpp
	M	WebKit/wx/WebKitSupport/ChromeClientWx.h
	M	WebKit/wx/WebKitSupport/ChromeClientWx.cpp
	M	WebKit/wx/ChangeLog
	M	WebCore/ChangeLog
	M	WebCore/WebCore.base.exp
	M	WebCore/page/chromium/ChromeClientChromium.h
	M	WebCore/page/ChromeClient.h
	M	WebCore/page/Chrome.cpp
	M	WebCore/rendering/HitTestResult.h
	M	WebCore/rendering/HitTestResult.cpp
	M	WebCore/loader/EmptyClients.h
r45991 = 9b343eeb6e42f7d0e50dbbfccd49ede75f215f37 (trunk)
First, rewinding head to replay your work on top of it...
Nothing to do.
http://trac.webkit.org/changeset/45991</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132382</commentid>
    <comment_count>24</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-16 15:59:12 -0700</bug_when>
    <thetext>Thanks for landing!


(In reply to comment #23)
&gt; Committing to http://svn.webkit.org/repository/webkit/trunk ...
&gt;     M    WebCore/ChangeLog
&gt;     M    WebCore/WebCore.base.exp
&gt;     M    WebCore/loader/EmptyClients.h
&gt;     M    WebCore/page/Chrome.cpp
&gt;     M    WebCore/page/ChromeClient.h
&gt;     M    WebCore/page/chromium/ChromeClientChromium.h
&gt;     M    WebCore/rendering/HitTestResult.cpp
&gt;     M    WebCore/rendering/HitTestResult.h
&gt;     M    WebKit/gtk/ChangeLog
&gt;     M    WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
&gt;     M    WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
&gt;     M    WebKit/mac/ChangeLog
&gt;     M    WebKit/mac/Misc/WebElementDictionary.mm
&gt;     M    WebKit/mac/WebCoreSupport/WebChromeClient.h
&gt;     M    WebKit/mac/WebCoreSupport/WebChromeClient.mm
&gt;     M    WebKit/qt/ChangeLog
&gt;     M    WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
&gt;     M    WebKit/qt/WebCoreSupport/ChromeClientQt.h
&gt;     M    WebKit/win/ChangeLog
&gt;     M    WebKit/win/WebCoreSupport/WebChromeClient.cpp
&gt;     M    WebKit/win/WebCoreSupport/WebChromeClient.h
&gt;     M    WebKit/win/WebElementPropertyBag.cpp
&gt;     M    WebKit/wx/ChangeLog
&gt;     M    WebKit/wx/WebKitSupport/ChromeClientWx.cpp
&gt;     M    WebKit/wx/WebKitSupport/ChromeClientWx.h
&gt; Committed r45991
&gt;     M    JavaScriptCore/ChangeLog
&gt;     M    JavaScriptCore/Configurations/FeatureDefines.xcconfig
&gt; r45990 = 6904d0a9e48800e162225ff7715d2fc1828d0a54 (trunk)
&gt;     M    WebKit/mac/WebCoreSupport/WebChromeClient.mm
&gt;     M    WebKit/mac/WebCoreSupport/WebChromeClient.h
&gt;     M    WebKit/mac/ChangeLog
&gt;     M    WebKit/mac/Misc/WebElementDictionary.mm
&gt;     M    WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
&gt;     M    WebKit/qt/WebCoreSupport/ChromeClientQt.h
&gt;     M    WebKit/qt/ChangeLog
&gt;     M    WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
&gt;     M    WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
&gt;     M    WebKit/gtk/ChangeLog
&gt;     M    WebKit/win/ChangeLog
&gt;     M    WebKit/win/WebCoreSupport/WebChromeClient.cpp
&gt;     M    WebKit/win/WebCoreSupport/WebChromeClient.h
&gt;     M    WebKit/win/WebElementPropertyBag.cpp
&gt;     M    WebKit/wx/WebKitSupport/ChromeClientWx.h
&gt;     M    WebKit/wx/WebKitSupport/ChromeClientWx.cpp
&gt;     M    WebKit/wx/ChangeLog
&gt;     M    WebCore/ChangeLog
&gt;     M    WebCore/WebCore.base.exp
&gt;     M    WebCore/page/chromium/ChromeClientChromium.h
&gt;     M    WebCore/page/ChromeClient.h
&gt;     M    WebCore/page/Chrome.cpp
&gt;     M    WebCore/rendering/HitTestResult.h
&gt;     M    WebCore/rendering/HitTestResult.cpp
&gt;     M    WebCore/loader/EmptyClients.h
&gt; r45991 = 9b343eeb6e42f7d0e50dbbfccd49ede75f215f37 (trunk)
&gt; First, rewinding head to replay your work on top of it...
&gt; Nothing to do.
&gt; http://trac.webkit.org/changeset/45991</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132420</commentid>
    <comment_count>25</comment_count>
      <attachid>32906</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-16 17:32:04 -0700</bug_when>
    <thetext>Created attachment 32906
patch to fix compilation error in gtk and qt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132421</commentid>
    <comment_count>26</comment_count>
      <attachid>32906</attachid>
    <who name="">mitz</who>
    <bug_when>2009-07-16 17:34:43 -0700</bug_when>
    <thetext>Comment on attachment 32906
patch to fix compilation error in gtk and qt

Build fixes like this do not require a review (although it is okay to request a review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132422</commentid>
    <comment_count>27</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-07-16 17:35:53 -0700</bug_when>
    <thetext>Build fix committed as &lt;http://trac.webkit.org/changeset/46000&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134048</commentid>
    <comment_count>28</comment_count>
    <who name="Aharon (Vladimir) Lanin">aharon</who>
    <bug_when>2009-07-23 00:15:52 -0700</bug_when>
    <thetext>I am not sure that I have seen the final version of the change, but I have a concern, if the latest logic is still to always wrap in either LRE or RLE (and then PDF). It would be best not to wrap when the intended directionality of the title is the same as the browser&apos;s directionality (and the wrapping simply isn&apos;t needed). My concern is that the LRE and PDF characters could be displayed as funny little graphics characters on Windows systems without RTL script support enabled (i.e. 99% of the Windows systems in the world - but probably not the systems of the developers on this thread! :-) for your normal garden variety purely LTR pages.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>28009</attachid>
            <date>2009-02-26 00:44:04 -0800</date>
            <delta_ts>2009-02-26 00:44:04 -0800</delta_ts>
            <desc>tooltip directionality test case</desc>
            <filename>tooltip.html</filename>
            <type>text/html</type>
            <size>271</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">77u/PGh0bWw+DQo8aGVhZD4NCgk8TUVUQSBIVFRQLUVRVUlWPSJDT05URU5ULVRZUEUiIENPTlRF
TlQ9IlRFWFQvSFRNTDsgQ0hBUlNFVD11dGYtOCI+DQo8L2hlYWQ+DQo8Ym9keT4NCjxzcGFuIGRp
cj1ydGwgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6UmVkIiB0aXRsZT0i16nXnNeV150hIj5Ib3Zl
ciBoZXJlITwvc3Bhbj4NCjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOkJsdWUiIHRpdGxl
PSJIaSEiPkFuZCBub3cgaGVyZSE8L3NwYW4+DQo8L2JvZHk+PC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31868</attachid>
            <date>2009-06-25 11:33:20 -0700</date>
            <delta_ts>2009-06-25 11:54:10 -0700</delta_ts>
            <desc>patch w/o layout test</desc>
            <filename>24187.v1</filename>
            <type>text/plain</type>
            <size>10247</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDktMDYtMjUgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0
b29sdGlwIGRvZXMgbm90IGdldCBpdHMgZGlyZWN0aW9uYWxpdHkgZnJvbSBpdHMgZWxlbWVudCdz
IGRpcmVjdGlvbmFsaXR5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjQxODcKKworICAgICAgICBQZXIgbWl0eidzIHN1Z2dlc3Rpb24gaW4gY29tbWVu
dCAjNiwgd2UgcmV0YWluIHRoZSBwbGFpbi10ZXh0IHRpdGxlIEFQSQorICAgICAgICBhbmQgYWRk
IGFuIEFJUCBmb3IgcmV0dXJuaW5nIHRoZSBkaXJlY3Rpb25hbGl0eS4gSG93IHRvIGhhbmRsZSB0
aGUgCisgICAgICAgIGRpcmVjdGlvbmFsaXR5IGlzIHVwIHRvIGNsaWVudHMuIENsaWVudHMgY291
bGQgaWdub3JlIGl0LCBvciB1c2UgCisgICAgICAgIGF0dHJpYnV0ZSBvciB1bmljb2RlIGNvbnRy
b2wgY2hhcmFjdGVycyB0byBkaXNwbGF5IHRoZSB0aXRsZSBhcyB3aGF0CisgICAgICAgIHRoZXkg
d2FudC4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQK
KworICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDogCisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2V0VG9vbFRpcCk6IEFkZCBkaXJlY3Rpb24gYXMgMm5kIHBhcmFt
ZXRlci4KKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWU6OnNldFRvb2xUaXApOiBDYWxjdWxhdGUgdG9vbHRpcCBkaXJlY3Rpb24gYXMgd2VsbCBhbmQg
cGFzcyBpdCB0byBjbGllbnQgdG8gdGFrZSBjYXJlIHdoZW4gZGlzcGxheSB0b29sdGlwLgorICAg
ICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6IEFkZCBkaXJlY3Rpb24gYXMgMm5kIHBhcmFtZXRl
ciB0byBwdXJlIHZpcnR1YWwgZnVuY3Rpb24gc2V0VG9vbFRpcCgpLgorICAgICAgICAqIHJlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6
OnNwZWxsaW5nVG9vbFRpcCk6IFJlbW92ZSBhbiBleHRyYSBzcGFjZSAoY29zbWV0aWMgY2hhbmdl
KQorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6c3BlbGxpbmdUb29sVGlwRGlyZWN0
aW9uKTogQWRkZWQuIEdldCBzcGVsbGluZyB0b29sdGlwIGRpcmVjdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnRpdGxlRGlyZWN0aW9uKTogQWRkZWQsIGdldCB0aXRsZSBk
aXJlY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDogQWRkIDIgbW9y
ZSBtZXRob2RzLgorCiAyMDA5LTA2LTI1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgJKHJldmlzaW9uIDQ1MTA0KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYs
IHVuc2lnbmVkKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmlu
ZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYsIFRleHRE
aXJlY3Rpb24pIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lKikgeyB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJy
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgpAQCAtMzE2LDggKzMxNywxMCBAQCB2b2lkIENocm9tZTo6bW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQoY29uCiAKIHZvaWQgQ2hyb21lOjpzZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCkKIHsKKyAgICBUZXh0RGlyZWN0aW9uIHRvb2xUaXBEaXJlY3Rpb24gPSBMVFI7
CiAgICAgLy8gRmlyc3QgcHJpb3JpdHkgaXMgYSBwb3RlbnRpYWwgdG9vbFRpcCByZXByZXNlbnRp
bmcgYSBzcGVsbGluZyBvciBncmFtbWFyIGVycm9yCiAgICAgU3RyaW5nIHRvb2xUaXAgPSByZXN1
bHQuc3BlbGxpbmdUb29sVGlwKCk7CisgICAgdG9vbFRpcERpcmVjdGlvbiA9IHJlc3VsdC5zcGVs
bGluZ1Rvb2xUaXBEaXJlY3Rpb24oKTsKIAogICAgIC8vIE5leHQgcHJpb3JpdHkgaXMgYSB0b29s
VGlwIGZyb20gYSBVUkwgYmVuZWF0aCB0aGUgbW91c2UgKGlmIHByZWZlcmVuY2UgaXMgc2V0IHRv
IHNob3cgdGhvc2UpLgogICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSAmJiBtX3BhZ2UtPnNldHRp
bmdzKCktPnNob3dzVVJMc0luVG9vbFRpcHMoKSkgewpAQCAtMzI2LDIwICszMjksMjcgQEAgdm9p
ZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlcwogICAgICAgICAgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CiAgICAgICAgICAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGlucHV0LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50OjpT
VUJNSVQpCi0gICAgICAgICAgICAgICAgICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBp
bnB1dC0+Zm9ybSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoSFRNTEZvcm1FbGVtZW50KiBm
b3JtID0gaW5wdXQtPmZvcm0oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcCA9
IGZvcm0tPmFjdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0tPnJlbmRl
cmVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IGZv
cm0tPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpcmVjdGlvbigpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBHZXQgdG9vbHRpcCBy
ZXByZXNlbnRpbmcgbGluaydzIFVSTAotICAgICAgICBpZiAodG9vbFRpcC5pc0VtcHR5KCkpCisg
ICAgICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IE5l
ZWQgdG8gcGFzcyB0aGlzIFVSTCB0aHJvdWdoIHVzZXJWaXNpYmxlU3RyaW5nIG9uY2UgdGhhdCdz
IGluIFdlYkNvcmUKICAgICAgICAgICAgIHRvb2xUaXAgPSByZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCkuc3RyaW5nKCk7CisgICAgICAgICAgICAvLyBVUkwgYWx3YXlzIGRpc3BsYXkgYXMgTFRSLCBu
byBuZWVkIHRvIHJlc2V0IHRvb2xUaXBEaXJlY3Rpb25hbGl0eS4KKyAgICAgICAgfQogICAgIH0K
IAogICAgIC8vIE5leHQgd2UnbGwgY29uc2lkZXIgYSB0b29sdGlwIGZvciBlbGVtZW50IHdpdGgg
InRpdGxlIiBhdHRyaWJ1dGUKLSAgICBpZiAodG9vbFRpcC5pc0VtcHR5KCkpCisgICAgaWYgKHRv
b2xUaXAuaXNFbXB0eSgpKSB7CiAgICAgICAgIHRvb2xUaXAgPSByZXN1bHQudGl0bGUoKTsKKyAg
ICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IHJlc3VsdC50aXRsZURpcmVjdGlvbigpOworICAgIH0K
IAogICAgIC8vIExhc3RseSwgZm9yIDxpbnB1dCB0eXBlPSJmaWxlIj4gdGhhdCBhbGxvdyBtdWx0
aXBsZSBmaWxlcywgd2UnbGwgY29uc2lkZXIgYSB0b29sdGlwIGZvciB0aGUgc2VsZWN0ZWQgZmls
ZW5hbWVzCiAgICAgaWYgKHRvb2xUaXAuaXNFbXB0eSgpKSB7CkBAIC0zNTcsMTMgKzM2NywxNCBA
QCB2b2lkIENocm9tZTo6c2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZCgnXG4nKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXAgPSBTdHJpbmc6OmFkb3B0
KG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpcyBmaWxlbmFtZSBh
bHdheXMgTFRSPwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIG1fY2xpZW50LT5zZXRUb29s
VGlwKHRvb2xUaXApOworICAgIG1fY2xpZW50LT5zZXRUb29sVGlwKHRvb2xUaXAsIHRvb2xUaXBE
aXJlY3Rpb24pOwogfQogCiB2b2lkIENocm9tZTo6cHJpbnQoRnJhbWUqIGZyYW1lKQpJbmRleDog
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKSA9IDA7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5nJikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKSA9IDA7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lKikgPSAwOwogCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDEzICsxNTIsMjYg
QEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcCgpIAogICAgIGlmICghbV9p
bm5lck5vblNoYXJlZE5vZGUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKLSAgICAg
RG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgp
LT5tYXJrZXJDb250YWluaW5nUG9pbnQobV9wb2ludCwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIp
OworICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9j
dW1lbnQoKS0+bWFya2VyQ29udGFpbmluZ1BvaW50KG1fcG9pbnQsIERvY3VtZW50TWFya2VyOjpH
cmFtbWFyKTsKICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAg
ICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRpb247CiB9CiAKK1RleHREaXJlY3Rpb24gSGl0VGVz
dFJlc3VsdDo6c3BlbGxpbmdUb29sVGlwRGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
aW5uZXJOb25TaGFyZWROb2RlKQorICAgICAgICByZXR1cm4gTFRSOworICAgIAorICAgIERvY3Vt
ZW50TWFya2VyKiBtYXJrZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS0+bWFy
a2VyQ29udGFpbmluZ1BvaW50KG1fcG9pbnQsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKKyAg
ICBpZiAoIW1hcmtlcikKKyAgICAgICAgcmV0dXJuIExUUjsKKworICAgIHJldHVybiAobV9pbm5l
ck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCkpID8KKyAgICAgICAgICAgICAgIChtX2lubmVyTm9u
U2hhcmVkTm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpIDogTFRSOworfQor
CiBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6cmVwbGFjZWRTdHJpbmcoKSBjb25zdAogewogICAgIC8v
IFJldHVybiB0aGUgcmVwbGFjZWQgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvaW50LCBp
ZiBhbnkuIFRoaXMgbWFya2VyIGlzIGNyZWF0ZWQgd2hlbiBhIHN0cmluZyBpcyBhdXRvY29ycmVj
dGVkLCAKQEAgLTE4Nyw2ICsyMDAsMTggQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKCkg
Y29uc3QKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKK1RleHREaXJlY3Rpb24gSGl0VGVzdFJl
c3VsdDo6dGl0bGVEaXJlY3Rpb24oKSBjb25zdAoreworICAgIGZvciAoTm9kZSogdGl0bGVOb2Rl
ID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRpdGxlTm9kZTsgdGl0bGVOb2RlID0gdGl0bGVOb2RlLT5w
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKHRpdGxlTm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4odGl0bGVO
b2RlKS0+dGl0bGUoKTsKKyAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiAodGl0bGVOb2RlLT5yZW5kZXJlcigpKSA/ICh0aXRsZU5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmRpcmVjdGlvbigpKSA6IExUUjsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gTFRSOworfQorCiBTdHJpbmcgZGlzcGxheVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2Rl
ZmluZSBIaXRUZXN0UmVzdWx0X2gKIAogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjUsOCArNjYsMTAgQEAgcHVibGljOgogICAgIEludFJlY3QgYm91bmRpbmdC
b3goKSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdDsKICAgICBTdHJpbmcgc3Bl
bGxpbmdUb29sVGlwKCkgY29uc3Q7CisgICAgVGV4dERpcmVjdGlvbiBzcGVsbGluZ1Rvb2xUaXBE
aXJlY3Rpb24oKSBjb25zdDsKICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcoKSBjb25zdDsKICAg
ICBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICBUZXh0RGlyZWN0aW9uIHRpdGxlRGlyZWN0aW9u
KCkgY29uc3Q7CiAgICAgU3RyaW5nIGFsdERpc3BsYXlTdHJpbmcoKSBjb25zdDsKICAgICBTdHJp
bmcgdGl0bGVEaXNwbGF5U3RyaW5nKCkgY29uc3Q7CiAgICAgSW1hZ2UqIGltYWdlKCkgY29uc3Q7
CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNDUxNzcpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5LTA2LTI1ICBYaWFvbWVpIEppICA8eGppQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXggdG9vbHRpcCBkb2VzIG5vdCBnZXQgaXRzIGRpcmVjdGlvbmFsaXR5IGZyb20gaXRz
IGVsZW1lbnQncyBkaXJlY3Rpb25hbGl0eS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0MTg3CisKKyAgICAgICAgUGVyIG1pdHoncyBzdWdnZXN0aW9u
IGluIGNvbW1lbnQgIzYsIHdlIHJldGFpbiB0aGUgcGxhaW4tdGV4dCB0aXRsZSBBUEkKKyAgICAg
ICAgYW5kIGFkZCBhbiBBSVAgZm9yIHJldHVybmluZyB0aGUgZGlyZWN0aW9uYWxpdHkuIEhvdyB0
byBoYW5kbGUgdGhlIAorICAgICAgICBkaXJlY3Rpb25hbGl0eSBpcyB1cCB0byBjbGllbnRzLiBD
bGllbnRzIGNvdWxkIGlnbm9yZSBpdCwgb3IgdXNlIAorICAgICAgICBhdHRyaWJ1dGUgb3IgdW5p
Y29kZSBjb250cm9sIGNoYXJhY3RlcnMgdG8gZGlzcGxheSB0aGUgdGl0bGUgYXMgd2hhdAorICAg
ICAgICB0aGV5IHdhbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaDogQWRkIGRpcmVjdGlvbmFsaXR5IGFzIDJuZCBwYXJhbWV0ZXIgdG8gc2V0VG9vbFRpcCgp
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcCk6IEFkZCBkaXJlY3Rpb25hbGl0eSBhcyAybmQg
cGFyYW1ldGVyIHRvIHNldFRvb3BUaXAoKSAod2l0aG91dCBoYW5kbGluZyBpdCB5ZXQpLgorCiAy
MDA5LTA2LTI0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsx
MDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3Mp
OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7
CisgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgV2Vi
Q29yZTo6VGV4dERpcmVjdGlvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6
RnJhbWUqKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTA1LDcgKzUwNSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWwK
ICAgICBbZWxlbWVudCByZWxlYXNlXTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRv
b2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRv
b2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uIGRpcikK
IHsKICAgICBbbV93ZWJWaWV3IF9zZXRUb29sVGlwOnRvb2xUaXBdOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31953</attachid>
            <date>2009-06-26 15:03:32 -0700</date>
            <delta_ts>2009-07-16 15:26:06 -0700</delta_ts>
            <desc>patch w/o layout test (version 2)</desc>
            <filename>24187.v3</filename>
            <type>text/plain</type>
            <size>23750</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDYtMjYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0
b29sdGlwIGRvZXMgbm90IGdldCBpdHMgZGlyZWN0aW9uYWxpdHkgZnJvbSBpdHMgZWxlbWVudCdz
IGRpcmVjdGlvbmFsaXR5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjQxODcKKworICAgICAgICBQZXIgbWl0eidzIHN1Z2dlc3Rpb24gaW4gY29tbWVu
dCAjNiwgd2hpbGUgZ2V0dGluZyB0aGUgcGxhaW4tdGV4dCAKKyAgICAgICAgdGl0bGUsIHdlIGFs
c28gZ2V0IHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgdGl0bGUuIEhvdyB0byBoYW5kbGUgCisg
ICAgICAgIHRoZSBkaXJlY3Rpb25hbGl0eSBpcyB1cCB0byBjbGllbnRzLiBDbGllbnRzIGNvdWxk
IGlnbm9yZSBpdCwgCisgICAgICAgIG9yIHVzZSBhdHRyaWJ1dGUgb3IgdW5pY29kZSBjb250cm9s
IGNoYXJhY3RlcnMgdG8gZGlzcGxheSB0aGUgdGl0bGUKKyAgICAgICAgYXMgd2hhdCB0aGV5IHdh
bnQuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBSZXBsYWNlIDIgbmFtZXMgZHVlIHRvIHNpZ25h
dHVyZSBjaGFuZ2UuCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOiAKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKTogQWRkIGRpcmVjdGlvbiBh
cyAybmQgcGFyYW1ldGVyLgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZTo6c2V0VG9vbFRpcCk6IENhbGN1bGF0ZSB0b29sdGlwIGRpcmVjdGlvbiBh
cyB3ZWxsIGFuZCBwYXNzIGl0IHRvIGNsaWVudCB0byB0YWtlIGNhcmUgd2hlbiBkaXNwbGF5IHRv
b2x0aXAuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDogQWRkIGRpcmVjdGlvbiBhcyAy
bmQgcGFyYW1ldGVyIHRvIHB1cmUgdmlydHVhbCBmdW5jdGlvbiBzZXRUb29sVGlwKCkuCisgICAg
ICAgICogcGFnZS9jaHJvbWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50Q2hyb21pdW06OnNldFRvb2xUaXApOiBBZGQgc2V0VG9vbFRpcCgp
IAorICAgICAgICB0ZW1wcmFyaWx5IHRvIG1ha2UgY2hyb21pdW0gY29tcGlsZSBhZnRlciBwaWNr
IHVwIHRoaXMgd2Via2l0IHBhdGNoLgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcCk6
IEJlc2lkZXMgZ2V0dGluZyB0aGUgCisgICAgICAgIHNwZWxsaW5nIHRvb2x0aXAsIGdldCBpdHMg
ZGlyZWN0aW9uYWxpdHkgYXMgd2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6
OnRpdGxlKTogQmVzaWRlcyBnZXR0aW5nIHRoZSB0aXRsZSwgCisgICAgICAgIGdldCBpdHMgZGly
ZWN0aW9uYWxpdHkgYXMgd2VsbC4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5o
OiBBZGQgMiBtb3JlIG1ldGhvZHMuCisKIDIwMDktMDYtMjYgIEplc3NpZSBCZXJsaW4gIDxqYmVy
bGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29y
a2luZyBjb3B5KQpAQCAtNzk0LDEzICs3OTQsMTMgQEAgX19aTks3V2ViQ29yZTEzSGl0VGVzdFJl
c3VsdDEwaXNTZWxlY3RlZAogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDExdGFyZ2V0RnJh
bWVFdgogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDExdGV4dENvbnRlbnRFdgogX19aTks3
V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDE1YWJzb2x1dGVMaW5rVVJMRXYKLV9fWk5LN1dlYkNvcmUx
M0hpdFRlc3RSZXN1bHQxNXNwZWxsaW5nVG9vbFRpcEV2CitfX1pOSzdXZWJDb3JlMTNIaXRUZXN0
UmVzdWx0MTVzcGVsbGluZ1Rvb2xUaXBFUk5TXzEzVGV4dERpcmVjdGlvbkUKIF9fWk5LN1dlYkNv
cmUxM0hpdFRlc3RSZXN1bHQxNmFic29sdXRlSW1hZ2VVUkxFdgogX19aTks3V2ViQ29yZTEzSGl0
VGVzdFJlc3VsdDE2YWx0RGlzcGxheVN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVz
dWx0MTdpc0NvbnRlbnRFZGl0YWJsZUV2CiBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTh0
aXRsZURpc3BsYXlTdHJpbmdFdgogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDVpbWFnZUV2
Ci1fX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0NXRpdGxlRXYKK19fWk5LN1dlYkNvcmUxM0hp
dFRlc3RSZXN1bHQ1dGl0bGVFUk5TXzEzVGV4dERpcmVjdGlvbkUKIF9fWk5LN1dlYkNvcmUxM0hp
dFRlc3RSZXN1bHQ5aW1hZ2VSZWN0RXYKIF9fWk5LN1dlYkNvcmUxM1Jlc291cmNlRXJyb3JjdlA3
TlNFcnJvckV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjEwcmVxdWVzdFVSTEV2Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRU
ZXN0UmVzdWx0JiwgdW5zaWduZWQpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAo
Y29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3Ry
aW5nJiwgVGV4dERpcmVjdGlvbikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUq
KSB7IH0KIApJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAJKHJldmlzaW9uIDQ1MTA0KQorKysgV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91
cExvYWREZWZlcnJlci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0zMTcsNyArMzE4LDggQEAgdm9pZCBDaHJvbWU6Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbgogdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0KQogewogICAgIC8vIEZpcnN0IHByaW9yaXR5IGlzIGEgcG90ZW50
aWFsIHRvb2xUaXAgcmVwcmVzZW50aW5nIGEgc3BlbGxpbmcgb3IgZ3JhbW1hciBlcnJvcgotICAg
IFN0cmluZyB0b29sVGlwID0gcmVzdWx0LnNwZWxsaW5nVG9vbFRpcCgpOworICAgIFRleHREaXJl
Y3Rpb24gdG9vbFRpcERpcmVjdGlvbjsKKyAgICBTdHJpbmcgdG9vbFRpcCA9IHJlc3VsdC5zcGVs
bGluZ1Rvb2xUaXAodG9vbFRpcERpcmVjdGlvbik7CiAKICAgICAvLyBOZXh0IHByaW9yaXR5IGlz
IGEgdG9vbFRpcCBmcm9tIGEgVVJMIGJlbmVhdGggdGhlIG1vdXNlIChpZiBwcmVmZXJlbmNlIGlz
IHNldCB0byBzaG93IHRob3NlKS4KICAgICBpZiAodG9vbFRpcC5pc0VtcHR5KCkgJiYgbV9wYWdl
LT5zZXR0aW5ncygpLT5zaG93c1VSTHNJblRvb2xUaXBzKCkpIHsKQEAgLTMyNiwyMCArMzI4LDI4
IEBAIHZvaWQgQ2hyb21lOjpzZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXMKICAgICAgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUp
OwogICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxl
bWVudDo6U1VCTUlUKQotICAgICAgICAgICAgICAgICAgICBpZiAoSFRNTEZvcm1FbGVtZW50KiBm
b3JtID0gaW5wdXQtPmZvcm0oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxl
bWVudCogZm9ybSA9IGlucHV0LT5mb3JtKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRv
b2xUaXAgPSBmb3JtLT5hY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3Jt
LT5yZW5kZXJlcigpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0
aW9uID0gZm9ybS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERp
cmVjdGlvbiA9IExUUjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKICAgICAgICAgLy8gR2V0IHRvb2x0aXAgcmVwcmVzZW50aW5nIGxpbmsncyBVUkwK
LSAgICAgICAgaWYgKHRvb2xUaXAuaXNFbXB0eSgpKQorICAgICAgICBpZiAodG9vbFRpcC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHBhc3MgdGhpcyBVUkwgdGhy
b3VnaCB1c2VyVmlzaWJsZVN0cmluZyBvbmNlIHRoYXQncyBpbiBXZWJDb3JlCiAgICAgICAgICAg
ICB0b29sVGlwID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpOworICAgICAgICAg
ICAgLy8gVVJMIGFsd2F5cyBkaXNwbGF5IGFzIExUUi4KKyAgICAgICAgICAgIHRvb2xUaXBEaXJl
Y3Rpb24gPSBMVFI7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOZXh0IHdlJ2xsIGNvbnNp
ZGVyIGEgdG9vbHRpcCBmb3IgZWxlbWVudCB3aXRoICJ0aXRsZSIgYXR0cmlidXRlCiAgICAgaWYg
KHRvb2xUaXAuaXNFbXB0eSgpKQotICAgICAgICB0b29sVGlwID0gcmVzdWx0LnRpdGxlKCk7Cisg
ICAgICAgIHRvb2xUaXAgPSByZXN1bHQudGl0bGUodG9vbFRpcERpcmVjdGlvbik7CiAKICAgICAv
LyBMYXN0bHksIGZvciA8aW5wdXQgdHlwZT0iZmlsZSI+IHRoYXQgYWxsb3cgbXVsdGlwbGUgZmls
ZXMsIHdlJ2xsIGNvbnNpZGVyIGEgdG9vbHRpcCBmb3IgdGhlIHNlbGVjdGVkIGZpbGVuYW1lcwog
ICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSkgewpAQCAtMzU3LDEzICszNjcsMTUgQEAgdm9pZCBD
aHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlcwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lcy5hcHBlbmQoJ1xuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwID0gU3RyaW5nOjphZG9wdChuYW1lcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxlbmFtZSBhbHdheXMgZGlzcGxheSBhcyBM
VFIuCisgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gTFRSOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIG1fY2xpZW50LT5zZXRUb29sVGlwKHRvb2xUaXApOwor
ICAgIG1fY2xpZW50LT5zZXRUb29sVGlwKHRvb2xUaXAsIHRvb2xUaXBEaXJlY3Rpb24pOwogfQog
CiB2b2lkIENocm9tZTo6cHJpbnQoRnJhbWUqIGZyYW1lKQpJbmRleDogV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAko
cmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQm
LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKSA9IDA7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFRvb2xUaXAoY29uc3QgU3RyaW5nJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9v
bFRpcChjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKSA9IDA7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHByaW50KEZyYW1lKikgPSAwOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvY2hyb21pdW0v
Q2hyb21lQ2xpZW50Q2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvY2hyb21p
dW0vQ2hyb21lQ2xpZW50Q2hyb21pdW0uaAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3Bh
Z2UvY2hyb21pdW0vQ2hyb21lQ2xpZW50Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHBvcHVwIHdpbGwgYmUg
aGFuZGxlZCBieSB0aGUgZXh0ZXJuYWwgZW1iZWRkZXIuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
b3B1cE9wZW5lZChQb3B1cENvbnRhaW5lciogcG9wdXBDb250YWluZXIsIGNvbnN0IEludFJlY3Qm
IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9jdXNPblNo
b3csIGJvb2wgaGFuZGxlRXh0ZXJuYWwpID0gMDsKKyAgICAgICAgLy8gVE9ETyh4amkpOiBhZGRl
ZCB0ZW1wcmFyaWx5IHRvIG1ha2UgQ2hyb21pdW0gY29tcGlsZSBhZnRlciBwaWNrIHVwIHRoaXMK
KyAgICAgICAgLy8gV2Via2l0IHBhdGNoLiBTaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBhZGRpbmcg
aXQgaW4gQ2hyb21pdW0ncyBvd24gY29kZS4KKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xU
aXAoY29uc3QgU3RyaW5nJiB0b29sdGlwX3RleHQsIFRleHREaXJlY3Rpb24gZGlyKSB7IH0KICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDE3ICsxNDUsMjEgQEAgYm9vbCBIaXRU
ZXN0UmVzdWx0Ojppc1NlbGVjdGVkKCkgY29uc3QKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlv
bigpLT5jb250YWlucyhtX3BvaW50KTsKIH0KIAotU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxs
aW5nVG9vbFRpcCgpIGNvbnN0CitTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c3BlbGxpbmdUb29sVGlw
KFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKIHsKKyAgICBkaXIgPSBMVFI7CiAgICAgLy8gUmV0
dXJuIHRoZSB0b29sIHRpcCBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9pbnQsIGlmIGFu
eS4gT25seSBtYXJrZXJzIGFzc29jaWF0ZWQgd2l0aCBiYWQgZ3JhbW1hcgogICAgIC8vIGN1cnJl
bnRseSBzdXBwbHkgc3RyaW5ncywgYnV0IG1heWJlIHNvbWVkYXkgbWFya2VycyBhc3NvY2lhdGVk
IHdpdGggbWlzc3BlbGxlZCB3b3JkcyB3aWxsIGFsc28uCiAgICAgaWYgKCFtX2lubmVyTm9uU2hh
cmVkTm9kZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAotICAgICBEb2N1bWVudE1h
cmtlciogbWFya2VyID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3VtZW50KCktPm1hcmtlckNv
bnRhaW5pbmdQb2ludChtX3BvaW50LCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpLT5t
YXJrZXJDb250YWluaW5nUG9pbnQobV9wb2ludCwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwog
ICAgIGlmICghbWFya2VyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCk7CisgICAg
aWYgKHJlbmRlcmVyKQorICAgICAgICBkaXIgPSByZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCk7CiAgICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRpb247CiB9CiAKQEAgLTE3MywxNSArMTc3
LDIwIEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjpyZXBsYWNlZFN0cmluZygpIGMKICAgICByZXR1
cm4gbWFya2VyLT5kZXNjcmlwdGlvbjsKIH0gICAgCiAgICAgCi1TdHJpbmcgSGl0VGVzdFJlc3Vs
dDo6dGl0bGUoKSBjb25zdAorU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rp
b24mIGRpcikgY29uc3QKIHsKKyAgICBkaXIgPSBMVFI7CiAgICAgLy8gRmluZCB0aGUgdGl0bGUg
aW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIERPTSBub2RlLgogICAgIC8vIEZvciA8YXJlYT4gdGFn
cyBpbiBpbWFnZSBtYXBzLCB3YWxrIHRoZSB0cmVlIGZvciB0aGUgPGFyZWE+LCBub3QgdGhlIDxp
bWc+IHVzaW5nIGl0LgogICAgIGZvciAoTm9kZSogdGl0bGVOb2RlID0gbV9pbm5lck5vZGUuZ2V0
KCk7IHRpdGxlTm9kZTsgdGl0bGVOb2RlID0gdGl0bGVOb2RlLT5wYXJlbnROb2RlKCkpIHsKICAg
ICAgICAgaWYgKHRpdGxlTm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBTdHJp
bmcgdGl0bGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4odGl0bGVOb2RlKS0+dGl0bGUoKTsKLSAg
ICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWYgKCF0aXRsZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGl0
bGVOb2RlLT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlcikKKyAgICAg
ICAgICAgICAgICAgICAgZGlyID0gcmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpOwogICAg
ICAgICAgICAgICAgIHJldHVybiB0aXRsZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5o
CShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBIaXRUZXN0UmVzdWx0X2gK
IAogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjQsOSArNjUs
OSBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lKCkgY29uc3Q7CiAgICAgSW50UmVj
dCBib3VuZGluZ0JveCgpIGNvbnN0OwogICAgIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0OwotICAg
IFN0cmluZyBzcGVsbGluZ1Rvb2xUaXAoKSBjb25zdDsKKyAgICBTdHJpbmcgc3BlbGxpbmdUb29s
VGlwKFRleHREaXJlY3Rpb24mKSBjb25zdDsKICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcoKSBj
b25zdDsKLSAgICBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICBTdHJpbmcgdGl0bGUoVGV4dERp
cmVjdGlvbiYpIGNvbnN0OwogICAgIFN0cmluZyBhbHREaXNwbGF5U3RyaW5nKCkgY29uc3Q7CiAg
ICAgU3RyaW5nIHRpdGxlRGlzcGxheVN0cmluZygpIGNvbnN0OwogICAgIEltYWdlKiBpbWFnZSgp
IGNvbnN0OwpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MjgxKQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0wNi0yNiAgWGlhb21laSBKaSAg
PHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4IHRvb2x0aXAgZG9lcyBub3QgZ2V0IGl0cyBkaXJlY3Rpb25hbGl0eSBm
cm9tIGl0cyBlbGVtZW50J3MgZGlyZWN0aW9uYWxpdHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDE4NworCisgICAgICAgIFBlciBtaXR6J3Mgc3Vn
Z2VzdGlvbiBpbiBjb21tZW50ICM2LCB3aGlsZSBnZXR0aW5nIHRoZSBwbGFpbi10ZXh0IAorICAg
ICAgICB0aXRsZSwgd2UgYWxzbyBnZXQgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSB0aXRsZS4g
SG93IHRvIGhhbmRsZSAKKyAgICAgICAgdGhlIGRpcmVjdGlvbmFsaXR5IGlzIHVwIHRvIGNsaWVu
dHMuIENsaWVudHMgY291bGQgaWdub3JlIGl0LCAKKyAgICAgICAgb3IgdXNlIGF0dHJpYnV0ZSBv
ciB1bmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycyB0byBkaXNwbGF5IHRoZSB0aXRsZQorICAgICAg
ICBhcyB3aGF0IHRoZXkgd2FudC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcCk6
IEFkZCBkaXJlY3Rpb25hbGl0eSBhcyAybmQgcGFyYW1ldGVyIHRvIHNldFRvb3BUaXAoKSAod2l0
aG91dCBoYW5kbGluZyBpdCB5ZXQpLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5oOiBBZGQgZGlyZWN0aW9uYWxpdHkgYXMgMm5kIHBhcmFtZXRlciB0byBzZXRUb29s
VGlwKCkuCisKIDIwMDktMDYtMjQgIEppYWh1YSBIdWFuZyAgPGpodWFuZ2ppYWh1YUBnbWFpbC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgpJbmRleDogV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gNDUx
MDQpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIENocm9tZUNsaWVudDo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lCiAgICAgfQogfQogCi12b2lkIENocm9tZUNsaWVudDo6c2V0VG9vbFRp
cChjb25zdCBTdHJpbmcmIHRvb2xUaXApCit2b2lkIENocm9tZUNsaWVudDo6c2V0VG9vbFRpcChj
b25zdCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24gLyogZGlyICovKQogewogI2lmIEdU
S19DSEVDS19WRVJTSU9OKDIsMTIsMCkKICAgICBpZiAodG9vbFRpcC5pc0VtcHR5KCkpCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgJKHJldmlzaW9u
IDQ1MTA0KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAko
d29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0
RGlyZWN0aW9uKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUq
KTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDUyODEpCisrKyBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDA5LTA2
LTI2ICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdG9vbHRpcCBkb2VzIG5vdCBnZXQgaXRz
IGRpcmVjdGlvbmFsaXR5IGZyb20gaXRzIGVsZW1lbnQncyBkaXJlY3Rpb25hbGl0eS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MTg3CisKKyAgICAg
ICAgUGVyIG1pdHoncyBzdWdnZXN0aW9uIGluIGNvbW1lbnQgIzYsIHdoaWxlIGdldHRpbmcgdGhl
IHBsYWluLXRleHQgCisgICAgICAgIHRpdGxlLCB3ZSBhbHNvIGdldCB0aGUgZGlyZWN0aW9uYWxp
dHkgb2YgdGhlIHRpdGxlLiBIb3cgdG8gaGFuZGxlIAorICAgICAgICB0aGUgZGlyZWN0aW9uYWxp
dHkgaXMgdXAgdG8gY2xpZW50cy4gQ2xpZW50cyBjb3VsZCBpZ25vcmUgaXQsIAorICAgICAgICBv
ciB1c2UgYXR0cmlidXRlIG9yIHVuaWNvZGUgY29udHJvbCBjaGFyYWN0ZXJzIHRvIGRpc3BsYXkg
dGhlIHRpdGxlCisgICAgICAgIGFzIHdoYXQgdGhleSB3YW50LgorCisgICAgICAgICogTWlzYy9X
ZWJFbGVtZW50RGljdGlvbmFyeS5tbToKKyAgICAgICAgKC1bV2ViRWxlbWVudERpY3Rpb25hcnkg
X3NwZWxsaW5nVG9vbFRpcF0pOiBDaGFuZ2Ugc3BlbGxpbmdUb29sVGlwIGNhbGxlciBkdWUgdG8g
c2lnbmF0dXJlIGNoYW5nZS4KKyAgICAgICAgKC1bV2ViRWxlbWVudERpY3Rpb25hcnkgX3RpdGxl
XSk6IENoYW5nZSB0aXRsZSBjYWxsZXIgZHVlIHRvIHNpZ25hdHVyZSBjaGFuZ2UuCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6IEFkZCBkaXJlY3Rpb25hbGl0eSBh
cyAybmQgcGFyYW1ldGVyIHRvIHNldFRvb2xUaXAoKS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xU
aXApOiBBZGQgZGlyZWN0aW9uYWxpdHkgYXMgMm5kIHBhcmFtZXRlciB0byBzZXRUb29wVGlwKCkg
KHdpdGhvdXQgaGFuZGxpbmcgaXQgeWV0KS4KKwogMjAwOS0wNi0yNiAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFNub3dMZW9wYXJkIGJ1aWxkLgpJbmRl
eDogV2ViS2l0L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQkocmV2aXNpb24gNDUxMDQp
CisrKyBXZWJLaXQvbWFjL01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE5Miw3ICsxOTIsOCBAQCBzdGF0aWMgTlNTdHJpbmcqIE5TU3RyaW5nT3JOaWwoU3Ry
aW5nIGNvCiAKIC0gKE5TU3RyaW5nICopX3NwZWxsaW5nVG9vbFRpcAogewotICAgIHJldHVybiBO
U1N0cmluZ09yTmlsKF9yZXN1bHQtPnNwZWxsaW5nVG9vbFRpcCgpKTsKKyAgICBUZXh0RGlyZWN0
aW9uIGRpcjsKKyAgICByZXR1cm4gTlNTdHJpbmdPck5pbChfcmVzdWx0LT5zcGVsbGluZ1Rvb2xU
aXAoZGlyKSk7CiB9CiAKIC0gKE5TSW1hZ2UgKilfaW1hZ2UKQEAgLTIxOSw3ICsyMjAsOCBAQCBz
dGF0aWMgTlNTdHJpbmcqIE5TU3RyaW5nT3JOaWwoU3RyaW5nIGNvCiAKIC0gKE5TU3RyaW5nICop
X3RpdGxlCiB7Ci0gICAgcmV0dXJuIE5TU3RyaW5nT3JOaWwoX3Jlc3VsdC0+dGl0bGUoKSk7Cisg
ICAgVGV4dERpcmVjdGlvbiBkaXI7CisgICAgcmV0dXJuIE5TU3RyaW5nT3JOaWwoX3Jlc3VsdC0+
dGl0bGUoZGlyKSk7CiB9CiAKIC0gKE5TVVJMICopX2Fic29sdXRlTGlua1VSTApJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0NTEw
NCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIHVu
c2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCkluZGV4
OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNp
b24gNDUxMDQpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50
Ojptb3VzZURpZE1vdmVPdmVyRWwKICAgICBbZWxlbWVudCByZWxlYXNlXTsKIH0KIAotdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwKQordm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGly
ZWN0aW9uIC8qIGRpciAqLykKIHsKICAgICBbbV93ZWJWaWV3IF9zZXRUb29sVGlwOnRvb2xUaXBd
OwogfQpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0NTI4MSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAwOS0wNi0yNiAgWGlhb21laSBKaSAgPHhqaUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4IHRvb2x0aXAgZG9lcyBub3QgZ2V0IGl0cyBkaXJlY3Rpb25hbGl0eSBmcm9tIGl0
cyBlbGVtZW50J3MgZGlyZWN0aW9uYWxpdHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNDE4NworCisgICAgICAgIFBlciBtaXR6J3Mgc3VnZ2VzdGlv
biBpbiBjb21tZW50ICM2LCB3aGlsZSBnZXR0aW5nIHRoZSBwbGFpbi10ZXh0IAorICAgICAgICB0
aXRsZSwgd2UgYWxzbyBnZXQgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSB0aXRsZS4gSG93IHRv
IGhhbmRsZSAKKyAgICAgICAgdGhlIGRpcmVjdGlvbmFsaXR5IGlzIHVwIHRvIGNsaWVudHMuIENs
aWVudHMgY291bGQgaWdub3JlIGl0LCAKKyAgICAgICAgb3IgdXNlIGF0dHJpYnV0ZSBvciB1bmlj
b2RlIGNvbnRyb2wgY2hhcmFjdGVycyB0byBkaXNwbGF5IHRoZSB0aXRsZQorICAgICAgICBhcyB3
aGF0IHRoZXkgd2FudC4KKworCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnNldFRvb2xUaXApOiBB
ZGQgZGlyZWN0aW9uYWxpdHkgYXMgMm5kIHBhcmFtZXRlciB0byBzZXRUb29wVGlwKCkgKHdpdGhv
dXQgaGFuZGxpbmcgaXQgeWV0KS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5oOiBBZGQgZGlyZWN0aW9uYWxpdHkgYXMgMm5kIHBhcmFtZXRlciB0byBzZXRUb29sVGlw
KCkuCisKIDIwMDktMDYtMjYgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDQ1MTA0
KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6Om1vdXNlRGlk
TW92ZU92ZXJFbGUKICAgICB9CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldFRvb2xUaXAo
Y29uc3QgU3RyaW5nICZ0aXApCit2b2lkIENocm9tZUNsaWVudFF0OjpzZXRUb29sVGlwKGNvbnN0
IFN0cmluZyAmdGlwLCBUZXh0RGlyZWN0aW9uIC8qIGRpciAqLykKIHsKICNpZm5kZWYgUVRfTk9f
VE9PTFRJUAogICAgIFFXaWRnZXQqIHZpZXcgPSBtX3dlYlBhZ2UtPnZpZXcoKTsKSW5kZXg6IFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA0NTEwNCkK
KysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
dW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xU
aXAoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0
IFN0cmluZyYsIFRleHREaXJlY3Rpb24pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmludChG
cmFtZSopOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTI4MSkKKysr
IFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIw
MDktMDYtMjYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0b29sdGlwIGRvZXMgbm90IGdl
dCBpdHMgZGlyZWN0aW9uYWxpdHkgZnJvbSBpdHMgZWxlbWVudCdzIGRpcmVjdGlvbmFsaXR5Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxODcKKwor
ICAgICAgICBQZXIgbWl0eidzIHN1Z2dlc3Rpb24gaW4gY29tbWVudCAjNiwgd2hpbGUgZ2V0dGlu
ZyB0aGUgcGxhaW4tdGV4dCAKKyAgICAgICAgdGl0bGUsIHdlIGFsc28gZ2V0IHRoZSBkaXJlY3Rp
b25hbGl0eSBvZiB0aGUgdGl0bGUuIEhvdyB0byBoYW5kbGUgCisgICAgICAgIHRoZSBkaXJlY3Rp
b25hbGl0eSBpcyB1cCB0byBjbGllbnRzLiBDbGllbnRzIGNvdWxkIGlnbm9yZSBpdCwgCisgICAg
ICAgIG9yIHVzZSBhdHRyaWJ1dGUgb3IgdW5pY29kZSBjb250cm9sIGNoYXJhY3RlcnMgdG8gZGlz
cGxheSB0aGUgdGl0bGUKKyAgICAgICAgYXMgd2hhdCB0aGV5IHdhbnQuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xp
ZW50OjpzZXRUb29sVGlwKTogQWRkIGRpcmVjdGlvbmFsaXR5IGFzIDJuZCBwYXJhbWV0ZXIgdG8g
c2V0VG9vcFRpcCgpICh3aXRob3V0IGhhbmRsaW5nIGl0IHlldCkuCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6IEFkZCBkaXJlY3Rpb25hbGl0eSBhcyAybmQgcGFy
YW1ldGVyIHRvIHNldFRvb2xUaXAoKS4KKyAgICAgICAgKiBXZWJFbGVtZW50UHJvcGVydHlCYWcu
Y3BwOgorICAgICAgICAoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpSZWFkKTogQ2hhbmdlIGNhbGwg
b2Ygc3BlbGxpbmdUb29sVGlwKCkgYW5kIHRpdGxlKCkgZHVlIHRvIHNpZ25hdHVyZSBjaGFuZ2Uu
CisKIDIwMDktMDYtMjYgIFlvbmdqdW4gWmhhbmcgIDx5b25nanVuLnpoYW5nQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC93aW4vV2Vi
RWxlbWVudFByb3BlcnR5QmFnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkVsZW1l
bnRQcm9wZXJ0eUJhZy5jcHAJKHJldmlzaW9uIDQ1MTA0KQorKysgV2ViS2l0L3dpbi9XZWJFbGVt
ZW50UHJvcGVydHlCYWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTAgKzE1NiwxNCBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVsZW1lbnRQcm9wCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIFZfQk9PTChwVmFyKSA9IFZBUklBTlRfRkFMU0U7CiAgICAgICAgIHJldHVybiBT
X09LOwotICAgIH0gZWxzZSBpZiAoaXNFcXVhbChXZWJFbGVtZW50U3BlbGxpbmdUb29sVGlwS2V5
LCBrZXkpKQotICAgICAgICByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFudChwVmFyLCBtX3Jl
c3VsdC0+c3BlbGxpbmdUb29sVGlwKCkpOwotICAgIGVsc2UgaWYgKGlzRXF1YWwoV2ViRWxlbWVu
dFRpdGxlS2V5LCBrZXkpKQotICAgICAgICByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFudChw
VmFyLCBtX3Jlc3VsdC0+dGl0bGUoKSk7CisgICAgfSBlbHNlIGlmIChpc0VxdWFsKFdlYkVsZW1l
bnRTcGVsbGluZ1Rvb2xUaXBLZXksIGtleSkpIHsKKyAgICAgICAgVGV4dERpcmVjdGlvbiBkaXI7
CisgICAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nVG9WYXJpYW50KHBWYXIsIG1fcmVzdWx0LT5z
cGVsbGluZ1Rvb2xUaXAoZGlyKSk7CisgICAgfQorICAgIGVsc2UgaWYgKGlzRXF1YWwoV2ViRWxl
bWVudFRpdGxlS2V5LCBrZXkpKSB7CisgICAgICAgIFRleHREaXJlY3Rpb24gZGlyOworICAgICAg
ICByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFudChwVmFyLCBtX3Jlc3VsdC0+dGl0bGUoZGly
KSk7CisgICAgfQogICAgIGVsc2UgaWYgKGlzRXF1YWwoV2ViRWxlbWVudExpbmtVUkxLZXksIGtl
eSkpCiAgICAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nVG9WYXJpYW50KHBWYXIsIG1fcmVzdWx0
LT5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKSk7CiAgICAgZWxzZSBpZiAoaXNFcXVhbChXZWJF
bGVtZW50TGlua1RhcmdldEZyYW1lS2V5LCBrZXkpKSB7CkluZGV4OiBXZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiA0NTEwNCkKKysrIFdl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDk0LDcgKzQ5NCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVP
dmVyRWwKICAgICB1aURlbGVnYXRlLT5tb3VzZURpZE1vdmVPdmVyRWxlbWVudChtX3dlYlZpZXcs
IGVsZW1lbnQuZ2V0KCksIG1vZGlmaWVyRmxhZ3MpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXApCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24gLyogZGly
ICovKQogewogICAgIG1fd2ViVmlldy0+c2V0VG9vbFRpcCh0b29sVGlwKTsKIH0KSW5kZXg6IFdl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDUx
MDQpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5z
aWduZWQgbW9kaWZpZXJGbGFncyk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25z
dCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopOwogCkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MjgxKQorKysg
V2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5
LTA2LTI2ICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdG9vbHRpcCBkb2VzIG5vdCBnZXQg
aXRzIGRpcmVjdGlvbmFsaXR5IGZyb20gaXRzIGVsZW1lbnQncyBkaXJlY3Rpb25hbGl0eS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MTg3CisKKyAg
ICAgICAgUGVyIG1pdHoncyBzdWdnZXN0aW9uIGluIGNvbW1lbnQgIzYsIHdoaWxlIGdldHRpbmcg
dGhlIHBsYWluLXRleHQgCisgICAgICAgIHRpdGxlLCB3ZSBhbHNvIGdldCB0aGUgZGlyZWN0aW9u
YWxpdHkgb2YgdGhlIHRpdGxlLiBIb3cgdG8gaGFuZGxlIAorICAgICAgICB0aGUgZGlyZWN0aW9u
YWxpdHkgaXMgdXAgdG8gY2xpZW50cy4gQ2xpZW50cyBjb3VsZCBpZ25vcmUgaXQsIAorICAgICAg
ICBvciB1c2UgYXR0cmlidXRlIG9yIHVuaWNvZGUgY29udHJvbCBjaGFyYWN0ZXJzIHRvIGRpc3Bs
YXkgdGhlIHRpdGxlCisgICAgICAgIGFzIHdoYXQgdGhleSB3YW50LgorCisgICAgICAgICogV2Vi
S2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRXeDo6c2V0VG9vbFRpcCk6IEFkZCBkaXJlY3Rpb25hbGl0eSBhcyAybmQgcGFyYW1ldGVy
IHRvIHNldFRvb3BUaXAoKSAod2l0aG91dCBoYW5kbGluZyBpdCB5ZXQpLgorICAgICAgICAqIFdl
YktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaDogQWRkIGRpcmVjdGlvbmFsaXR5IGFzIDJuZCBw
YXJhbWV0ZXIgdG8gc2V0VG9vbFRpcCgpLgorCiAyMDA5LTA2LTA5ICBLZXZpbiBPbGxpdmllciAg
PGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeCwgYWRkaW5n
IEpTQ29yZS9hc3NlbWJsZXIgdG8gdGhlIGxpc3Qgb2YgaW5jbHVkZSBkaXJzLgpJbmRleDogV2Vi
S2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkocmV2aXNpb24gNDUxMDQp
CisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2NCw3ICszNjQsNyBAQCB2b2lkIENocm9tZUNsaWVudFd4Ojptb3VzZURpZE1v
dmVPdmVyRWxlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRX
eDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRpcCkKK3ZvaWQgQ2hyb21lQ2xpZW50V3g6OnNl
dFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0aXAsIFRleHREaXJlY3Rpb24gLyogZGlyICovKQogewog
ICAgIHd4VG9vbFRpcCogdG9vbHRpcCA9IG1fd2ViVmlldy0+R2V0VG9vbFRpcCgpOwogICAgIGlm
ICghdG9vbHRpcCB8fCB0b29sdGlwLT5HZXRUaXAoKSAhPSB3eFN0cmluZyh0aXApKQpJbmRleDog
V2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oCShyZXZpc2lvbiA0NTEwNCkK
KysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVy
RmxhZ3MpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5nJik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiwgVGV4dERpcmVjdGlvbik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32727</attachid>
            <date>2009-07-14 12:23:36 -0700</date>
            <delta_ts>2009-07-14 12:33:23 -0700</delta_ts>
            <desc>updated patch for landing</desc>
            <filename>24187.0714</filename>
            <type>text/plain</type>
            <size>23653</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTI4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDYtMjYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0
b29sdGlwIGRvZXMgbm90IGdldCBpdHMgZGlyZWN0aW9uYWxpdHkgZnJvbSBpdHMgZWxlbWVudCdz
IGRpcmVjdGlvbmFsaXR5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjQxODcKKworICAgICAgICBQZXIgbWl0eidzIHN1Z2dlc3Rpb24gaW4gY29tbWVu
dCAjNiwgd2hpbGUgZ2V0dGluZyB0aGUgcGxhaW4tdGV4dCAKKyAgICAgICAgdGl0bGUsIHdlIGFs
c28gZ2V0IHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgdGl0bGUuIEhvdyB0byBoYW5kbGUgCisg
ICAgICAgIHRoZSBkaXJlY3Rpb25hbGl0eSBpcyB1cCB0byBjbGllbnRzLiBDbGllbnRzIGNvdWxk
IGlnbm9yZSBpdCwgCisgICAgICAgIG9yIHVzZSBhdHRyaWJ1dGUgb3IgdW5pY29kZSBjb250cm9s
IGNoYXJhY3RlcnMgdG8gZGlzcGxheSB0aGUgdGl0bGUKKyAgICAgICAgYXMgd2hhdCB0aGV5IHdh
bnQuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBSZXBsYWNlIDIgbmFtZXMgZHVlIHRvIHNpZ25h
dHVyZSBjaGFuZ2UuCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOiAKKyAgICAgICAg
KFdlYkNvcmU6OkVtcHR5Q2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKTogQWRkIGRpcmVjdGlvbiBh
cyAybmQgcGFyYW1ldGVyLgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZTo6c2V0VG9vbFRpcCk6IENhbGN1bGF0ZSB0b29sdGlwIGRpcmVjdGlvbiBh
cyB3ZWxsIGFuZCBwYXNzIGl0IHRvIGNsaWVudCB0byB0YWtlIGNhcmUgd2hlbiBkaXNwbGF5IHRv
b2x0aXAuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDogQWRkIGRpcmVjdGlvbiBhcyAy
bmQgcGFyYW1ldGVyIHRvIHB1cmUgdmlydHVhbCBmdW5jdGlvbiBzZXRUb29sVGlwKCkuCisgICAg
ICAgICogcGFnZS9jaHJvbWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50Q2hyb21pdW06OnNldFRvb2xUaXApOiBBZGQgc2V0VG9vbFRpcCgp
IAorICAgICAgICB0ZW1wcmFyaWx5IHRvIG1ha2UgY2hyb21pdW0gY29tcGlsZSBhZnRlciBwaWNr
IHVwIHRoaXMgd2Via2l0IHBhdGNoLgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcCk6
IEJlc2lkZXMgZ2V0dGluZyB0aGUgCisgICAgICAgIHNwZWxsaW5nIHRvb2x0aXAsIGdldCBpdHMg
ZGlyZWN0aW9uYWxpdHkgYXMgd2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6
OnRpdGxlKTogQmVzaWRlcyBnZXR0aW5nIHRoZSB0aXRsZSwgCisgICAgICAgIGdldCBpdHMgZGly
ZWN0aW9uYWxpdHkgYXMgd2VsbC4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5o
OiBBZGQgMiBtb3JlIG1ldGhvZHMuCisKIDIwMDktMDYtMjYgIEplc3NpZSBCZXJsaW4gIDxqYmVy
bGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29y
a2luZyBjb3B5KQpAQCAtNzk0LDEzICs3OTQsMTMgQEAgX19aTks3V2ViQ29yZTEzSGl0VGVzdFJl
c3VsdDEwaXNTZWxlY3RlZAogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDExdGFyZ2V0RnJh
bWVFdgogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDExdGV4dENvbnRlbnRFdgogX19aTks3
V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDE1YWJzb2x1dGVMaW5rVVJMRXYKLV9fWk5LN1dlYkNvcmUx
M0hpdFRlc3RSZXN1bHQxNXNwZWxsaW5nVG9vbFRpcEV2CitfX1pOSzdXZWJDb3JlMTNIaXRUZXN0
UmVzdWx0MTVzcGVsbGluZ1Rvb2xUaXBFUk5TXzEzVGV4dERpcmVjdGlvbkUKIF9fWk5LN1dlYkNv
cmUxM0hpdFRlc3RSZXN1bHQxNmFic29sdXRlSW1hZ2VVUkxFdgogX19aTks3V2ViQ29yZTEzSGl0
VGVzdFJlc3VsdDE2YWx0RGlzcGxheVN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVz
dWx0MTdpc0NvbnRlbnRFZGl0YWJsZUV2CiBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTh0
aXRsZURpc3BsYXlTdHJpbmdFdgogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDVpbWFnZUV2
Ci1fX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0NXRpdGxlRXYKK19fWk5LN1dlYkNvcmUxM0hp
dFRlc3RSZXN1bHQ1dGl0bGVFUk5TXzEzVGV4dERpcmVjdGlvbkUKIF9fWk5LN1dlYkNvcmUxM0hp
dFRlc3RSZXN1bHQ5aW1hZ2VSZWN0RXYKIF9fWk5LN1dlYkNvcmUxM1Jlc291cmNlRXJyb3JjdlA3
TlNFcnJvckV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjEwcmVxdWVzdFVSTEV2Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRU
ZXN0UmVzdWx0JiwgdW5zaWduZWQpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAo
Y29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3Ry
aW5nJiwgVGV4dERpcmVjdGlvbikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUq
KSB7IH0KIApJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAJKHJldmlzaW9uIDQ1MTA0KQorKysgV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91
cExvYWREZWZlcnJlci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0zMTcsNyArMzE4LDggQEAgdm9pZCBDaHJvbWU6Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbgogdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0KQogewogICAgIC8vIEZpcnN0IHByaW9yaXR5IGlzIGEgcG90ZW50
aWFsIHRvb2xUaXAgcmVwcmVzZW50aW5nIGEgc3BlbGxpbmcgb3IgZ3JhbW1hciBlcnJvcgotICAg
IFN0cmluZyB0b29sVGlwID0gcmVzdWx0LnNwZWxsaW5nVG9vbFRpcCgpOworICAgIFRleHREaXJl
Y3Rpb24gdG9vbFRpcERpcmVjdGlvbjsKKyAgICBTdHJpbmcgdG9vbFRpcCA9IHJlc3VsdC5zcGVs
bGluZ1Rvb2xUaXAodG9vbFRpcERpcmVjdGlvbik7CiAKICAgICAvLyBOZXh0IHByaW9yaXR5IGlz
IGEgdG9vbFRpcCBmcm9tIGEgVVJMIGJlbmVhdGggdGhlIG1vdXNlIChpZiBwcmVmZXJlbmNlIGlz
IHNldCB0byBzaG93IHRob3NlKS4KICAgICBpZiAodG9vbFRpcC5pc0VtcHR5KCkgJiYgbV9wYWdl
LT5zZXR0aW5ncygpLT5zaG93c1VSTHNJblRvb2xUaXBzKCkpIHsKQEAgLTMyNiwyMCArMzI4LDI4
IEBAIHZvaWQgQ2hyb21lOjpzZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXMKICAgICAgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUp
OwogICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxl
bWVudDo6U1VCTUlUKQotICAgICAgICAgICAgICAgICAgICBpZiAoSFRNTEZvcm1FbGVtZW50KiBm
b3JtID0gaW5wdXQtPmZvcm0oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxl
bWVudCogZm9ybSA9IGlucHV0LT5mb3JtKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRv
b2xUaXAgPSBmb3JtLT5hY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3Jt
LT5yZW5kZXJlcigpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0
aW9uID0gZm9ybS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERp
cmVjdGlvbiA9IExUUjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKICAgICAgICAgLy8gR2V0IHRvb2x0aXAgcmVwcmVzZW50aW5nIGxpbmsncyBVUkwK
LSAgICAgICAgaWYgKHRvb2xUaXAuaXNFbXB0eSgpKQorICAgICAgICBpZiAodG9vbFRpcC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHBhc3MgdGhpcyBVUkwgdGhy
b3VnaCB1c2VyVmlzaWJsZVN0cmluZyBvbmNlIHRoYXQncyBpbiBXZWJDb3JlCiAgICAgICAgICAg
ICB0b29sVGlwID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpOworICAgICAgICAg
ICAgLy8gVVJMIGFsd2F5cyBkaXNwbGF5IGFzIExUUi4KKyAgICAgICAgICAgIHRvb2xUaXBEaXJl
Y3Rpb24gPSBMVFI7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOZXh0IHdlJ2xsIGNvbnNp
ZGVyIGEgdG9vbHRpcCBmb3IgZWxlbWVudCB3aXRoICJ0aXRsZSIgYXR0cmlidXRlCiAgICAgaWYg
KHRvb2xUaXAuaXNFbXB0eSgpKQotICAgICAgICB0b29sVGlwID0gcmVzdWx0LnRpdGxlKCk7Cisg
ICAgICAgIHRvb2xUaXAgPSByZXN1bHQudGl0bGUodG9vbFRpcERpcmVjdGlvbik7CiAKICAgICAv
LyBMYXN0bHksIGZvciA8aW5wdXQgdHlwZT0iZmlsZSI+IHRoYXQgYWxsb3cgbXVsdGlwbGUgZmls
ZXMsIHdlJ2xsIGNvbnNpZGVyIGEgdG9vbHRpcCBmb3IgdGhlIHNlbGVjdGVkIGZpbGVuYW1lcwog
ICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSkgewpAQCAtMzU3LDEzICszNjcsMTUgQEAgdm9pZCBD
aHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlcwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lcy5hcHBlbmQoJ1xuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwID0gU3RyaW5nOjphZG9wdChuYW1lcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxlbmFtZSBhbHdheXMgZGlzcGxheSBhcyBM
VFIuCisgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gTFRSOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIG1fY2xpZW50LT5zZXRUb29sVGlwKHRvb2xUaXApOwor
ICAgIG1fY2xpZW50LT5zZXRUb29sVGlwKHRvb2xUaXAsIHRvb2xUaXBEaXJlY3Rpb24pOwogfQog
CiB2b2lkIENocm9tZTo6cHJpbnQoRnJhbWUqIGZyYW1lKQpJbmRleDogV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAko
cmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQm
LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKSA9IDA7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFRvb2xUaXAoY29uc3QgU3RyaW5nJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9v
bFRpcChjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKSA9IDA7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHByaW50KEZyYW1lKikgPSAwOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvY2hyb21pdW0v
Q2hyb21lQ2xpZW50Q2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvY2hyb21p
dW0vQ2hyb21lQ2xpZW50Q2hyb21pdW0uaAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3Bh
Z2UvY2hyb21pdW0vQ2hyb21lQ2xpZW50Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIHBvcHVwIHdpbGwgYmUg
aGFuZGxlZCBieSB0aGUgZXh0ZXJuYWwgZW1iZWRkZXIuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
b3B1cE9wZW5lZChQb3B1cENvbnRhaW5lciogcG9wdXBDb250YWluZXIsIGNvbnN0IEludFJlY3Qm
IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9jdXNPblNo
b3csIGJvb2wgaGFuZGxlRXh0ZXJuYWwpID0gMDsKKyAgICAgICAgLy8gVE9ETyh4amkpOiBhZGRl
ZCB0ZW1wcmFyaWx5IHRvIG1ha2UgQ2hyb21pdW0gY29tcGlsZSBhZnRlciBwaWNrIHVwIHRoaXMK
KyAgICAgICAgLy8gV2Via2l0IHBhdGNoLiBTaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBhZGRpbmcg
aXQgaW4gQ2hyb21pdW0ncyBvd24gY29kZS4KKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xU
aXAoY29uc3QgU3RyaW5nJiB0b29sdGlwX3RleHQsIFRleHREaXJlY3Rpb24gZGlyKSB7IH0KICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDE3ICsxNDUsMjAgQEAgYm9vbCBIaXRU
ZXN0UmVzdWx0Ojppc1NlbGVjdGVkKCkgY29uc3QKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlv
bigpLT5jb250YWlucyhtX3BvaW50KTsKIH0KIAotU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxs
aW5nVG9vbFRpcCgpIGNvbnN0CitTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c3BlbGxpbmdUb29sVGlw
KFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKIHsKKyAgICBkaXIgPSBMVFI7CiAgICAgLy8gUmV0
dXJuIHRoZSB0b29sIHRpcCBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9pbnQsIGlmIGFu
eS4gT25seSBtYXJrZXJzIGFzc29jaWF0ZWQgd2l0aCBiYWQgZ3JhbW1hcgogICAgIC8vIGN1cnJl
bnRseSBzdXBwbHkgc3RyaW5ncywgYnV0IG1heWJlIHNvbWVkYXkgbWFya2VycyBhc3NvY2lhdGVk
IHdpdGggbWlzc3BlbGxlZCB3b3JkcyB3aWxsIGFsc28uCiAgICAgaWYgKCFtX2lubmVyTm9uU2hh
cmVkTm9kZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIAotICAgICBEb2N1bWVudE1h
cmtlciogbWFya2VyID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3VtZW50KCktPm1hcmtlckNv
bnRhaW5pbmdQb2ludChtX3BvaW50LCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpLT5t
YXJrZXJDb250YWluaW5nUG9pbnQobV9wb2ludCwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwog
ICAgIGlmICghbWFya2VyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKKyAgICBpZiAoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcigpKQor
ICAgICAgICBkaXIgPSByZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7CiAgICAgcmV0dXJu
IG1hcmtlci0+ZGVzY3JpcHRpb247CiB9CiAKQEAgLTE3MywxNSArMTc2LDE5IEBAIFN0cmluZyBI
aXRUZXN0UmVzdWx0OjpyZXBsYWNlZFN0cmluZygpIGMKICAgICByZXR1cm4gbWFya2VyLT5kZXNj
cmlwdGlvbjsKIH0gICAgCiAgICAgCi1TdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoKSBjb25z
dAorU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QK
IHsKKyAgICBkaXIgPSBMVFI7CiAgICAgLy8gRmluZCB0aGUgdGl0bGUgaW4gdGhlIG5lYXJlc3Qg
ZW5jbG9zaW5nIERPTSBub2RlLgogICAgIC8vIEZvciA8YXJlYT4gdGFncyBpbiBpbWFnZSBtYXBz
LCB3YWxrIHRoZSB0cmVlIGZvciB0aGUgPGFyZWE+LCBub3QgdGhlIDxpbWc+IHVzaW5nIGl0Lgog
ICAgIGZvciAoTm9kZSogdGl0bGVOb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRpdGxlTm9kZTsg
dGl0bGVOb2RlID0gdGl0bGVOb2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKHRpdGxl
Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4odGl0bGVOb2RlKS0+dGl0bGUoKTsKLSAgICAgICAgICAgIGlmICgh
dGl0bGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRpdGxlTm9kZS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgZGlyID0gcmVuZGVyZXItPnN0eWxlKCktPmRp
cmVjdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiB0aXRsZTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
SGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBI
aXRUZXN0UmVzdWx0X2gKIAogI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiVGV4dERp
cmVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjQsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lKCkgY29u
c3Q7CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OwogICAgIGJvb2wgaXNTZWxlY3Rl
ZCgpIGNvbnN0OwotICAgIFN0cmluZyBzcGVsbGluZ1Rvb2xUaXAoKSBjb25zdDsKKyAgICBTdHJp
bmcgc3BlbGxpbmdUb29sVGlwKFRleHREaXJlY3Rpb24mKSBjb25zdDsKICAgICBTdHJpbmcgcmVw
bGFjZWRTdHJpbmcoKSBjb25zdDsKLSAgICBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICBTdHJp
bmcgdGl0bGUoVGV4dERpcmVjdGlvbiYpIGNvbnN0OwogICAgIFN0cmluZyBhbHREaXNwbGF5U3Ry
aW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIHRpdGxlRGlzcGxheVN0cmluZygpIGNvbnN0OwogICAg
IEltYWdlKiBpbWFnZSgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MjgxKQorKysgV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0wNi0y
NiAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHRvb2x0aXAgZG9lcyBub3QgZ2V0IGl0cyBk
aXJlY3Rpb25hbGl0eSBmcm9tIGl0cyBlbGVtZW50J3MgZGlyZWN0aW9uYWxpdHkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDE4NworCisgICAgICAg
IFBlciBtaXR6J3Mgc3VnZ2VzdGlvbiBpbiBjb21tZW50ICM2LCB3aGlsZSBnZXR0aW5nIHRoZSBw
bGFpbi10ZXh0IAorICAgICAgICB0aXRsZSwgd2UgYWxzbyBnZXQgdGhlIGRpcmVjdGlvbmFsaXR5
IG9mIHRoZSB0aXRsZS4gSG93IHRvIGhhbmRsZSAKKyAgICAgICAgdGhlIGRpcmVjdGlvbmFsaXR5
IGlzIHVwIHRvIGNsaWVudHMuIENsaWVudHMgY291bGQgaWdub3JlIGl0LCAKKyAgICAgICAgb3Ig
dXNlIGF0dHJpYnV0ZSBvciB1bmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycyB0byBkaXNwbGF5IHRo
ZSB0aXRsZQorICAgICAgICBhcyB3aGF0IHRoZXkgd2FudC4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dDo6c2V0VG9vbFRpcCk6IEFkZCBkaXJlY3Rpb25hbGl0eSBhcyAybmQgcGFyYW1ldGVyIHRvIHNl
dFRvb3BUaXAoKSAod2l0aG91dCBoYW5kbGluZyBpdCB5ZXQpLgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oOiBBZGQgZGlyZWN0aW9uYWxpdHkgYXMgMm5kIHBhcmFt
ZXRlciB0byBzZXRUb29sVGlwKCkuCisKIDIwMDktMDYtMjQgIEppYWh1YSBIdWFuZyAgPGpodWFu
Z2ppYWh1YUBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVy
LgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIENocm9t
ZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lCiAgICAgfQogfQogCi12b2lkIENocm9tZUNs
aWVudDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXApCit2b2lkIENocm9tZUNsaWVu
dDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24pCiB7CiAj
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwxMiwwKQogICAgIGlmICh0b29sVGlwLmlzRW1wdHkoKSkK
SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkocmV2
aXNpb24gNDUxMDQpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIFdlYkNvcmU6
OlRleHREaXJlY3Rpb24pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmludChXZWJDb3JlOjpG
cmFtZSopOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTI4MSkKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MDktMDYtMjYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCB0b29sdGlwIGRvZXMgbm90IGdl
dCBpdHMgZGlyZWN0aW9uYWxpdHkgZnJvbSBpdHMgZWxlbWVudCdzIGRpcmVjdGlvbmFsaXR5Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxODcKKwor
ICAgICAgICBQZXIgbWl0eidzIHN1Z2dlc3Rpb24gaW4gY29tbWVudCAjNiwgd2hpbGUgZ2V0dGlu
ZyB0aGUgcGxhaW4tdGV4dCAKKyAgICAgICAgdGl0bGUsIHdlIGFsc28gZ2V0IHRoZSBkaXJlY3Rp
b25hbGl0eSBvZiB0aGUgdGl0bGUuIEhvdyB0byBoYW5kbGUgCisgICAgICAgIHRoZSBkaXJlY3Rp
b25hbGl0eSBpcyB1cCB0byBjbGllbnRzLiBDbGllbnRzIGNvdWxkIGlnbm9yZSBpdCwgCisgICAg
ICAgIG9yIHVzZSBhdHRyaWJ1dGUgb3IgdW5pY29kZSBjb250cm9sIGNoYXJhY3RlcnMgdG8gZGlz
cGxheSB0aGUgdGl0bGUKKyAgICAgICAgYXMgd2hhdCB0aGV5IHdhbnQuCisKKyAgICAgICAgKiBN
aXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOgorICAgICAgICAoLVtXZWJFbGVtZW50RGljdGlv
bmFyeSBfc3BlbGxpbmdUb29sVGlwXSk6IENoYW5nZSBzcGVsbGluZ1Rvb2xUaXAgY2FsbGVyIGR1
ZSB0byBzaWduYXR1cmUgY2hhbmdlLgorICAgICAgICAoLVtXZWJFbGVtZW50RGljdGlvbmFyeSBf
dGl0bGVdKTogQ2hhbmdlIHRpdGxlIGNhbGxlciBkdWUgdG8gc2lnbmF0dXJlIGNoYW5nZS4KKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDogQWRkIGRpcmVjdGlvbmFs
aXR5IGFzIDJuZCBwYXJhbWV0ZXIgdG8gc2V0VG9vbFRpcCgpLgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c2V0
VG9vbFRpcCk6IEFkZCBkaXJlY3Rpb25hbGl0eSBhcyAybmQgcGFyYW1ldGVyIHRvIHNldFRvb3BU
aXAoKSAod2l0aG91dCBoYW5kbGluZyBpdCB5ZXQpLgorCiAyMDA5LTA2LTI2ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggU25vd0xlb3BhcmQgYnVpbGQu
CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCShyZXZpc2lvbiA0
NTEwNCkKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw4IEBAIHN0YXRpYyBOU1N0cmluZyogTlNTdHJpbmdPck5p
bChTdHJpbmcgY28KIAogLSAoTlNTdHJpbmcgKilfc3BlbGxpbmdUb29sVGlwCiB7Ci0gICAgcmV0
dXJuIE5TU3RyaW5nT3JOaWwoX3Jlc3VsdC0+c3BlbGxpbmdUb29sVGlwKCkpOworICAgIFRleHRE
aXJlY3Rpb24gZGlyOworICAgIHJldHVybiBOU1N0cmluZ09yTmlsKF9yZXN1bHQtPnNwZWxsaW5n
VG9vbFRpcChkaXIpKTsKIH0KIAogLSAoTlNJbWFnZSAqKV9pbWFnZQpAQCAtMjE5LDcgKzIyMCw4
IEBAIHN0YXRpYyBOU1N0cmluZyogTlNTdHJpbmdPck5pbChTdHJpbmcgY28KIAogLSAoTlNTdHJp
bmcgKilfdGl0bGUKIHsKLSAgICByZXR1cm4gTlNTdHJpbmdPck5pbChfcmVzdWx0LT50aXRsZSgp
KTsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcjsKKyAgICByZXR1cm4gTlNTdHJpbmdPck5pbChfcmVz
dWx0LT50aXRsZShkaXIpKTsKIH0KIAogLSAoTlNVUkwgKilfYWJzb2x1dGVMaW5rVVJMCkluZGV4
OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9u
IDQ1MTA0KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRp
cChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChj
b25zdCBXZWJDb3JlOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopOwogI2lmIEVOQUJMRShEQVRBQkFTRSkK
SW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShy
ZXZpc2lvbiA0NTEwNCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbAogICAgIFtlbGVtZW50IHJlbGVhc2VdOwogfQogCi12
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXApCit2
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFRl
eHREaXJlY3Rpb24pCiB7CiAgICAgW21fd2ViVmlldyBfc2V0VG9vbFRpcDp0b29sVGlwXTsKIH0K
SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNDUyODEpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMDYtMjYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeCB0b29sdGlwIGRvZXMgbm90IGdldCBpdHMgZGlyZWN0aW9uYWxpdHkgZnJvbSBpdHMgZWxl
bWVudCdzIGRpcmVjdGlvbmFsaXR5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjQxODcKKworICAgICAgICBQZXIgbWl0eidzIHN1Z2dlc3Rpb24gaW4g
Y29tbWVudCAjNiwgd2hpbGUgZ2V0dGluZyB0aGUgcGxhaW4tdGV4dCAKKyAgICAgICAgdGl0bGUs
IHdlIGFsc28gZ2V0IHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgdGl0bGUuIEhvdyB0byBoYW5k
bGUgCisgICAgICAgIHRoZSBkaXJlY3Rpb25hbGl0eSBpcyB1cCB0byBjbGllbnRzLiBDbGllbnRz
IGNvdWxkIGlnbm9yZSBpdCwgCisgICAgICAgIG9yIHVzZSBhdHRyaWJ1dGUgb3IgdW5pY29kZSBj
b250cm9sIGNoYXJhY3RlcnMgdG8gZGlzcGxheSB0aGUgdGl0bGUKKyAgICAgICAgYXMgd2hhdCB0
aGV5IHdhbnQuCisKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpzZXRUb29sVGlwKTogQWRkIGRp
cmVjdGlvbmFsaXR5IGFzIDJuZCBwYXJhbWV0ZXIgdG8gc2V0VG9vcFRpcCgpICh3aXRob3V0IGhh
bmRsaW5nIGl0IHlldCkuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
aDogQWRkIGRpcmVjdGlvbmFsaXR5IGFzIDJuZCBwYXJhbWV0ZXIgdG8gc2V0VG9vbFRpcCgpLgor
CiAyMDA5LTA2LTI2ICBKZWRyemVqIE5vd2Fja2kgIDxqZWRyemVqLm5vd2Fja2lAbm9raWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA0NTEwNCkKKysr
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojptb3VzZURpZE1vdmVP
dmVyRWxlCiAgICAgfQogfQogCi12b2lkIENocm9tZUNsaWVudFF0OjpzZXRUb29sVGlwKGNvbnN0
IFN0cmluZyAmdGlwKQordm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0VG9vbFRpcChjb25zdCBTdHJp
bmcgJnRpcCwgVGV4dERpcmVjdGlvbikKIHsKICNpZm5kZWYgUVRfTk9fVE9PTFRJUAogICAgIFFX
aWRnZXQqIHZpZXcgPSBtX3dlYlBhZ2UtPnZpZXcoKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA0NTEwNCkKKysrIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyAr
MTEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZp
ZXJGbGFncyk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYsIFRleHRE
aXJlY3Rpb24pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmludChGcmFtZSopOwogI2lmIEVO
QUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTI4MSkKKysrIFdlYktpdC93aW4vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDktMDYtMjYgIFhpYW9t
ZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCB0b29sdGlwIGRvZXMgbm90IGdldCBpdHMgZGlyZWN0aW9u
YWxpdHkgZnJvbSBpdHMgZWxlbWVudCdzIGRpcmVjdGlvbmFsaXR5LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxODcKKworICAgICAgICBQZXIgbWl0
eidzIHN1Z2dlc3Rpb24gaW4gY29tbWVudCAjNiwgd2hpbGUgZ2V0dGluZyB0aGUgcGxhaW4tdGV4
dCAKKyAgICAgICAgdGl0bGUsIHdlIGFsc28gZ2V0IHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUg
dGl0bGUuIEhvdyB0byBoYW5kbGUgCisgICAgICAgIHRoZSBkaXJlY3Rpb25hbGl0eSBpcyB1cCB0
byBjbGllbnRzLiBDbGllbnRzIGNvdWxkIGlnbm9yZSBpdCwgCisgICAgICAgIG9yIHVzZSBhdHRy
aWJ1dGUgb3IgdW5pY29kZSBjb250cm9sIGNoYXJhY3RlcnMgdG8gZGlzcGxheSB0aGUgdGl0bGUK
KyAgICAgICAgYXMgd2hhdCB0aGV5IHdhbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzZXRUb29sVGlw
KTogQWRkIGRpcmVjdGlvbmFsaXR5IGFzIDJuZCBwYXJhbWV0ZXIgdG8gc2V0VG9vcFRpcCgpICh3
aXRob3V0IGhhbmRsaW5nIGl0IHlldCkuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6IEFkZCBkaXJlY3Rpb25hbGl0eSBhcyAybmQgcGFyYW1ldGVyIHRvIHNldFRv
b2xUaXAoKS4KKyAgICAgICAgKiBXZWJFbGVtZW50UHJvcGVydHlCYWcuY3BwOgorICAgICAgICAo
V2ViRWxlbWVudFByb3BlcnR5QmFnOjpSZWFkKTogQ2hhbmdlIGNhbGwgb2Ygc3BlbGxpbmdUb29s
VGlwKCkgYW5kIHRpdGxlKCkgZHVlIHRvIHNpZ25hdHVyZSBjaGFuZ2UuCisKIDIwMDktMDYtMjYg
IFlvbmdqdW4gWmhhbmcgIDx5b25nanVuLnpoYW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC93aW4vV2ViRWxlbWVudFByb3BlcnR5
QmFnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5j
cHAJKHJldmlzaW9uIDQ1MTA0KQorKysgV2ViS2l0L3dpbi9XZWJFbGVtZW50UHJvcGVydHlCYWcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTAgKzE1NiwxMyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkVsZW1lbnRQcm9wCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFZfQk9P
TChwVmFyKSA9IFZBUklBTlRfRkFMU0U7CiAgICAgICAgIHJldHVybiBTX09LOwotICAgIH0gZWxz
ZSBpZiAoaXNFcXVhbChXZWJFbGVtZW50U3BlbGxpbmdUb29sVGlwS2V5LCBrZXkpKQotICAgICAg
ICByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFudChwVmFyLCBtX3Jlc3VsdC0+c3BlbGxpbmdU
b29sVGlwKCkpOwotICAgIGVsc2UgaWYgKGlzRXF1YWwoV2ViRWxlbWVudFRpdGxlS2V5LCBrZXkp
KQotICAgICAgICByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFudChwVmFyLCBtX3Jlc3VsdC0+
dGl0bGUoKSk7CisgICAgfSBlbHNlIGlmIChpc0VxdWFsKFdlYkVsZW1lbnRTcGVsbGluZ1Rvb2xU
aXBLZXksIGtleSkpIHsKKyAgICAgICAgVGV4dERpcmVjdGlvbiBkaXI7CisgICAgICAgIHJldHVy
biBjb252ZXJ0U3RyaW5nVG9WYXJpYW50KHBWYXIsIG1fcmVzdWx0LT5zcGVsbGluZ1Rvb2xUaXAo
ZGlyKSk7CisgICAgfSBlbHNlIGlmIChpc0VxdWFsKFdlYkVsZW1lbnRUaXRsZUtleSwga2V5KSkg
eworICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcjsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRTdHJp
bmdUb1ZhcmlhbnQocFZhciwgbV9yZXN1bHQtPnRpdGxlKGRpcikpOworICAgIH0KICAgICBlbHNl
IGlmIChpc0VxdWFsKFdlYkVsZW1lbnRMaW5rVVJMS2V5LCBrZXkpKQogICAgICAgICByZXR1cm4g
Y29udmVydFN0cmluZ1RvVmFyaWFudChwVmFyLCBtX3Jlc3VsdC0+YWJzb2x1dGVMaW5rVVJMKCku
c3RyaW5nKCkpOwogICAgIGVsc2UgaWYgKGlzRXF1YWwoV2ViRWxlbWVudExpbmtUYXJnZXRGcmFt
ZUtleSwga2V5KSkgewpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw3ICs0OTQsNyBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsCiAgICAgdWlEZWxlZ2F0
ZS0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQobV93ZWJWaWV3LCBlbGVtZW50LmdldCgpLCBtb2Rp
ZmllckZsYWdzKTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29uc3Qg
U3RyaW5nJiB0b29sVGlwKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29uc3Qg
U3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0aW9uKQogewogICAgIG1fd2ViVmlldy0+c2V0VG9v
bFRpcCh0b29sVGlwKTsKIH0KSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0
RGlyZWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopOwog
CkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDQ1MjgxKQorKysgV2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5LTA2LTI2ICBYaWFvbWVpIEppICA8eGppQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXggdG9vbHRpcCBkb2VzIG5vdCBnZXQgaXRzIGRpcmVjdGlvbmFsaXR5IGZyb20gaXRzIGVs
ZW1lbnQncyBkaXJlY3Rpb25hbGl0eS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0MTg3CisKKyAgICAgICAgUGVyIG1pdHoncyBzdWdnZXN0aW9uIGlu
IGNvbW1lbnQgIzYsIHdoaWxlIGdldHRpbmcgdGhlIHBsYWluLXRleHQgCisgICAgICAgIHRpdGxl
LCB3ZSBhbHNvIGdldCB0aGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIHRpdGxlLiBIb3cgdG8gaGFu
ZGxlIAorICAgICAgICB0aGUgZGlyZWN0aW9uYWxpdHkgaXMgdXAgdG8gY2xpZW50cy4gQ2xpZW50
cyBjb3VsZCBpZ25vcmUgaXQsIAorICAgICAgICBvciB1c2UgYXR0cmlidXRlIG9yIHVuaWNvZGUg
Y29udHJvbCBjaGFyYWN0ZXJzIHRvIGRpc3BsYXkgdGhlIHRpdGxlCisgICAgICAgIGFzIHdoYXQg
dGhleSB3YW50LgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRXeDo6c2V0VG9vbFRpcCk6IEFkZCBkaXJl
Y3Rpb25hbGl0eSBhcyAybmQgcGFyYW1ldGVyIHRvIHNldFRvb3BUaXAoKSAod2l0aG91dCBoYW5k
bGluZyBpdCB5ZXQpLgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaDog
QWRkIGRpcmVjdGlvbmFsaXR5IGFzIDJuZCBwYXJhbWV0ZXIgdG8gc2V0VG9vbFRpcCgpLgorCiAy
MDA5LTA2LTA5ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAg
ICAgICAgIHd4IGJ1aWxkIGZpeCwgYWRkaW5nIEpTQ29yZS9hc3NlbWJsZXIgdG8gdGhlIGxpc3Qg
b2YgaW5jbHVkZSBkaXJzLgpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xp
ZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNs
aWVudFd4LmNwcAkocmV2aXNpb24gNDUxMDQpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9D
aHJvbWVDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw3ICszNjQsNyBAQCB2b2lk
IENocm9tZUNsaWVudFd4Ojptb3VzZURpZE1vdmVPdmVyRWxlCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRXeDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRp
cCkKK3ZvaWQgQ2hyb21lQ2xpZW50V3g6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0aXAsIFRl
eHREaXJlY3Rpb24pCiB7CiAgICAgd3hUb29sVGlwKiB0b29sdGlwID0gbV93ZWJWaWV3LT5HZXRU
b29sVGlwKCk7CiAgICAgaWYgKCF0b29sdGlwIHx8IHRvb2x0aXAtPkdldFRpcCgpICE9IHd4U3Ry
aW5nKHRpcCkpCkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJ
KHJldmlzaW9uIDQ1MTA0KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50
V3guaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
dW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcm
LCBUZXh0RGlyZWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwcmludChGcmFtZSopOwogCg==
</data>
<flag name="review"
          id="17107"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32906</attachid>
            <date>2009-07-16 17:32:04 -0700</date>
            <delta_ts>2009-07-16 17:34:43 -0700</delta_ts>
            <desc>patch to fix compilation error in gtk and qt</desc>
            <filename>24187.0716</filename>
            <type>text/plain</type>
            <size>4086</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hh
bmdlTG9nCShyZXZpc2lvbiA0NTk5OCkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMTYgIFhpYW9tZWkgSmkgIDx4amlAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgdGhlIDJuZCBwYXJ0IG9mIGZpeGluZyAiUlRMOiB0b29sdGlwIGRvZXMgbm90
IGdldCBpdHMgZGlyZWN0aW9ubGl0eSBmcm9tIGl0cyBlbGVtZW50J3MuIgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxODcgCisKKyAgICAgICAgQWRk
IG9uZSBleHRyYSBwYXJhbWV0ZXIgdG8gdGhlIGNhbGxlZSBvZiBIaXRUZXN0UmVzdWx0Ojp0aXRs
ZSgpIGR1ZSB0byB0aGUgc2lnbmF0dXJlIGNoYW5nZS4KKworCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6IEFkZCBkaXJlY3Rpb24gYXMgYSBwYXJhbWV0ZXIg
dG8gdGhlIGNhbGxlZSBvZiBIaXRUZXN0UmVzdWx0Ojp0aXRsZSgpLgorCiAyMDA5LTA3LTE2ICBY
aWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5jcHAJKHJldmlzaW9uIDQ1OTkzKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDggQEAgdm9p
ZCBDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZQogICAgIGlmIChpc0xpbmspIHsK
ICAgICAgICAgS1VSTCB1cmwgPSBoaXQuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgICAgIGlmICgh
dXJsLmlzRW1wdHkoKSAmJiB1cmwgIT0gbV9ob3ZlcmVkTGlua1VSTCkgewotICAgICAgICAgICAg
Q1N0cmluZyB0aXRsZVN0cmluZyA9IGhpdC50aXRsZSgpLnV0ZjgoKTsKKyAgICAgICAgICAgIFRl
eHREaXJlY3Rpb24gZGlyOworICAgICAgICAgICAgQ1N0cmluZyB0aXRsZVN0cmluZyA9IGhpdC50
aXRsZShkaXIpLnV0ZjgoKTsKICAgICAgICAgICAgIENTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnBy
ZXR0eVVSTCgpLnV0ZjgoKTsKICAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dl
YlZpZXcsICJob3ZlcmluZy1vdmVyLWxpbmsiLCB0aXRsZVN0cmluZy5kYXRhKCksIHVybFN0cmlu
Zy5kYXRhKCkpOwogICAgICAgICAgICAgbV9ob3ZlcmVkTGlua1VSTCA9IHVybDsKSW5kZXg6IFdl
YktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2
aXNpb24gNDU5OTgpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMDktMDctMTYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMg
dGhlIDJuZCBwYXJ0IG9mIGZpeGluZyAiUlRMOiB0b29sdGlwIGRvZXMgbm90IGdldCBpdHMgZGly
ZWN0aW9ubGl0eSBmcm9tIGl0cyBlbGVtZW50J3MuIgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxODcgCisKKyAgICAgICAgQWRkIG9uZSBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNhbGxlZSBvZiBIaXRUZXN0UmVzdWx0Ojp0aXRsZSgpIGR1ZSB0byB0
aGUgc2lnbmF0dXJlIGNoYW5nZS4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAg
ICAgICAoUVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlOjpRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGUp
OiBBZGQgZGlyZWN0aW9uIGFzIGEgcGFyYW1ldGVyIHRvIHRoZSBjYWxsZWUgb2YgSGl0VGVzdFJl
c3VsdDo6dGl0bGUoKS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6bW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQpOiBBZGQgZGlyZWN0aW9uIGFzIGEgcGFyYW1ldGVyIHRvIHRoZSBjYWxsZWUgb2YgSGl0
VGVzdFJlc3VsdDo6dGl0bGUoKS4KKwogMjAwOS0wNy0xNiAgQmVuamFtaW4gQyBNZXllciAgPGJl
bmphbWluLm1leWVyQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IFRyZWF0LgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNpb24gNDU5OTMpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNDAsNyArMTM0MCw4IEBA
IFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTo6UVdlYkhpdFRlc3RSZXMKICAgICAgICAgcmV0dXJu
OwogICAgIHBvcyA9IGhpdFRlc3QucG9pbnQoKTsKICAgICBib3VuZGluZ1JlY3QgPSBoaXRUZXN0
LmJvdW5kaW5nQm94KCk7Ci0gICAgdGl0bGUgPSBoaXRUZXN0LnRpdGxlKCk7CisgICAgV2ViQ29y
ZTo6VGV4dERpcmVjdGlvbiBkaXI7CisgICAgdGl0bGUgPSBoaXRUZXN0LnRpdGxlKGRpcik7CiAg
ICAgbGlua1RleHQgPSBoaXRUZXN0LnRleHRDb250ZW50KCk7CiAgICAgbGlua1VybCA9IGhpdFRl
c3QuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgbGlua1RpdGxlID0gaGl0VGVzdC50aXRsZURpc3Bs
YXlTdHJpbmcoKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcAkocmV2aXNpb24gNDU5OTMpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsMTEgKzM1MywxMiBAQCB2b2lk
IENocm9tZUNsaWVudFF0Ojpjb250ZW50c1NpemVDaGFuZ2VkCiAKIHZvaWQgQ2hyb21lQ2xpZW50
UXQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
dW5zaWduZWQgbW9kaWZpZXJGbGFncykKIHsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcjsKICAgICBp
ZiAocmVzdWx0LmFic29sdXRlTGlua1VSTCgpICE9IGxhc3RIb3ZlclVSTAotICAgICAgICB8fCBy
ZXN1bHQudGl0bGUoKSAhPSBsYXN0SG92ZXJUaXRsZQorICAgICAgICB8fCByZXN1bHQudGl0bGUo
ZGlyKSAhPSBsYXN0SG92ZXJUaXRsZQogICAgICAgICB8fCByZXN1bHQudGV4dENvbnRlbnQoKSAh
PSBsYXN0SG92ZXJDb250ZW50KSB7CiAgICAgICAgIGxhc3RIb3ZlclVSTCA9IHJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKTsKLSAgICAgICAgbGFzdEhvdmVyVGl0bGUgPSByZXN1bHQudGl0bGUoKTsK
KyAgICAgICAgbGFzdEhvdmVyVGl0bGUgPSByZXN1bHQudGl0bGUoZGlyKTsKICAgICAgICAgbGFz
dEhvdmVyQ29udGVudCA9IHJlc3VsdC50ZXh0Q29udGVudCgpOwogICAgICAgICBlbWl0IG1fd2Vi
UGFnZS0+bGlua0hvdmVyZWQobGFzdEhvdmVyVVJMLnByZXR0eVVSTCgpLAogICAgICAgICAgICAg
ICAgIGxhc3RIb3ZlclRpdGxlLCBsYXN0SG92ZXJDb250ZW50KTsK
</data>
<flag name="review"
          id="17255"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>