<?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>30883</bug_id>
          
          <creation_ts>2009-10-28 14:55:02 -0700</creation_ts>
          <short_desc>[Gtk] Implement AtkText for HTML elements which contain text</short_desc>
          <delta_ts>2010-01-19 13:31:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25531</blocked>
    
    <blocked>25677</blocked>
    
    <blocked>26991</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apinheiro</cc>
    
    <cc>commit-queue</cc>
    
    <cc>walker.willie</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>158717</commentid>
    <comment_count>0</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-10-28 14:55:02 -0700</bug_when>
    <thetext>Currently, given any HTML element which contains text, we see a hierarchy like:

--&gt; HTML Element
    --&gt; ROLE_TEXT

Or in the case of text which is partially marked up with styles or has line breaks.

--&gt; HTML Element
    --&gt; ROLE_TEXT
    --&gt; ROLE_TEXT
    --&gt; ROLE_TEXT

This is not what we see elsewhere (OOo, Gecko, most Gtk+ apps). As a result, custom handling is needed on the AT-side. In particular:

1. to identify the functional object behind text events (e.g. caret-moved)
2. to identify the text associated with focusable elements which emit focus:/state-changed:focused events

Therefore, if it wouldn&apos;t be too much work on the WebKit side for HTML elements to implement AtkText instead, it would be awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158720</commentid>
    <comment_count>1</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-10-28 14:58:24 -0700</bug_when>
    <thetext>Marking as depends on bug 25675 as I assume we&apos;ll want to be able to count on having a single text object before this bug can be addressed. (Feel free to correct me if I&apos;m wrong. :-) )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175296</commentid>
    <comment_count>2</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-12-28 13:04:43 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Marking as depends on bug 25675 as I assume we&apos;ll want to be able to count on
&gt; having a single text object before this bug can be addressed. (Feel free to
&gt; correct me if I&apos;m wrong. :-) )

I&apos;m going to correct myself as it seems I was wrong. Due to some already-implemented WebKit goodness somewhere, the mere act of implementing AtkText for objects whose children are static text seems to be sufficient to cause us to have a single text object as expected. Thus we don&apos;t first want to collapse (create) a single static text object. We just want to implement the fix for this bug and the issue raised in bug 25675 will disappear.

I&apos;ll take this one. And I&apos;m marking 25675 as a dup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175298</commentid>
    <comment_count>3</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-12-28 13:05:49 -0800</bug_when>
    <thetext>*** Bug 25675 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176115</commentid>
    <comment_count>4</comment_count>
      <attachid>45696</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-12-30 19:47:46 -0800</bug_when>
    <thetext>Created attachment 45696
proposed patch

This is the bulk of it (and it might be all of it):

* Implements AtkText for HTML elements which contain text
* Eliminates the now-extraneous objects of ROLE_TEXT from the hierarchy
* get_text_{after,at,before}_offset and get_text work as expected
* Layout tests for accessibility are verified to continue to work as expected
* Unit tests for accessibility updated and verified to work as expected

Still on the to-do list:

1. Verify that events work as expected -- and if not, fix that
2. Add a new unit test or two

However as this patch is complete (and MUCH needed and has two bugs now depending upon it), a review would be most appreciated. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176116</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 19:51:00 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45696 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176319</commentid>
    <comment_count>6</comment_count>
      <attachid>45740</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-02 09:00:45 -0800</bug_when>
    <thetext>Created attachment 45740
caret offset and event adjustments

The first patch flattens the hierarchy, but the reported caret offset and the events emitted were still with respect to the static text objects (which are no longer in the hierarchy). This patch fixes those things. As a side effect, it also fixes bug 25669. Yea! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176320</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-02 09:01:10 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45740 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176323</commentid>
    <comment_count>8</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-02 09:07:21 -0800</bug_when>
    <thetext>*** Bug 25669 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177184</commentid>
    <comment_count>9</comment_count>
      <attachid>45896</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-05 09:27:37 -0800</bug_when>
    <thetext>Created attachment 45896
proposed patch redux (comments added)

Xan and I went over my proposed patch via IRC (thanks!) and decided that it was in need of comments. :-) Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177185</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 09:29:35 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45896 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177717</commentid>
    <comment_count>11</comment_count>
      <attachid>45896</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-01-06 12:45:17 -0800</bug_when>
    <thetext>Comment on attachment 45896
proposed patch redux (comments added)

Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177904</commentid>
    <comment_count>12</comment_count>
      <attachid>45896</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-06 18:05:09 -0800</bug_when>
    <thetext>Comment on attachment 45896
proposed patch redux (comments added)

Clearing flags on attachment: 45896

Committed r52890: &lt;http://trac.webkit.org/changeset/52890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178111</commentid>
    <comment_count>13</comment_count>
      <attachid>45740</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-01-07 03:17:37 -0800</bug_when>
    <thetext>Comment on attachment 45740
caret offset and event adjustments

&gt;From 7de96d0a93b5b44e0dc32bb141a4b52b890e15b1 Mon Sep 17 00:00:00 2001
&gt;From: Joanmarie Diggs &lt;jd@vblockhead.(none)&gt;
&gt;Date: Sat, 2 Jan 2010 11:14:37 -0500
&gt;Subject: [PATCH 2/2] 2010-01-02  Joanmarie Diggs  &lt;joanmarie.diggs@gmail.com&gt;
&gt;
&gt;        Reviewed by NOBODY (OOPS!).
&gt;
&gt;        https://bugs.webkit.org/show_bug.cgi?id=30883
&gt;        [Gtk] Implement AtkText for HTML elements which contain text

We need some kind of explanation here of what the patch does...

&gt;
&gt;        * accessibility/gtk/AccessibilityObjectWrapperAtk.h
&gt;        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
&gt;        (objectAndOffsetUnignored):
&gt;        (webkit_accessible_text_get_caret_offset):
&gt;        * editing/gtk/SelectionControllerGtk.cpp:
&gt;        (SelectionController::notifyAccessibilityForSelectionChange)
&gt;---


&gt; static gint webkit_accessible_text_get_caret_offset(AtkText* text)
&gt; {
&gt;+    AccessibilityObject* coreObject = core(text);
&gt;+    RenderObject* focusedNode = coreObject-&gt;selection().end().node()-&gt;renderer();
&gt;+    AccessibilityObject* focusedObject = coreObject-&gt;document()-&gt;axObjectCache()-&gt;getOrCreate(focusedNode);
&gt;+
&gt;+    AccessibilityObject* object;
&gt;+    int offset;
&gt;+    objectAndOffsetUnignored(focusedObject, object, offset, !coreObject-&gt;isLink());

Not sure I see a reason to not use the return value of the function for, say, the &apos;realObject&apos;?

Also, can you explain a bit the logic behind the last boolean parameter? In the function below I see that it&apos;s used to decide whether to go one level up or not when the object containing the text is a link, but I&apos;m not sure I get why here you pass !isLink(). If it&apos;s not a link you want to ignore them?


&gt;+
&gt;     // TODO: Verify this for RTL text.
&gt;-    return core(text)-&gt;selection().end().offsetInContainerNode();
&gt;+    return offset;
&gt; }
&gt; 
&gt; static AtkAttributeSet* webkit_accessible_text_get_run_attributes(AtkText* text, gint offset, gint* start_offset, gint* end_offset)
&gt;@@ -1729,4 +1737,23 @@ AtkObject* webkit_accessible_get_focused_element(WebKitAccessible* accessible)
&gt;     return focusedObj-&gt;wrapper();
&gt; }
&gt; 
&gt;+void objectAndOffsetUnignored(AccessibilityObject* coreObject, AccessibilityObject*&amp; realObject, int&amp; offset, bool ignoreLinks)
&gt;+{
&gt;+
&gt;+    Node* endNode = static_cast&lt;AccessibilityRenderObject*&gt;(coreObject)-&gt;renderer()-&gt;node();
&gt;+    int endOffset = coreObject-&gt;selection().end().offsetInContainerNode();
&gt;+
&gt;+    realObject = coreObject;
&gt;+    if (realObject-&gt;accessibilityIsIgnored())
&gt;+        realObject = realObject-&gt;parentObjectUnignored();

This can only happen once? Any specific cases in mind?

&gt;+
&gt;+    if (ignoreLinks &amp;&amp; realObject-&gt;isLink())
&gt;+        realObject = realObject-&gt;parentObjectUnignored();
&gt;+
&gt;+    RefPtr&lt;Range&gt; range = rangeOfContents(static_cast&lt;AccessibilityRenderObject*&gt;(realObject)-&gt;renderer()-&gt;node());
&gt;+    ExceptionCode ec = 0;
&gt;+    range-&gt;setEndBefore(endNode, ec);

We all know this will fail one day and we will say &apos;oh damn, should have checked that value&apos; :]

&gt;+    offset = range-&gt;text().length() + endOffset;
&gt;+}
&gt;+
&gt; #endif // HAVE(ACCESSIBILITY)

Marking r- to clarify my questions/doubts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179026</commentid>
    <comment_count>14</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-09 12:57:17 -0800</bug_when>
    <thetext>Thanks for the review! New patch to follow shortly.

&gt;        Reviewed by NOBODY (OOPS!).
&gt; &gt;
&gt; &gt;        https://bugs.webkit.org/show_bug.cgi?id=30883
&gt; &gt;        [Gtk] Implement AtkText for HTML elements which contain text
&gt; 
&gt; We need some kind of explanation here of what the patch does...

Will do.

&gt; static gint webkit_accessible_text_get_caret_offset(AtkText* text)
&gt; &gt; {
&gt; &gt;+    AccessibilityObject* coreObject = core(text);
&gt; &gt;+    RenderObject* focusedNode = coreObject-&gt;selection().end().node()-&gt;renderer();
&gt; &gt;+    AccessibilityObject* focusedObject = coreObject-&gt;document()-&gt;axObjectCache()-&gt;getOrCreate(focusedNode);
&gt; &gt;+
&gt; &gt;+    AccessibilityObject* object;
&gt; &gt;+    int offset;
&gt; &gt;+    objectAndOffsetUnignored(focusedObject, object, offset, !coreObject-&gt;isLink());
&gt; 
&gt; Not sure I see a reason to not use the return value of the function for, say,
&gt; the &apos;realObject&apos;?

Will change.

&gt; Also, can you explain a bit the logic behind the last boolean parameter?
 
Will add comments to the code which will hopefully clarify/remind us of what&apos;s taking place.

&gt; In the
&gt; function below I see that it&apos;s used to decide whether to go one level up or not
&gt; when the object containing the text is a link, but I&apos;m not sure I get why here
&gt; you pass !isLink(). If it&apos;s not a link you want to ignore them?

Exactly. :-)

Here&apos;s the deal: In flattening the hierarchy w.r.t. text objects, we&apos;re no longer exposing all of those RenderText objects to ATs in the form of ATK_ROLE_TEXT. We are still exposing links however. (Ultimately, that too may be something that we can &quot;collapse&quot; fully into the parent object, but I&apos;m not yet sure if that&apos;s a good idea.)

Links now implement the AtkText just like paragraphs, etc. So given:

&lt;body&gt;
&lt;p&gt;This is a &lt;a href=&quot;foo&quot;&gt;test&lt;/a&gt;.&lt;/p&gt;
&lt;/body&gt;

We have this hierarchy:

-&gt; Document Frame
   -&gt; Paragraph (accessible text: &quot;This is a test.&quot;)
      -&gt; Link (accessible text: &quot;test&quot;)

Thus an AT interested in the offset for an AtkText object might be asking us for the offset in the paragraph, or it may be asking for the offset in the link. As far as WebKit is concerned, however, the caret is in neither the paragraph nor the link; it&apos;s in a RenderText object which is now ignored due to the flattening of the hierarchy.

As a general rule, we can (and do) call parentObjectUnignored to find out the real object as far as the AT is concerned. Problem (normally) solved. BUT: At the moment, links are not ignored objects; they&apos;re exposed objects. So the question is, do we report the caret offset w.r.t. the link or w.r.t. the full paragraph? The answer depends on what AtkText object the caller specified. If that object is a link, then we don&apos;t want to ignore links. If that object is not a link, but instead the parent of a link, we do want to ignore links and work our way up to the unignored parent of the link, in this case the paragraph.

Regarding the caret-moved events to report, I had to make a judgment call. Do we:

1. Emit events for both objects?
2. Emit events for only the paragraph?
3. Emit events for only the link?

The more events which get emitted, the more events an AT has to process. Plus, when caret navigation moves into a link, that link gets a focus rectangle and should emit a focus: and object:state-changed:focused event and also claim ATK_STATE_FOCUSED. In other words, ATs already will know that the user just arrowed into a link. And if they want the caret offset w.r.t. that link, they can always ask for it as described above. Therefore, I decided that the thing to do in terms of emitting caret moved events (and also selection changed events), is to just emit events for the paragraph and not for the link.

&gt;+void objectAndOffsetUnignored(AccessibilityObject* coreObject, AccessibilityObject*&amp; realObject, int&amp; offset, bool ignoreLinks)
&gt; &gt;+{
&gt; &gt;+
&gt; &gt;+    Node* endNode = static_cast&lt;AccessibilityRenderObject*&gt;(coreObject)-&gt;renderer()-&gt;node();
&gt; &gt;+    int endOffset = coreObject-&gt;selection().end().offsetInContainerNode();
&gt; &gt;+
&gt; &gt;+    realObject = coreObject;
&gt; &gt;+    if (realObject-&gt;accessibilityIsIgnored())
&gt; &gt;+        realObject = realObject-&gt;parentObjectUnignored();
&gt; 
&gt; This can only happen once? Any specific cases in mind?

Yes. All cases. :-) parentObjectUnignored() by definition returns the first parent object for which accessibilityIsIgnored() is false. Therefore, if realObject-&gt;accessibilityIsIgnored() is true, setting realObject to realObject-&gt;parentObjectUnignored() will give us the object we should report to the AT. Unless, of course, realObject is now a link (because we don&apos;t ignore links normally) and the caller wants to ignore links for one of the reasons described above. Therefore, we do this bit:

&gt; &gt;+    if (ignoreLinks &amp;&amp; realObject-&gt;isLink())
&gt; &gt;+        realObject = realObject-&gt;parentObjectUnignored();

And we should be good, I believe.

&gt; &gt;+    RefPtr&lt;Range&gt; range = rangeOfContents(static_cast&lt;AccessibilityRenderObject*&gt;(realObject)-&gt;renderer()-&gt;node());
&gt; &gt;+    ExceptionCode ec = 0;
&gt; &gt;+    range-&gt;setEndBefore(endNode, ec);
&gt; 
&gt; We all know this will fail one day and we will say &apos;oh damn, should have
&gt; checked that value&apos; :]

Hehehe. Yeah, I know.... But I wasn&apos;t sure how it would fail or what I should do in response. And I grepped through the code and didn&apos;t see anything especially enlightening done in similar calls. So... If you could elaborate on what you think I should do here, I&apos;d be happy to do it.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179038</commentid>
    <comment_count>15</comment_count>
      <attachid>46218</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-09 13:49:36 -0800</bug_when>
    <thetext>Created attachment 46218
caret offset and event adjustments - take 2

This patch (hopefully) addresses all of the issues Xan identified, modulo checking the value after doing

   range-&gt;setEndBefore(endNode, ec)

because it&apos;s not clear to me what condition I should be checking for/concerned about. Sorry!

Because I&apos;ve not addressed this last point, I&apos;m not asking for review; merely attaching this patch &quot;for safe keeping&quot; until Xan has had the opportunity to point me in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179319</commentid>
    <comment_count>16</comment_count>
      <attachid>46218</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-01-11 03:41:36 -0800</bug_when>
    <thetext>Comment on attachment 46218
caret offset and event adjustments - take 2

Thank you, your explanations were really helpful :)

About the error code, just checking at the function it seems it can fail in a number of ways (the internal state of the range is wrong, the node you pass is wrong, the document of the range and the node you pass are not the same, ...), so you could just check none of those happen and otherwise maybe set the offset to some error value (-1?). But you can do that in a follow-up as far as I&apos;m concerned, so r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179321</commentid>
    <comment_count>17</comment_count>
      <attachid>46218</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-11 04:03:47 -0800</bug_when>
    <thetext>Comment on attachment 46218
caret offset and event adjustments - take 2

Clearing flags on attachment: 46218

Committed r53072: &lt;http://trac.webkit.org/changeset/53072&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179322</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-11 04:04:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179340</commentid>
    <comment_count>19</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-11 06:06:48 -0800</bug_when>
    <thetext>I&apos;m going to re-open this one. I still need to add the error checking Xan mentioned, and all the relevant context is in this bug. Sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179640</commentid>
    <comment_count>20</comment_count>
      <attachid>46325</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-11 17:53:37 -0800</bug_when>
    <thetext>Created attachment 46325
get rid of a needless variable

Kov pointed out this error. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179642</commentid>
    <comment_count>21</comment_count>
      <attachid>46325</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-01-11 18:05:26 -0800</bug_when>
    <thetext>Comment on attachment 46325
get rid of a needless variable

thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179645</commentid>
    <comment_count>22</comment_count>
      <attachid>46328</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-11 18:24:16 -0800</bug_when>
    <thetext>Created attachment 46328
One more tweak....

/me sighs.

Thanks Kov!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179648</commentid>
    <comment_count>23</comment_count>
      <attachid>46328</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-11 18:34:48 -0800</bug_when>
    <thetext>Comment on attachment 46328
One more tweak....

So.... In further chatting with Kov, it seems that there are two ways to skin the cat in question. It was decided that what I&apos;d already done was fine (and works), so I&apos;m withdrawing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179747</commentid>
    <comment_count>24</comment_count>
      <attachid>46325</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-12 02:10:05 -0800</bug_when>
    <thetext>Comment on attachment 46325
get rid of a needless variable

Clearing flags on attachment: 46325

Committed r53124: &lt;http://trac.webkit.org/changeset/53124&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179748</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-12 02:10:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179805</commentid>
    <comment_count>26</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-12 05:41:52 -0800</bug_when>
    <thetext>(I still have to address Xan&apos;s issue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181628</commentid>
    <comment_count>27</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-17 15:36:00 -0800</bug_when>
    <thetext>Note to self: While testing the text attributes patch, it seems that some objects are not exposing their text correctly as part of the changes made here. See this document as an example (objects exposed as ROLE_PANEL): https://bugs.webkit.org/attachment.cgi?id=29967</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181638</commentid>
    <comment_count>28</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-17 16:03:17 -0800</bug_when>
    <thetext>Simple test case where things are broken:

&lt;html&gt;
&lt;body&gt;
&lt;p&gt;This is a test.&lt;/p&gt;
Hello world.
&lt;/body&gt;
&lt;/html&gt;

(&apos;Hello world.&apos; has a corresponding object of ROLE_PANEL, but no text)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181746</commentid>
    <comment_count>29</comment_count>
      <attachid>46791</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-17 23:18:41 -0800</bug_when>
    <thetext>Created attachment 46791
Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests, style compliance changes....

This patch makes the following changes:

1. Moves the text collapsing/assembling functionality that was in getPangoLayoutForAtk to the newly-created textForObject.

2. webkit_accessible_text_get_text now falls back on textForObject when it comes up empty.

3. Adds a check in textForObject so that we don&apos;t double-add newlines when we have a BR.

4. Adds new tests for items 2 and 3 above to testatk.c

5. (Hopefully) brings the rest of testatk.c into compliance with the style guidelines. Also there were several instances of our calling atk_object_ref_accessible_child(), but never unref&apos;ing the object at the end of the test. I assume we should be unref&apos;ing them.

6. Adds some sanity checks to objectAndOffsetUnignored which (hopefully) address Xan&apos;s concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181748</commentid>
    <comment_count>30</comment_count>
      <attachid>46792</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-17 23:37:05 -0800</bug_when>
    <thetext>Created attachment 46792
Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests, style compliance changes....

Caught a dumb mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182309</commentid>
    <comment_count>31</comment_count>
      <attachid>46926</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-19 10:43:27 -0800</bug_when>
    <thetext>Created attachment 46926
Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests

Xan and I went over this in IRC (thanks!)

Addresses:
* Style changes should be done in a separate patch. (New tests are style-compliant w.r.t. their names.)
* Removed textForObject from the header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182314</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-19 10:48:29 -0800</bug_when>
    <thetext>Attachment 46926 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:912:  webkit_accessible_text_get_text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/gtk/tests/testatk.c:367:  Declaration has space between * and variable name in WebKitWebView* webView  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:368:  Declaration has space between * and variable name in AtkObject* obj  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:369:  Declaration has space between * and variable name in AtkObject* obj1  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:370:  Declaration has space between * and variable name in AtkObject* obj2  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:371:  Declaration has space between * and variable name in GMainLoop* loop  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:372:  Declaration has space between * and variable name in AtkText* textObj1  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:373:  Declaration has space between * and variable name in AtkText* textObj2  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:411:  Declaration has space between * and variable name in WebKitWebView* webView  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:412:  Declaration has space between * and variable name in AtkObject* obj  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:413:  Declaration has space between * and variable name in AtkObject* obj1  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:414:  Declaration has space between * and variable name in AtkObject* obj2  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:415:  Declaration has space between * and variable name in GMainLoop* loop  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:416:  Declaration has space between * and variable name in AtkText* textObj1  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:417:  Declaration has space between * and variable name in AtkText* textObj2  [whitespace/declaration] [3]
Total errors found: 15


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182382</commentid>
    <comment_count>33</comment_count>
      <attachid>46926</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-01-19 12:41:17 -0800</bug_when>
    <thetext>Comment on attachment 46926
Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182418</commentid>
    <comment_count>34</comment_count>
      <attachid>46926</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-19 13:31:08 -0800</bug_when>
    <thetext>Comment on attachment 46926
Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests

Clearing flags on attachment: 46926

Committed r53487: &lt;http://trac.webkit.org/changeset/53487&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182419</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-19 13:31:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45696</attachid>
            <date>2009-12-30 19:47:46 -0800</date>
            <delta_ts>2010-01-05 09:27:37 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>30883-1.patch</filename>
            <type>text/plain</type>
            <size>8302</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSBkMzEwYTA0ZDhmMDg0ODdjMzQ5NTdhNTU5ZmE4NzVjODU2MGI5MWRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBXZWQsIDMwIERlYyAyMDA5IDIyOjM3OjI1IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0g
MjAwOS0xMi0zMCAgSm9hbm1hcmllIERpZ2dzICA8am9hbm1hcmllLmRpZ2dzQGdtYWlsLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDg4MwogICAgICAgIFtHdGtdIEltcGxlbWVu
dCBBdGtUZXh0IGZvciBIVE1MIGVsZW1lbnRzIHdoaWNoIGNvbnRhaW4gdGV4dAoKICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKICAg
ICAgICAoZ2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QpOgogICAgICAgIChnZXRQYW5nb0xheW91
dEZvckF0ayk6CiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQpOgogICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CiAgICAg
ICAgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2Jq
ZWN0KToKCiAgICAgICAgKiB0ZXN0cy90ZXN0YXRrLmMKICAgICAgICAodGVzdF93ZWJraXRfYXRr
X2dldF90ZXh0X2F0X29mZnNldCk6CiAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9h
dF9vZmZzZXRfZm9ybXMpOgogICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zm
c2V0X25ld2xpbmVzKToKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMTQgKysrKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdEF0ay5jcHAgICB8ICAgIDQgKysKIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwICAgICAgICAgIHwgICA1MCArKysrKysrKysrKysrLS0tLS0tLQog
V2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEy
ICsrKysrCiBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgIDYgLS0KIDUgZmlsZXMgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA4MzI3OTBiLi5iMTNlZDg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA5LTEyLTMwICBKb2Fu
bWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMDg4MworICAgICAgICBbR3RrXSBJbXBsZW1lbnQgQXRrVGV4dCBm
b3IgSFRNTCBlbGVtZW50cyB3aGljaCBjb250YWluIHRleHQKKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKGdl
dEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KToKKyAgICAgICAgKGdldFBhbmdvTGF5b3V0Rm9yQXRr
KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmplY3Qp
OgorCiAyMDA5LTEyLTI4ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAgYi9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCmluZGV4IDdmZDU5YWMu
LmJjMzFmY2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdEF0ay5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0QXRrLmNwcApAQCAtNDcsNiArNDcsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dFBsYXRmb3JtSW5jbHVzaW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQbGF0
Zm9ybUkKICAgICBpZiAocGFyZW50LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBwYXJlbnQtPmlzVGV4
dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKIAorICAgIC8vIFRoZSBv
YmplY3QgY29udGFpbmluZyB0aGUgdGV4dCBzaG91bGQgaW1wbGVtZW50IEF0a1RleHQgaXRzZWxm
LgorICAgIGlmIChyb2xlVmFsdWUoKSA9PSBTdGF0aWNUZXh0Um9sZSkKKyAgICAgICAgcmV0dXJu
IElnbm9yZU9iamVjdDsKKwogICAgIHJldHVybiBEZWZhdWx0QmVoYXZpb3I7CiB9CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5jcHAKaW5kZXggMTZlYTk0OC4uMjg2YjQ1NyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKKysr
IGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5jcHAKQEAgLTgyMCw4ICs4MjAsMTEgQEAgc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF90ZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGcKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKICAgICBTdHJpbmcg
cmV0OwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RhcnRPZmZzZXQ7Ci0gICAgaWYgKGVuZE9mZnNl
dCA9PSAtMSkKKyAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKSB7CiAgICAgICAgIGVuZE9mZnNldCA9
IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCkubGVuZ3RoKCk7CisgICAgICAgIGlmICghZW5kT2Zm
c2V0KQorICAgICAgICAgICAgZW5kT2Zmc2V0ID0gY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVu
dCgpLmxlbmd0aCgpOworICAgIH0KICAgICBpbnQgbGVuZ3RoID0gZW5kT2Zmc2V0IC0gc3RhcnRP
ZmZzZXQ7CiAKICAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQpAQCAtOTAzLDkg
KzkwNiw2IEBAIHN0YXRpYyBQYW5nb0xheW91dCogZ2V0UGFuZ29MYXlvdXRGb3JBdGsoQXRrVGV4
dCogdGV4dE9iamVjdCkKICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NPYmplY3Qg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4oY29yZU9iamVjdCk7CiAg
ICAgaWYgKCFhY2NPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlclRleHQqIHJl
bmRlclRleHQgPSB0b1JlbmRlclRleHQoYWNjT2JqZWN0LT5yZW5kZXJlcigpKTsKLSAgICBpZiAo
IXJlbmRlclRleHQpCi0gICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgc3RyaW5n
IHdpdGggdGhlIGxheW91dCBhcyBpdCBhcHBlYXJzIG9uIHRoZSBzY3JlZW4KICAgICBpZiAoYWNj
T2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKQEAgLTkyMiwxNSArOTIyLDI5IEBAIHN0YXRpYyBQ
YW5nb0xheW91dCogZ2V0UGFuZ29MYXlvdXRGb3JBdGsoQXRrVGV4dCogdGV4dE9iamVjdCkKICAg
ICAgICAgICAgIHJhbmdlID0gYWNjT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51bWJl
cik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3gg
PSByZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKTsKLSAgICAgICAgd2hpbGUgKGJveCkgewotICAg
ICAgICAgICAgZ2NoYXIqIHRleHQgPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChyZW5kZXJUZXh0LT5j
aGFyYWN0ZXJzKCksIHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSwgYm94LT5zdGFydCgpLCBib3gt
PmVuZCgpKTsKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIHRleHQpOwotICAgICAg
ICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0
ZXh0IGJveGVzLCBzbyBjaGVjawotICAgICAgICAgICAgLy8gYmVmb3JlIGFkZGluZyBhIG5ld2xp
bmUgaW4gdGhlIGxheW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50ICM3OC4KLSAgICAgICAgICAg
IGlmICghYm94LT5uZXh0T25MaW5lRXhpc3RzKCkpCisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBvYmogPSBhY2NPYmplY3QtPnJlbmRlcmVyKCktPmZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBv
YmotPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChvYmotPmlzQlIoKSkgewogICAg
ICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOwotICAgICAgICAgICAgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0ID0gdG9SZW5kZXJU
ZXh0KG9iaik7CisgICAgICAgICAgICBpZiAoIXJlbmRlclRleHQgfHwgIW9iai0+aXNUZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG9iai0+Zmlyc3RD
aGlsZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRleHQpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJbmxpbmVUZXh0
Qm94KiBib3ggPSByZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKTsKKyAgICAgICAgICAgIHdoaWxl
IChib3gpIHsKKyAgICAgICAgICAgICAgICBnY2hhciogdGV4dCA9IGNvbnZlcnRVbmlDaGFyVG9V
VEY4KHJlbmRlclRleHQtPmNoYXJhY3RlcnMoKSwgcmVuZGVyVGV4dC0+dGV4dExlbmd0aCgpLCBi
b3gtPnN0YXJ0KCksIGJveC0+ZW5kKCkpOworICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVu
ZChzdHIsIHRleHQpOworICAgICAgICAgICAgICAgIC8vIE5ld2xpbmUgY2hhcnMgaW4gdGhlIHNv
dXJjZSByZXN1bHQgaW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28gY2hlY2sKKyAgICAgICAgICAg
ICAgICAvLyBiZWZvcmUgYWRkaW5nIGEgbmV3bGluZSBpbiB0aGUgbGF5b3V0LiBTZWUgYnVnIDI1
NDE1IGNvbW1lbnQgIzc4LgorICAgICAgICAgICAgICAgIGlmICghYm94LT5uZXh0T25MaW5lRXhp
c3RzKCkpCisgICAgICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOwor
ICAgICAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTYxMCwxMSArMTYyNCwxMyBAQCBzdGF0aWMgZ3VpbnQx
NiBnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0KQogCiAgICAgaWYgKHJvbGUgPT0gU3RhdGljVGV4dFJvbGUpCiAgICAgICAgIGludGVyZmFj
ZU1hc2sgfD0gMSA8PCBXQUlfVEVYVDsKLSAgICBlbHNlIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSAmJiBjb3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsK
LSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOwotICAgICAgICBpZiAoIWNv
cmVPYmplY3QtPmlzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8
PCBXQUlfRURJVEFCTEVfVEVYVDsKLSAgICB9CisgICAgZWxzZSBpZiAoY29yZU9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIGlmIChjb3JlT2JqZWN0LT5pc1Rl
eHRDb250cm9sKCkpIHsKKyAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfVEVY
VDsKKyAgICAgICAgICAgIGlmICghY29yZU9iamVjdC0+aXNSZWFkT25seSgpKQorICAgICAgICAg
ICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfRURJVEFCTEVfVEVYVDsKKyAgICAgICAg
fSBlbHNlIGlmIChzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4oY29yZU9i
amVjdCktPnJlbmRlcmVyKCktPmNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgICAgICBpbnRlcmZh
Y2VNYXNrIHw9IDEgPDwgV0FJX1RFWFQ7CiAKICAgICAvLyBJbWFnZQogICAgIGlmIChjb3JlT2Jq
ZWN0LT5pc0ltYWdlKCkpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCmluZGV4IDZmZDJmZDMuLmVmM2Q0MTUgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMDktMTItMzAgIEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCisgICAgICAgIFtHdGtd
IEltcGxlbWVudCBBdGtUZXh0IGZvciBIVE1MIGVsZW1lbnRzIHdoaWNoIGNvbnRhaW4gdGV4dAor
CisgICAgICAgICogdGVzdHMvdGVzdGF0ay5jCisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3RleHRfYXRfb2Zmc2V0KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9v
ZmZzZXRfZm9ybXMpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNl
dF9uZXdsaW5lcyk6CisKIDIwMDktMTItMjAgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RhdGsuYwppbmRleCBjNWY0ZGIzLi43Zjg3YmRjIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpA
QCAtMjIxLDggKzIyMSw2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9h
dF9vZmZzZXRfZm9ybXModm9pZCkKICAgICBnX2Fzc2VydChvYmopOwogICAgIG9iaiA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsKICAgICBnX2Fzc2VydChvYmopOwot
ICAgIG9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsKLSAgICBn
X2Fzc2VydChvYmopOwogCiAgICAgdGV4dF9vYmogPSBBVEtfVEVYVChvYmopOwogICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKHRleHRfb2JqKSk7CkBAIC0yNTQsOCArMjUyLDYgQEAgc3RhdGljIHZv
aWQgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldCh2b2lkKQogICAgIGdfYXNzZXJ0
KG9iaik7CiAgICAgb2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDAp
OwogICAgIGdfYXNzZXJ0KG9iaik7Ci0gICAgb2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmosIDApOwotICAgIGdfYXNzZXJ0KG9iaik7CiAKICAgICB0ZXh0X29iaiA9IEFU
S19URVhUKG9iaik7CiAgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dF9vYmopKTsKQEAgLTI4
Nyw4ICsyODMsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zm
c2V0X25ld2xpbmVzKHZvaWQpCiAgICAgZ19hc3NlcnQob2JqKTsKICAgICBvYmogPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7CiAgICAgZ19hc3NlcnQob2JqKTsKLSAg
ICBvYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7Ci0gICAgZ19h
c3NlcnQob2JqKTsKIAogICAgIHRleHRfb2JqID0gQVRLX1RFWFQob2JqKTsKICAgICBnX2Fzc2Vy
dChBVEtfSVNfVEVYVCh0ZXh0X29iaikpOwotLSAKMS42LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45740</attachid>
            <date>2010-01-02 09:00:45 -0800</date>
            <delta_ts>2010-01-09 13:49:36 -0800</delta_ts>
            <desc>caret offset and event adjustments</desc>
            <filename>30883-2.patch</filename>
            <type>text/plain</type>
            <size>6010</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSA3ZGU5NmQwYTkzYjViNDRlMGRjMzJiYjE0MWE0YjUyYjg5MGUxNWIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBTYXQsIDIgSmFuIDIwMTAgMTE6MTQ6MzcgLTA1MDAKU3ViamVjdDogW1BBVENIIDIv
Ml0gMjAxMC0wMS0wMiAgSm9hbm1hcmllIERpZ2dzICA8am9hbm1hcmllLmRpZ2dzQGdtYWlsLmNv
bT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDg4MwogICAgICAgIFtHdGtdIEltcGxl
bWVudCBBdGtUZXh0IGZvciBIVE1MIGVsZW1lbnRzIHdoaWNoIGNvbnRhaW4gdGV4dAoKICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNw
cDoKICAgICAgICAob2JqZWN0QW5kT2Zmc2V0VW5pZ25vcmVkKToKICAgICAgICAod2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KToKICAgICAgICAqIGVkaXRpbmcvZ3RrL1Nl
bGVjdGlvbkNvbnRyb2xsZXJHdGsuY3BwOgogICAgICAgIChTZWxlY3Rpb25Db250cm9sbGVyOjpu
b3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKQotLS0KIFdlYkNvcmUvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArKysrKysrKysKIC4u
Li9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwICAgICAgICAgIHwgICAyOSAr
KysrKysrKysrKysrKysrKysrLQogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5oICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29u
dHJvbGxlckd0ay5jcHAgICAgIHwgICAgOSArKysrLS0KIDQgZmlsZXMgY2hhbmdlZCwgNTAgaW5z
ZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM4MjJlNTIuLjg5ZGI3ZTQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTAtMDEtMDIgIEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCisgICAgICAgIFtHdGtd
IEltcGxlbWVudCBBdGtUZXh0IGZvciBIVE1MIGVsZW1lbnRzIHdoaWNoIGNvbnRhaW4gdGV4dAor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuaAorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmNwcDoKKyAgICAgICAgKG9iamVjdEFuZE9mZnNldFVuaWdub3JlZCk6CisgICAgICAg
ICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQpOgorICAgICAgICAqIGVk
aXRpbmcvZ3RrL1NlbGVjdGlvbkNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoU2VsZWN0aW9u
Q29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSkKKwogMjAw
OS0xMi0zMSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggMjg2YjQ1Ny4u
ZmI4NDIyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKQEAgLTk3Niw4ICs5NzYsMTYgQEAgc3Rh
dGljIGd1bmljaGFyIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9hdF9vZmZz
ZXQoQXRrVGV4dCogdGV4dCwgZ2kKIAogc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQqIHRleHQpCiB7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgUmVuZGVyT2JqZWN0KiBmb2N1c2Vk
Tm9kZSA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpLmVuZCgpLm5vZGUoKS0+cmVuZGVyZXIoKTsK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkT2JqZWN0ID0gY29yZU9iamVjdC0+ZG9j
dW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkTm9kZSk7CisKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Q7CisgICAgaW50IG9mZnNldDsKKyAgICBvYmpl
Y3RBbmRPZmZzZXRVbmlnbm9yZWQoZm9jdXNlZE9iamVjdCwgb2JqZWN0LCBvZmZzZXQsICFjb3Jl
T2JqZWN0LT5pc0xpbmsoKSk7CisKICAgICAvLyBUT0RPOiBWZXJpZnkgdGhpcyBmb3IgUlRMIHRl
eHQuCi0gICAgcmV0dXJuIGNvcmUodGV4dCktPnNlbGVjdGlvbigpLmVuZCgpLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpOworICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKIHN0YXRpYyBBdGtBdHRyaWJ1
dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKEF0a1RleHQq
IHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydF9vZmZzZXQsIGdpbnQqIGVuZF9vZmZzZXQp
CkBAIC0xNzI5LDQgKzE3MzcsMjMgQEAgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRf
Zm9jdXNlZF9lbGVtZW50KFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCiAgICAgcmV0dXJu
IGZvY3VzZWRPYmotPndyYXBwZXIoKTsKIH0KIAordm9pZCBvYmplY3RBbmRPZmZzZXRVbmlnbm9y
ZWQoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQWNjZXNzaWJpbGl0eU9iamVjdCom
IHJlYWxPYmplY3QsIGludCYgb2Zmc2V0LCBib29sIGlnbm9yZUxpbmtzKQoreworCisgICAgTm9k
ZSogZW5kTm9kZSA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihjb3Jl
T2JqZWN0KS0+cmVuZGVyZXIoKS0+bm9kZSgpOworICAgIGludCBlbmRPZmZzZXQgPSBjb3JlT2Jq
ZWN0LT5zZWxlY3Rpb24oKS5lbmQoKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKworICAgIHJl
YWxPYmplY3QgPSBjb3JlT2JqZWN0OworICAgIGlmIChyZWFsT2JqZWN0LT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkpCisgICAgICAgIHJlYWxPYmplY3QgPSByZWFsT2JqZWN0LT5wYXJlbnRPYmpl
Y3RVbmlnbm9yZWQoKTsKKworICAgIGlmIChpZ25vcmVMaW5rcyAmJiByZWFsT2JqZWN0LT5pc0xp
bmsoKSkKKyAgICAgICAgcmVhbE9iamVjdCA9IHJlYWxPYmplY3QtPnBhcmVudE9iamVjdFVuaWdu
b3JlZCgpOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4ocmVhbE9iamVjdCktPnJlbmRlcmVy
KCktPm5vZGUoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmFuZ2UtPnNldEVu
ZEJlZm9yZShlbmROb2RlLCBlYyk7CisgICAgb2Zmc2V0ID0gcmFuZ2UtPnRleHQoKS5sZW5ndGgo
KSArIGVuZE9mZnNldDsKK30KKwogI2VuZGlmIC8vIEhBVkUoQUNDRVNTSUJJTElUWSkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuaCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJBdGsuaAppbmRleCAwYjMxYjgyLi5mNTc4ZWZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKKysrIGIvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oCkBA
IC02MCw2ICs2MCw4IEBAIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZGV0YWNoIChXZWJLaXRBY2Nl
c3NpYmxlKiBhY2Nlc3NpYmxlKTsKIAogQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRf
Zm9jdXNlZF9lbGVtZW50KFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpOwogCit2b2lkIG9i
amVjdEFuZE9mZnNldFVuaWdub3JlZChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0LCBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiYgcmVhbE9iamVjdCwgaW50JiBv
ZmZzZXQsIGJvb2wgaWdub3JlTGlua3MpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLy8gQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGtfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9ndGsvU2Vs
ZWN0aW9uQ29udHJvbGxlckd0ay5jcHAKaW5kZXggMTY4YzI5Ny4uMzkwYTQ1NyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9lZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvZ3RrL1NlbGVjdGlvbkNvbnRyb2xsZXJHdGsuY3BwCkBAIC0yMCw2ICsy
MCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxl
ci5oIgogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCIKICNpbmNs
dWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKIApAQCAtMzIsMTAgKzMz
LDEyIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNl
bGVjdGlvbkNoYW5nZSgpCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkgJiYgbV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbGVjdGlvbi5l
bmQoKS5pc05vdE51bGwoKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIGZvY3VzZWROb2RlID0g
bV9zZWxlY3Rpb24uZW5kKCkubm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXhP
YmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkTm9kZSk7Ci0gICAgICAgIEF0a09iamVj
dCogd3JhcHBlciA9IGFjY2Vzc2liaWxpdHlPYmplY3QtPndyYXBwZXIoKTsKKyAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0OworICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICBv
YmplY3RBbmRPZmZzZXRVbmlnbm9yZWQoYWNjZXNzaWJpbGl0eU9iamVjdCwgb2JqZWN0LCBvZmZz
ZXQsIHRydWUpOworICAgICAgICBBdGtPYmplY3QqIHdyYXBwZXIgPSBvYmplY3QtPndyYXBwZXIo
KTsKICAgICAgICAgaWYgKEFUS19JU19URVhUKHdyYXBwZXIpKSB7Ci0gICAgICAgICAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUod3JhcHBlciwgInRleHQtY2FyZXQtbW92ZWQiLCBtX3NlbGVjdGlv
bi5lbmQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotCisgICAgICAgICAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod3JhcHBlciwgInRleHQtY2FyZXQtbW92ZWQiLCBvZmZzZXQp
OwogICAgICAgICAgICAgaWYgKG1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkKICAgICAgICAgICAgICAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod3JhcHBlciwgInRleHQtc2VsZWN0aW9uLWNoYW5nZWQi
KTsKICAgICAgICAgfQotLSAKMS42LjUKCg==
</data>
<flag name="review"
          id="27849"
          type_id="1"
          status="-"
          setter="xan.lopez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45896</attachid>
            <date>2010-01-05 09:27:37 -0800</date>
            <delta_ts>2010-01-11 03:34:12 -0800</delta_ts>
            <desc>proposed patch redux (comments added)</desc>
            <filename>30883-1a.patch</filename>
            <type>text/plain</type>
            <size>8505</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSAwZjE5ZTQ3OGUyM2NhNTQ0Y2IwN2IxYjg0Mzc1ODkzNmIyOGI2OTE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBUdWUsIDUgSmFuIDIwMTAgMTI6MjI6MDkgLTA1MDAKU3ViamVjdDogW1BBVENIXSAy
MDEwLTAxLTA1ICBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCiAgICAgICAgW0d0a10gSW1wbGVtZW50
IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CgogICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgogICAg
ICAgIChnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjdCk6CiAgICAgICAgKGdldFBhbmdvTGF5b3V0
Rm9yQXRrKToKICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCk6CiAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcDoKICAgICAg
ICAoQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmpl
Y3QpOgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAxNCArKysrKwogLi4uL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdGsuY3BwICAgfCAgICA0ICsrCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcCAgICAgICAgICB8ICAgNTQgKysrKysrKysrKysrKy0tLS0tLQogV2ViS2l0L2d0ay9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICsrKysKIFdlYktp
dC9ndGsvdGVzdHMvdGVzdGF0ay5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAtLQog
NSBmaWxlcyBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM4MjJl
NTIuLjk2ZWJiOTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDEtMDUgIEpvYW5tYXJpZSBEaWdncyAg
PGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMwODgzCisgICAgICAgIFtHdGtdIEltcGxlbWVudCBBdGtUZXh0IGZvciBIVE1MIGVsZW1l
bnRzIHdoaWNoIGNvbnRhaW4gdGV4dAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAoZ2V0SW50ZXJmYWNlTWFz
a0Zyb21PYmplY3QpOgorICAgICAgICAoZ2V0UGFuZ29MYXlvdXRGb3JBdGspOgorICAgICAgICAo
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09iamVjdCk6CisKIDIwMDktMTIt
MzEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0QXRrLmNwcAppbmRleCA3ZmQ1OWFjLi5iYzMxZmNlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCisr
KyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAK
QEAgLTQ3LDYgKzQ3LDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RQbGF0Zm9ybUluY2x1c2lvbiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JCiAgICAgaWYgKHBhcmVu
dC0+aXNQYXNzd29yZEZpZWxkKCkgfHwgcGFyZW50LT5pc1RleHRDb250cm9sKCkpCiAgICAgICAg
IHJldHVybiBJZ25vcmVPYmplY3Q7CiAKKyAgICAvLyBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhl
IHRleHQgc2hvdWxkIGltcGxlbWVudCBBdGtUZXh0IGl0c2VsZi4KKyAgICBpZiAocm9sZVZhbHVl
KCkgPT0gU3RhdGljVGV4dFJvbGUpCisgICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CisKICAg
ICByZXR1cm4gRGVmYXVsdEJlaGF2aW9yOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4
IDE2ZWE5NDguLmRjOTZmNGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC04MjAsOCArODIw
LDExIEBAIHN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChBdGtU
ZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCA9IGNvcmUodGV4dCk7CiAgICAgU3RyaW5nIHJldDsKICAgICB1bnNpZ25lZCBz
dGFydCA9IHN0YXJ0T2Zmc2V0OwotICAgIGlmIChlbmRPZmZzZXQgPT0gLTEpCisgICAgaWYgKGVu
ZE9mZnNldCA9PSAtMSkgewogICAgICAgICBlbmRPZmZzZXQgPSBjb3JlT2JqZWN0LT5zdHJpbmdW
YWx1ZSgpLmxlbmd0aCgpOworICAgICAgICBpZiAoIWVuZE9mZnNldCkKKyAgICAgICAgICAgIGVu
ZE9mZnNldCA9IGNvcmVPYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKKyAgICB9
CiAgICAgaW50IGxlbmd0aCA9IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0OwogCiAgICAgaWYgKGNv
cmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKQEAgLTkwMywxMSArOTA2LDkgQEAgc3RhdGljIFBh
bmdvTGF5b3V0KiBnZXRQYW5nb0xheW91dEZvckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAg
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIGFjY09iamVjdCA9IHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QqPihjb3JlT2JqZWN0KTsKICAgICBpZiAoIWFjY09iamVjdCkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVy
VGV4dChhY2NPYmplY3QtPnJlbmRlcmVyKCkpOwotICAgIGlmICghcmVuZGVyVGV4dCkKLSAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCB0aGUgbGF5b3V0IGFz
IGl0IGFwcGVhcnMgb24gdGhlIHNjcmVlbgorICAgIC8vIEZvciB0ZXh0IGNvbnRyb2xzLCB3ZSBj
YW4gZ2V0IHRoZSB0ZXh0IGxpbmUgYnkgbGluZS4KICAgICBpZiAoYWNjT2JqZWN0LT5pc1RleHRD
b250cm9sKCkpIHsKICAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IGFjY09iamVjdC0+dGV4
dExlbmd0aCgpOwogICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7CkBAIC05MjIsMTUgKzkyMywz
MiBAQCBzdGF0aWMgUGFuZ29MYXlvdXQqIGdldFBhbmdvTGF5b3V0Rm9yQXRrKEF0a1RleHQqIHRl
eHRPYmplY3QpCiAgICAgICAgICAgICByYW5nZSA9IGFjY09iamVjdC0+ZG9BWFJhbmdlRm9yTGlu
ZSgrK2xpbmVOdW1iZXIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgSW5saW5l
VGV4dEJveCogYm94ID0gcmVuZGVyVGV4dC0+Zmlyc3RUZXh0Qm94KCk7Ci0gICAgICAgIHdoaWxl
IChib3gpIHsKLSAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0gY29udmVydFVuaUNoYXJUb1VURjgo
cmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCksIGJveC0+
c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCB0
ZXh0KTsKLSAgICAgICAgICAgIC8vIE5ld2xpbmUgY2hhcnMgaW4gdGhlIHNvdXJjZSByZXN1bHQg
aW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28gY2hlY2sKLSAgICAgICAgICAgIC8vIGJlZm9yZSBh
ZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlvdXQuIFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzgu
Ci0gICAgICAgICAgICBpZiAoIWJveC0+bmV4dE9uTGluZUV4aXN0cygpKQorICAgICAgICAvLyBG
b3IgUmVuZGVyQmxvY2tzLCBwaWVjZSB0b2dldGhlciB0aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJU
ZXh0IG9iamVjdHMgdGhleSBjb250YWluLgorICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogb2Jq
ID0gYWNjT2JqZWN0LT5yZW5kZXJlcigpLT5maXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pc0JSKCkpIHsKICAgICAgICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAgICAgICAgIGJveCA9IGJv
eC0+bmV4dFRleHRCb3goKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChv
YmopOworICAgICAgICAgICAgLy8gQmUgc3VyZSB3ZSBoYXZlIGEgUmVuZGVyVGV4dCBvYmplY3Qg
d2UgY2FuIHdvcmsgd2l0aC4KKyAgICAgICAgICAgIGlmICghcmVuZGVyVGV4dCB8fCAhb2JqLT5p
c1RleHQoKSkgeworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBSZW5kZXJJbmxpbmVzIChhbmQg
YW55IG90aGVyIHNpbWlsaWFyIFJlbmRlck9iamVjdHMpLgorICAgICAgICAgICAgICAgIHJlbmRl
clRleHQgPSB0b1JlbmRlclRleHQob2JqLT5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgICAg
IGlmICghcmVuZGVyVGV4dCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIElubGluZVRleHRCb3gqIGJveCA9IHJlbmRlclRleHQtPmZp
cnN0VGV4dEJveCgpOworICAgICAgICAgICAgd2hpbGUgKGJveCkgeworICAgICAgICAgICAgICAg
IGdjaGFyKiB0ZXh0ID0gY29udmVydFVuaUNoYXJUb1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVy
cygpLCByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCksIGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7
CisgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgdGV4dCk7CisgICAgICAgICAg
ICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0
ZXh0IGJveGVzLCBzbyBjaGVjaworICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBu
ZXdsaW5lIGluIHRoZSBsYXlvdXQuIFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzguCisgICAgICAg
ICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgIlxuIik7CisgICAgICAgICAgICAgICAgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0x
NjEwLDExICsxNjI4LDEzIEBAIHN0YXRpYyBndWludDE2IGdldEludGVyZmFjZU1hc2tGcm9tT2Jq
ZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAKICAgICBpZiAocm9sZSA9PSBT
dGF0aWNUZXh0Um9sZSkKICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOwot
ICAgIGVsc2UgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpICYm
IGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9
IDEgPDwgV0FJX1RFWFQ7Ci0gICAgICAgIGlmICghY29yZU9iamVjdC0+aXNSZWFkT25seSgpKQot
ICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9FRElUQUJMRV9URVhUOwotICAg
IH0KKyAgICBlbHNlIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qo
KSkKKyAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICAg
ICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOworICAgICAgICAgICAgaWYgKCFjb3Jl
T2JqZWN0LT5pc1JlYWRPbmx5KCkpCisgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAx
IDw8IFdBSV9FRElUQUJMRV9URVhUOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihjb3JlT2JqZWN0KS0+cmVuZGVyZXIoKS0+Y2hpbGRy
ZW5JbmxpbmUoKSkKKyAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfVEVYVDsK
IAogICAgIC8vIEltYWdlCiAgICAgaWYgKGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNmZk
MmZkMy4uZWYzZDQxNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMi0zMCAgSm9hbm1hcmll
IERpZ2dzICA8am9hbm1hcmllLmRpZ2dzQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzA4ODMKKyAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0a1RleHQgZm9yIEhU
TUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CisKKyAgICAgICAgKiB0ZXN0cy90ZXN0YXRr
LmMKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXQpOgorICAgICAg
ICAodGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldF9mb3Jtcyk6CisgICAgICAgICh0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X25ld2xpbmVzKToKKwogMjAwOS0xMi0y
MCAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51
az4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCmluZGV4IGM1
ZjRkYjMuLjdmODdiZGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCisr
KyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCkBAIC0yMjEsOCArMjIxLDYgQEAgc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldF9mb3Jtcyh2b2lkKQogICAg
IGdfYXNzZXJ0KG9iaik7CiAgICAgb2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmosIDApOwogICAgIGdfYXNzZXJ0KG9iaik7Ci0gICAgb2JqID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmosIDApOwotICAgIGdfYXNzZXJ0KG9iaik7CiAKICAgICB0ZXh0
X29iaiA9IEFUS19URVhUKG9iaik7CiAgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dF9vYmop
KTsKQEAgLTI1NCw4ICsyNTIsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Rl
eHRfYXRfb2Zmc2V0KHZvaWQpCiAgICAgZ19hc3NlcnQob2JqKTsKICAgICBvYmogPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7CiAgICAgZ19hc3NlcnQob2JqKTsKLSAg
ICBvYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7Ci0gICAgZ19h
c3NlcnQob2JqKTsKIAogICAgIHRleHRfb2JqID0gQVRLX1RFWFQob2JqKTsKICAgICBnX2Fzc2Vy
dChBVEtfSVNfVEVYVCh0ZXh0X29iaikpOwpAQCAtMjg3LDggKzI4Myw2IEBAIHN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfbmV3bGluZXModm9pZCkKICAgICBn
X2Fzc2VydChvYmopOwogICAgIG9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqLCAwKTsKICAgICBnX2Fzc2VydChvYmopOwotICAgIG9iaiA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqLCAwKTsKLSAgICBnX2Fzc2VydChvYmopOwogCiAgICAgdGV4dF9v
YmogPSBBVEtfVEVYVChvYmopOwogICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRfb2JqKSk7
Ci0tIAoxLjYuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46218</attachid>
            <date>2010-01-09 13:49:36 -0800</date>
            <delta_ts>2010-01-11 04:03:46 -0800</delta_ts>
            <desc>caret offset and event adjustments - take 2</desc>
            <filename>30883-2a.patch</filename>
            <type>text/plain</type>
            <size>6853</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSAyZmIwNjMwMGFhNmEzZjJhNjc5M2E1NWYwMjFkNDYzOTM1NGIyMTYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBTYXQsIDkgSmFuIDIwMTAgMTY6MzY6MzkgLTA1MDAKU3ViamVjdDogW1BBVENIXSAy
MDEwLTAxLTA5ICBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCiAgICAgICAgW0d0a10gSW1wbGVtZW50
IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CgogICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAogICAgICAg
ICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgog
ICAgICAgIChvYmplY3RBbmRPZmZzZXRVbmlnbm9yZWQpOgogICAgICAgICh3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQpOgogICAgICAgICogZWRpdGluZy9ndGsvU2VsZWN0
aW9uQ29udHJvbGxlckd0ay5jcHA6CiAgICAgICAgKFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlm
eUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UpCgogICAgICAgIEFkanVzdCB0aGUgY2Fy
ZXQgb2Zmc2V0IGFuZCBvYmplY3Qgd2l0aCBmb2N1cyB0byByZWZsZWN0IHRoZQogICAgICAgIHVu
aWdub3JlZCBwYXJlbnQgb2YgdGhlIHN0YXRpYyB0ZXh0IG9iamVjdCB3aGljaCBjb250YWlucyB0
aGUKICAgICAgICBjYXJldC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgc3RhdGljIHRl
eHQgb2JqZWN0cyBhcmUKICAgICAgICBubyBsb25nZXIgYmVpbmcgZXhwb3NlZCB0byBBVHMuCi0t
LQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDE5ICsrKysrKysrKysrKwogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHAgICAgICAgICAgfCAgIDMyICsrKysrKysrKysrKysrKysrKystCiAuLi4vZ3RrL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQXRrLmggICAgICAgICAgICB8ICAgIDIgKwogV2ViQ29yZS9lZGl0
aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcCAgICAgfCAgICA5ICsrKystLQogNCBm
aWxlcyBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTczZWEyYi4u
YTk5MTZmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0wMS0wOSAgSm9hbm1hcmllIERpZ2dzICA8am9h
bm1hcmllLmRpZ2dzQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzA4ODMKKyAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMg
d2hpY2ggY29udGFpbiB0ZXh0CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAob2JqZWN0QW5kT2Zmc2V0
VW5pZ25vcmVkKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NhcmV0X29m
ZnNldCk6CisgICAgICAgICogZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5jcHA6
CisgICAgICAgIChTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2Vs
ZWN0aW9uQ2hhbmdlKQorCisgICAgICAgIEFkanVzdCB0aGUgY2FyZXQgb2Zmc2V0IGFuZCBvYmpl
Y3Qgd2l0aCBmb2N1cyB0byByZWZsZWN0IHRoZQorICAgICAgICB1bmlnbm9yZWQgcGFyZW50IG9m
IHRoZSBzdGF0aWMgdGV4dCBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhlCisgICAgICAgIGNhcmV0
LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBzdGF0aWMgdGV4dCBvYmplY3RzIGFyZQor
ICAgICAgICBubyBsb25nZXIgYmVpbmcgZXhwb3NlZCB0byBBVHMuCisKIDIwMTAtMDEtMDkgIERh
biBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtv
bGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IGRjOTZmNGEuLjRjZjM1
M2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC05ODAsOCArOTgwLDE4IEBAIHN0YXRpYyBn
dW5pY2hhciB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfYXRfb2Zmc2V0KEF0
a1RleHQqIHRleHQsIGdpCiAKIHN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X2NhcmV0X29mZnNldChBdGtUZXh0KiB0ZXh0KQogeworICAgIC8vIGNvcmVPYmplY3QgaXMgdGhl
IHVuaWdub3JlZCBvYmplY3Qgd2hvc2Ugb2Zmc2V0IHRoZSBjYWxsZXIgaXMgcmVxdWVzdGluZy4K
KyAgICAvLyBmb2N1c2VkT2JqZWN0IGlzIHRoZSBvYmplY3Qgd2l0aCB0aGUgY2FyZXQuIEl0IGlz
IGxpa2VseSBpZ25vcmVkIC0tIHVubGVzcyBpdCdzIGEgbGluay4KKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBSZW5kZXJPYmplY3QqIGZvY3Vz
ZWROb2RlID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCkuZW5kKCkubm9kZSgpLT5yZW5kZXJlcigp
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRPYmplY3QgPSBjb3JlT2JqZWN0LT5k
b2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWROb2RlKTsKKwor
ICAgIGludCBvZmZzZXQ7CisgICAgLy8gRG9uJ3QgaWdub3JlIGxpbmtzIGlmIHRoZSBvZmZzZXQg
aXMgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGxpbmsuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
b2JqZWN0ID0gb2JqZWN0QW5kT2Zmc2V0VW5pZ25vcmVkKGZvY3VzZWRPYmplY3QsIG9mZnNldCwg
IWNvcmVPYmplY3QtPmlzTGluaygpKTsKKwogICAgIC8vIFRPRE86IFZlcmlmeSB0aGlzIGZvciBS
VEwgdGV4dC4KLSAgICByZXR1cm4gY29yZSh0ZXh0KS0+c2VsZWN0aW9uKCkuZW5kKCkub2Zmc2V0
SW5Db250YWluZXJOb2RlKCk7CisgICAgcmV0dXJuIG9mZnNldDsKIH0KIAogc3RhdGljIEF0a0F0
dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoQXRr
VGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHN0YXJ0X29mZnNldCwgZ2ludCogZW5kX29m
ZnNldCkKQEAgLTE3MzMsNCArMTc0MywyNCBAQCBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9mb2N1c2VkX2VsZW1lbnQoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKICAgICBy
ZXR1cm4gZm9jdXNlZE9iai0+d3JhcHBlcigpOwogfQogCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3RBbmRPZmZzZXRVbmlnbm9yZWQoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwg
aW50JiBvZmZzZXQsIGJvb2wgaWdub3JlTGlua3MpCit7CisgICAgTm9kZSogZW5kTm9kZSA9IHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihjb3JlT2JqZWN0KS0+cmVuZGVy
ZXIoKS0+bm9kZSgpOworICAgIGludCBlbmRPZmZzZXQgPSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24o
KS5lbmQoKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHJlYWxPYmplY3QgPSBjb3JlT2JqZWN0OworICAgIGlmIChyZWFsT2JqZWN0LT5hY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgIHJlYWxPYmplY3QgPSByZWFsT2JqZWN0LT5wYXJl
bnRPYmplY3RVbmlnbm9yZWQoKTsKKworICAgIGlmIChpZ25vcmVMaW5rcyAmJiByZWFsT2JqZWN0
LT5pc0xpbmsoKSkKKyAgICAgICAgcmVhbE9iamVjdCA9IHJlYWxPYmplY3QtPnBhcmVudE9iamVj
dFVuaWdub3JlZCgpOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlT2ZDb250ZW50
cyhzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4ocmVhbE9iamVjdCktPnJl
bmRlcmVyKCktPm5vZGUoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmFuZ2Ut
PnNldEVuZEJlZm9yZShlbmROb2RlLCBlYyk7CisgICAgb2Zmc2V0ID0gcmFuZ2UtPnRleHQoKS5s
ZW5ndGgoKSArIGVuZE9mZnNldDsKKworICAgIHJldHVybiByZWFsT2JqZWN0OworfQorCiAjZW5k
aWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIGIvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oCmluZGV4IDBiMzFiODIu
LmU4Y2VjMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKQEAgLTYwLDYgKzYwLDggQEAgdm9pZCB3ZWJr
aXRfYWNjZXNzaWJsZV9kZXRhY2ggKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpOwogCiBB
dGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQoV2ViS2l0QWNj
ZXNzaWJsZSogYWNjZXNzaWJsZSk7CiAKK1dlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdEFuZE9mZnNldFVuaWdub3JlZChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0LCBpbnQmIG9mZnNldCwgYm9vbCBpZ25vcmVMaW5rcyk7CisKIEdfRU5EX0RFQ0xTCiAK
ICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0a19oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2VkaXRpbmcvZ3RrL1NlbGVjdGlvbkNvbnRyb2xsZXJHdGsuY3BwIGIvV2ViQ29yZS9l
ZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcAppbmRleCAxNjhjMjk3Li42YTMy
NThhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1NlbGVjdGlvbkNvbnRyb2xsZXJH
dGsuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5j
cHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
CkBAIC0zMiwxMCArMzMsMTIgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCkKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBtX3NlbGVjdGlvbi5zdGFydCgpLmlzTm90TnVsbCgpICYm
IG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCog
Zm9jdXNlZE5vZGUgPSBtX3NlbGVjdGlvbi5lbmQoKS5ub2RlKCktPnJlbmRlcmVyKCk7CiAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlPYmplY3QgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWROb2RlKTsKLSAg
ICAgICAgQXRrT2JqZWN0KiB3cmFwcGVyID0gYWNjZXNzaWJpbGl0eU9iamVjdC0+d3JhcHBlcigp
OworICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAvLyBBbHdheXMgcmVwb3J0IHRoZSBldmVu
dHMgdy5yLnQuIHRoZSBub24tbGlua2VkIHVuaWdub3JlZCBwYXJlbnQuIChpLmUuIGlnbm9yZUxp
bmtzID09IHRydWUpCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IG9iamVj
dEFuZE9mZnNldFVuaWdub3JlZChhY2Nlc3NpYmlsaXR5T2JqZWN0LCBvZmZzZXQsIHRydWUpOwor
ICAgICAgICBBdGtPYmplY3QqIHdyYXBwZXIgPSBvYmplY3QtPndyYXBwZXIoKTsKICAgICAgICAg
aWYgKEFUS19JU19URVhUKHdyYXBwZXIpKSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUod3JhcHBlciwgInRleHQtY2FyZXQtbW92ZWQiLCBtX3NlbGVjdGlvbi5lbmQoKS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotCisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUod3JhcHBlciwgInRleHQtY2FyZXQtbW92ZWQiLCBvZmZzZXQpOwogICAgICAgICAg
ICAgaWYgKG1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkKICAgICAgICAgICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUod3JhcHBlciwgInRleHQtc2VsZWN0aW9uLWNoYW5nZWQiKTsKICAgICAgICAg
fQotLSAKMS42LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46325</attachid>
            <date>2010-01-11 17:53:37 -0800</date>
            <delta_ts>2010-01-12 02:10:05 -0800</delta_ts>
            <desc>get rid of a needless variable</desc>
            <filename>30883-3.patch</filename>
            <type>text/plain</type>
            <size>2122</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSBhZGFlY2NhMjdhMmM5NGYwZGQ3NjA5ZDZhM2MxZDU3NjJjNWIxMzIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBNb24sIDExIEphbiAyMDEwIDIwOjUwOjE1IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0g
MjAxMC0wMS0xMSAgSm9hbm1hcmllIERpZ2dzICA8am9hbm1hcmllLmRpZ2dzQGdtYWlsLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDg4MwogICAgICAgIFtHdGtdIEltcGxlbWVu
dCBBdGtUZXh0IGZvciBIVE1MIGVsZW1lbnRzIHdoaWNoIGNvbnRhaW4gdGV4dAoKICAgICAgICBU
d2Vhay9jb3JyZWN0aW9uOiBFbGltaW5hdGUgYSBuZWVkbGVzcyB2YXJpYWJsZS4KCiAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAg
ICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NhcmV0X29mZnNldCk6Ci0tLQogV2Vi
Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICsr
KysrKysrKysrKwogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgICAg
ICAgICAgfCAgICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCAxZWRjMzI1Li5kODdkNDI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAxLTExICBK
b2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMDg4MworICAgICAgICBbR3RrXSBJbXBsZW1lbnQgQXRrVGV4
dCBmb3IgSFRNTCBlbGVtZW50cyB3aGljaCBjb250YWluIHRleHQKKworICAgICAgICBUd2Vhay9j
b3JyZWN0aW9uOiBFbGltaW5hdGUgYSBuZWVkbGVzcyB2YXJpYWJsZS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAgICAg
ICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NhcmV0X29mZnNldCk6CisKIDIwMTAtMDEt
MTEgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDUxMTg4OTEu
LjliNTM0ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC05ODgsNyArOTg4LDcgQEAgc3Rh
dGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQq
IHRleHQpCiAKICAgICBpbnQgb2Zmc2V0OwogICAgIC8vIERvbid0IGlnbm9yZSBsaW5rcyBpZiB0
aGUgb2Zmc2V0IGlzIGJlaW5nIHJlcXVlc3RlZCBmb3IgYSBsaW5rLgotICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdCA9IG9iamVjdEFuZE9mZnNldFVuaWdub3JlZChmb2N1c2VkT2JqZWN0
LCBvZmZzZXQsICFjb3JlT2JqZWN0LT5pc0xpbmsoKSk7CisgICAgb2JqZWN0QW5kT2Zmc2V0VW5p
Z25vcmVkKGZvY3VzZWRPYmplY3QsIG9mZnNldCwgIWNvcmVPYmplY3QtPmlzTGluaygpKTsKIAog
ICAgIC8vIFRPRE86IFZlcmlmeSB0aGlzIGZvciBSVEwgdGV4dC4KICAgICByZXR1cm4gb2Zmc2V0
OwotLSAKMS42LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46328</attachid>
            <date>2010-01-11 18:24:16 -0800</date>
            <delta_ts>2010-01-11 18:34:47 -0800</delta_ts>
            <desc>One more tweak....</desc>
            <filename>30883-4.patch</filename>
            <type>text/plain</type>
            <size>5472</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSAzYzllZDA4NjdmZGI3NTQ2MzAwZWU0NDhhY2E1NTg1N2YzYmY0MzExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBNb24sIDExIEphbiAyMDEwIDIxOjIwOjQxIC0wNTAwClN1YmplY3Q6IFtQQVRDSCAz
LzNdIDIwMTAtMDEtMTEgIEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5j
b20+CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA4ODMKICAgICAgICBbR3RrXSBJbXBs
ZW1lbnQgQXRrVGV4dCBmb3IgSFRNTCBlbGVtZW50cyB3aGljaCBjb250YWluIHRleHQKCiAgICAg
ICAgVHdlYWsvY29ycmVjdGlvbiB0byBob3cgb25lIG9mIHRoZSBhcmd1bWVudHMgaXMgYmVpbmcg
cGFzc2VkLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmgKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmNwcDoKICAgICAgICAob2JqZWN0QW5kT2Zmc2V0VW5pZ25vcmVkKToKICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KToKICAgICAgICAq
IGVkaXRpbmcvZ3RrL1NlbGVjdGlvbkNvbnRyb2xsZXJHdGsuY3BwOgogICAgICAgIChTZWxlY3Rp
b25Db250cm9sbGVyOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKQotLS0K
IFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx
NiArKysrKysrKysrKysrKysrCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcCAgICAgICAgICB8ICAgIDYgKysrLS0tCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmggICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZWRpdGluZy9ndGsvU2Vs
ZWN0aW9uQ29udHJvbGxlckd0ay5jcHAgICAgIHwgICAgMiArLQogNCBmaWxlcyBjaGFuZ2VkLCAy
MSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg3ZDQyNy4uZTBkYzEyYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTUsNiAr
NSwyMiBAQAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzA4ODMKICAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMg
d2hpY2ggY29udGFpbiB0ZXh0CiAKKyAgICAgICAgVHdlYWsvY29ycmVjdGlvbiB0byBob3cgb25l
IG9mIHRoZSBhcmd1bWVudHMgaXMgYmVpbmcgcGFzc2VkLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAg
KG9iamVjdEFuZE9mZnNldFVuaWdub3JlZCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF9jYXJldF9vZmZzZXQpOgorICAgICAgICAqIGVkaXRpbmcvZ3RrL1NlbGVjdGlvbkNv
bnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNj
ZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSkKKworMjAxMC0wMS0xMSAgSm9hbm1hcmllIERp
Z2dzICA8am9hbm1hcmllLmRpZ2dzQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzA4ODMKKyAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0a1RleHQgZm9yIEhUTUwg
ZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CisKICAgICAgICAgVHdlYWsvY29ycmVjdGlvbjog
RWxpbWluYXRlIGEgbmVlZGxlc3MgdmFyaWFibGUuCiAKICAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBi
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsu
Y3BwCmluZGV4IDliNTM0ZTYuLjEzZmZlNzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC05
ODgsNyArOTg4LDcgQEAgc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2Fy
ZXRfb2Zmc2V0KEF0a1RleHQqIHRleHQpCiAKICAgICBpbnQgb2Zmc2V0OwogICAgIC8vIERvbid0
IGlnbm9yZSBsaW5rcyBpZiB0aGUgb2Zmc2V0IGlzIGJlaW5nIHJlcXVlc3RlZCBmb3IgYSBsaW5r
LgotICAgIG9iamVjdEFuZE9mZnNldFVuaWdub3JlZChmb2N1c2VkT2JqZWN0LCBvZmZzZXQsICFj
b3JlT2JqZWN0LT5pc0xpbmsoKSk7CisgICAgb2JqZWN0QW5kT2Zmc2V0VW5pZ25vcmVkKGZvY3Vz
ZWRPYmplY3QsICZvZmZzZXQsICFjb3JlT2JqZWN0LT5pc0xpbmsoKSk7CiAKICAgICAvLyBUT0RP
OiBWZXJpZnkgdGhpcyBmb3IgUlRMIHRleHQuCiAgICAgcmV0dXJuIG9mZnNldDsKQEAgLTE3NDMs
NyArMTc0Myw3IEBAIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxl
bWVudChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQogICAgIHJldHVybiBmb2N1c2VkT2Jq
LT53cmFwcGVyKCk7CiB9CiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdEFuZE9mZnNldFVu
aWdub3JlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBpbnQmIG9mZnNldCwgYm9v
bCBpZ25vcmVMaW5rcykKK0FjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdEFuZE9mZnNldFVuaWdu
b3JlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBpbnQqIG9mZnNldCwgYm9vbCBp
Z25vcmVMaW5rcykKIHsKICAgICBOb2RlKiBlbmROb2RlID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCo+KGNvcmVPYmplY3QpLT5yZW5kZXJlcigpLT5ub2RlKCk7CiAgICAg
aW50IGVuZE9mZnNldCA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpLmVuZCgpLmNvbXB1dGVPZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKTsKQEAgLTE3NTgsNyArMTc1OCw3IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdEFuZE9mZnNldFVuaWdub3JlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0LCBpCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4ocmVhbE9iamVjdCktPnJlbmRlcmVy
KCktPm5vZGUoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgcmFuZ2UtPnNldEVu
ZEJlZm9yZShlbmROb2RlLCBlYyk7Ci0gICAgb2Zmc2V0ID0gcmFuZ2UtPnRleHQoKS5sZW5ndGgo
KSArIGVuZE9mZnNldDsKKyAgICAqb2Zmc2V0ID0gcmFuZ2UtPnRleHQoKS5sZW5ndGgoKSArIGVu
ZE9mZnNldDsKIAogICAgIHJldHVybiByZWFsT2JqZWN0OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIGIvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oCmlu
ZGV4IGU4Y2VjMDguLjUwYzc5YjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2ggKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vz
c2libGUpOwogCiBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1l
bnQoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSk7CiAKLVdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdEFuZE9mZnNldFVuaWdub3JlZChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0LCBpbnQmIG9mZnNldCwgYm9vbCBpZ25vcmVMaW5rcyk7CitXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RBbmRPZmZzZXRVbmlnbm9yZWQoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgaW50KiBvZmZzZXQsIGJvb2wgaWdu
b3JlTGlua3MpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
Z3RrL1NlbGVjdGlvbkNvbnRyb2xsZXJHdGsuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL2d0ay9TZWxl
Y3Rpb25Db250cm9sbGVyR3RrLmNwcAppbmRleCA2YTMyNThhLi5iNDcyMjU3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1NlbGVjdGlvbkNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dl
YkNvcmUvZWRpdGluZy9ndGsvU2VsZWN0aW9uQ29udHJvbGxlckd0ay5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2Vs
ZWN0aW9uQ2hhbmdlKCkKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0
eU9iamVjdCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoZm9jdXNlZE5vZGUpOwogICAgICAgICBpbnQgb2Zmc2V0OwogICAgICAgICAvLyBBbHdheXMg
cmVwb3J0IHRoZSBldmVudHMgdy5yLnQuIHRoZSBub24tbGlua2VkIHVuaWdub3JlZCBwYXJlbnQu
IChpLmUuIGlnbm9yZUxpbmtzID09IHRydWUpCi0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iamVjdCA9IG9iamVjdEFuZE9mZnNldFVuaWdub3JlZChhY2Nlc3NpYmlsaXR5T2JqZWN0LCBv
ZmZzZXQsIHRydWUpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBvYmpl
Y3RBbmRPZmZzZXRVbmlnbm9yZWQoYWNjZXNzaWJpbGl0eU9iamVjdCwgJm9mZnNldCwgdHJ1ZSk7
CiAgICAgICAgIEF0a09iamVjdCogd3JhcHBlciA9IG9iamVjdC0+d3JhcHBlcigpOwogICAgICAg
ICBpZiAoQVRLX0lTX1RFWFQod3JhcHBlcikpIHsKICAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZSh3cmFwcGVyLCAidGV4dC1jYXJldC1tb3ZlZCIsIG9mZnNldCk7Ci0tIAoxLjYuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46791</attachid>
            <date>2010-01-17 23:18:41 -0800</date>
            <delta_ts>2010-01-17 23:37:05 -0800</delta_ts>
            <desc>Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests, style compliance changes....</desc>
            <filename>30883-5.patch</filename>
            <type>text/plain</type>
            <size>37200</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSA3ZGI1ZGJlOTg4MDkyOThkMmQzZDg3YzRhNTU3NzFmMzlmYTM1Nzg5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBTdW4sIDE3IEphbiAyMDEwIDIyOjA3OjIzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0g
MjAxMC0wMS0xOCBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCiAgICAgICAgW0d0a10gSW1wbGVtZW50
IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CgogICAgICAgIE1v
dmVzIHRoZSB0ZXh0IGFzc2VtYmxpbmcgZnVuY3Rpb25hbGl0eSBmcm9tIGdldFBhbmdvTGF5b3V0
Rm9yQXRrIHRvCiAgICAgICAgdGV4dEZvck9iamVjdCwgd2hpY2ggd2Via2l0X2FjY2Vzc2libGVf
dGV4dF9nZXRfdGV4dCBub3cgZmFsbHMgYmFjayBvbgogICAgICAgIHdoZW4gaXQgY29tZXMgdXAg
ZW1wdHkuCgogICAgICAgIEFkZHMgYSBjaGVjayBpbiB0ZXh0Rm9yT2JqZWN0IHNvIHRoYXQgd2Ug
ZG9uJ3QgZG91YmxlLWFkZCBuZXdsaW5lcwogICAgICAgIHdoZW4gd2UgaGF2ZSBhIEJSLgoKICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgK
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcDoKICAgICAgICAodGV4dEZvck9iamVjdCk6CiAgICAgICAgKGdldFBhbmdvTGF5b3V0Rm9y
QXRrKToKICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCk6CgoyMDEwLTAx
LTE4ICBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgoKICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCiAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0a1Rl
eHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CgogICAgICAgIEFkZHMgdHdv
IG5ld3MgdGVzdHMuIEFsc28gKGhvcGVmdWxseSkgYnJpbmdzIHRoZSByZXN0IGludG8gY29tcGxp
YW5jZQogICAgICAgIHdpdGggdGhlIHN0eWxlIGd1aWRlbGluZXMuCgogICAgICAgICogdGVzdHMv
dGVzdGF0ay5jCiAgICAgICAgKGJhaWxPdXQpOgogICAgICAgICh0ZXN0R2V0VGV4dEZ1bmN0aW9u
KToKICAgICAgICAocnVuR2V0VGV4dFRlc3RzKToKICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRl
eHRBdE9mZnNldEZvcm1zKToKICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldCk6
CiAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXROZXdsaW5lcyk6CiAgICAgICAg
KHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRUZXh0YXJlYSk6CiAgICAgICAgKHRlc3RXZWJr
aXRBdGtHZXRUZXh0QXRPZmZzZXRUZXh0SW5wdXQpOgogICAgICAgICh0ZXN0V2Via2l0QXRrR2V0
VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSk6CiAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRU
ZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUpOgogICAgICAgIChtYWluKToKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKysK
IC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwICAgICAgICAgIHwgIDEy
NCArKysrKy0tLS0KIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCAgICAg
ICAgICAgIHwgICAgMyArCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMjMgKysKIFdlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDMwOSArKysrKysrKysrKysrLS0tLS0tLQogNSBmaWxlcyBjaGFu
Z2VkLCAzMTkgaW5zZXJ0aW9ucygrKSwgMTYwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM4NTBjZi4uYmExZTAz
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMyBAQAorMjAxMC0wMS0xOCBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUu
ZGlnZ3NAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDg4Mwor
ICAgICAgICBbR3RrXSBJbXBsZW1lbnQgQXRrVGV4dCBmb3IgSFRNTCBlbGVtZW50cyB3aGljaCBj
b250YWluIHRleHQKKworICAgICAgICBNb3ZlcyB0aGUgdGV4dCBhc3NlbWJsaW5nIGZ1bmN0aW9u
YWxpdHkgZnJvbSBnZXRQYW5nb0xheW91dEZvckF0ayB0bworICAgICAgICB0ZXh0Rm9yT2JqZWN0
LCB3aGljaCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0IG5vdyBmYWxscyBiYWNrIG9u
CisgICAgICAgIHdoZW4gaXQgY29tZXMgdXAgZW1wdHkuCisKKyAgICAgICAgQWRkcyBhIGNoZWNr
IGluIHRleHRGb3JPYmplY3Qgc28gdGhhdCB3ZSBkb24ndCBkb3VibGUtYWRkIG5ld2xpbmVzCisg
ICAgICAgIHdoZW4gd2UgaGF2ZSBhIEJSLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHRleHRGb3JP
YmplY3QpOgorICAgICAgICAoZ2V0UGFuZ29MYXlvdXRGb3JBdGspOgorICAgICAgICAod2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCk6CisKIDIwMTAtMDEtMTcgIE1hcnRpbiBSb2JpbnNv
biAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCBkMWI0
NjNjLi4zYjE2YTFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtODMyLDYgKzgzMiwxNCBA
QCBzdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCog
dGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZwogICAgIGVsc2UKICAgICAgICAgcmV0ID0gY29yZU9i
amVjdC0+dGV4dFVuZGVyRWxlbWVudCgpLnN1YnN0cmluZyhzdGFydCwgbGVuZ3RoKTsKIAorICAg
IGlmICghcmV0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBhdCBsZWFz
dCB3aXRoIGFub255bW91cyBSZW5kZXJCbG9ja3MgKGUuZy4gYm9keSB0ZXh0IGFtb25nc3QgcGFy
YWdyYXBocykKKyAgICAgICAgcmV0ID0gU3RyaW5nKHRleHRGb3JPYmplY3Qoc3RhdGljX2Nhc3Q8
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KGNvcmVPYmplY3QpKSk7CisgICAgICAgIGlmICgh
ZW5kT2Zmc2V0KQorICAgICAgICAgICAgZW5kT2Zmc2V0ID0gcmV0Lmxlbmd0aCgpOworICAgICAg
ICByZXQgPSByZXQuc3Vic3RyaW5nKHN0YXJ0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7Cisg
ICAgfQorCiAgICAgcmV0dXJuIGdfc3RyZHVwKHJldC51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAt
OTAxLDU4ICs5MDksMTIgQEAgc3RhdGljIFBhbmdvTGF5b3V0KiBnZXRQYW5nb0xheW91dEZvckF0
ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIGlmICghd2ViVmlldykKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7Ci0KICAgICBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Kj4oY29yZU9iamVjdCk7CiAgICAgaWYgKCFhY2NPYmplY3QpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggdGhlIGxheW91dCBhcyBp
dCBhcHBlYXJzIG9uIHRoZSBzY3JlZW4KLSAgICAvLyBGb3IgdGV4dCBjb250cm9scywgd2UgY2Fu
IGdldCB0aGUgdGV4dCBsaW5lIGJ5IGxpbmUuCi0gICAgaWYgKGFjY09iamVjdC0+aXNUZXh0Q29u
dHJvbCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBhY2NPYmplY3QtPnRleHRM
ZW5ndGgoKTsKLSAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICBQbGFpblRleHRS
YW5nZSByYW5nZSA9IGFjY09iamVjdC0+ZG9BWFJhbmdlRm9yTGluZShsaW5lTnVtYmVyKTsKLSAg
ICAgICAgd2hpbGUgKHJhbmdlLmxlbmd0aCkgewotICAgICAgICAgICAgLy8gV2hlbiBhIGxpbmUg
b2YgdGV4dCB3cmFwcyBpbiBhIHRleHQgYXJlYSwgdGhlIGZpbmFsIHNwYWNlIGlzIHJlbW92ZWQu
Ci0gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPCB0ZXh0TGVuZ3Ro
KQotICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCAtPSAxOwotICAgICAgICAgICAgU3RyaW5n
IGxpbmVUZXh0ID0gYWNjT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocmFuZ2UpOwotICAgICAg
ICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgbGluZVRleHQudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAgICAgICAgIHJhbmdlID0g
YWNjT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51bWJlcik7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBGb3IgUmVuZGVyQmxvY2tzLCBwaWVjZSB0b2dldGhlciB0
aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0IG9iamVjdHMgdGhleSBjb250YWluLgotICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogb2JqID0gYWNjT2JqZWN0LT5yZW5kZXJlcigpLT5maXJzdENo
aWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAo
b2JqLT5pc0JSKCkpIHsKLSAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChvYmopOwotICAgICAgICAg
ICAgLy8gQmUgc3VyZSB3ZSBoYXZlIGEgUmVuZGVyVGV4dCBvYmplY3Qgd2UgY2FuIHdvcmsgd2l0
aC4KLSAgICAgICAgICAgIGlmICghcmVuZGVyVGV4dCB8fCAhb2JqLT5pc1RleHQoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEhhbmRsZSBSZW5kZXJJbmxpbmVzIChhbmQgYW55IG90aGVyIHNpbWls
aWFyIFJlbmRlck9iamVjdHMpLgotICAgICAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRl
clRleHQob2JqLT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGV4
dCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIElubGluZVRleHRCb3gqIGJveCA9IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpOwot
ICAgICAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0g
Y29udmVydFVuaUNoYXJUb1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0
LT50ZXh0TGVuZ3RoKCksIGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAgICAg
ICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgdGV4dCk7Ci0gICAgICAgICAgICAgICAgLy8gTmV3bGlu
ZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBj
aGVjawotICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBs
YXlvdXQuIFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzguCi0gICAgICAgICAgICAgICAgaWYgKCFi
b3gtPm5leHRPbkxpbmVFeGlzdHMoKSkKLSAgICAgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBw
ZW5kKHN0ciwgIlxuIik7Ci0gICAgICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0VGV4dEJveCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgUGFuZ29MYXlvdXQqIGxh
eW91dCA9IGd0a193aWRnZXRfY3JlYXRlX3BhbmdvX2xheW91dChzdGF0aWNfY2FzdDxHdGtXaWRn
ZXQqPih3ZWJWaWV3KSwgZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKSk7CisgICAgUGFuZ29MYXlv
dXQqIGxheW91dCA9IGd0a193aWRnZXRfY3JlYXRlX3BhbmdvX2xheW91dChzdGF0aWNfY2FzdDxH
dGtXaWRnZXQqPih3ZWJWaWV3KSwgdGV4dEZvck9iamVjdChhY2NPYmplY3QpKTsKICAgICBnX29i
amVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHRleHRPYmplY3QpLCAid2Via2l0LWFjY2Vzc2li
bGUtcGFuZ28tbGF5b3V0IiwgbGF5b3V0LCBnX29iamVjdF91bnJlZik7CiAgICAgcmV0dXJuIGxh
eW91dDsKIH0KQEAgLTE3NDcsNiArMTcwOSw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dEFuZE9mZnNldFVuaWdub3JlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBpCiB7
CiAgICAgTm9kZSogZW5kTm9kZSA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QqPihjb3JlT2JqZWN0KS0+cmVuZGVyZXIoKS0+bm9kZSgpOwogICAgIGludCBlbmRPZmZzZXQg
PSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKS5lbmQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCk7CisgICAgLy8gSW5kaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBib2d1cyBoYXMgdHJhbnNw
aXJlZC4KKyAgICBvZmZzZXQgPSAtMTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJlYWxP
YmplY3QgPSBjb3JlT2JqZWN0OwogICAgIGlmIChyZWFsT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpCkBAIC0xNzU1LDEyICsxNzE5LDY4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdEFuZE9mZnNldFVuaWdub3JlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBp
CiAgICAgaWYgKGlnbm9yZUxpbmtzICYmIHJlYWxPYmplY3QtPmlzTGluaygpKQogICAgICAgICBy
ZWFsT2JqZWN0ID0gcmVhbE9iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QqPihyZWFsT2JqZWN0KS0+cmVuZGVyZXIoKS0+bm9kZSgpKTsKLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICByYW5nZS0+c2V0RW5kQmVmb3JlKGVuZE5vZGUs
IGVjKTsKLSAgICBvZmZzZXQgPSByYW5nZS0+dGV4dCgpLmxlbmd0aCgpICsgZW5kT2Zmc2V0Owot
CisgICAgTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qq
PihyZWFsT2JqZWN0KS0+cmVuZGVyZXIoKS0+bm9kZSgpOworICAgIGlmIChub2RlKSB7CisgICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZU9mQ29udGVudHMobm9kZSk7CisgICAgICAg
IGlmIChyYW5nZS0+b3duZXJEb2N1bWVudCgpID09IG5vZGUtPmRvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEJl
Zm9yZShlbmROb2RlLCBlYyk7CisgICAgICAgICAgICBpZiAocmFuZ2UtPmJvdW5kYXJ5UG9pbnRz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gcmFuZ2UtPnRleHQoKS5sZW5ndGgo
KSArIGVuZE9mZnNldDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gcmVhbE9iamVjdDsK
IH0KIAorc3RhdGljIGdjaGFyKiB0ZXh0Rm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QqIGFjY09iamVjdCkKK3sKKyAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7CisK
KyAgICAvLyBGb3IgdGV4dCBjb250cm9scywgd2UgY2FuIGdldCB0aGUgdGV4dCBsaW5lIGJ5IGxp
bmUuCisgICAgaWYgKGFjY09iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CisgICAgICAgIHVuc2ln
bmVkIHRleHRMZW5ndGggPSBhY2NPYmplY3QtPnRleHRMZW5ndGgoKTsKKyAgICAgICAgaW50IGxp
bmVOdW1iZXIgPSAwOworICAgICAgICBQbGFpblRleHRSYW5nZSByYW5nZSA9IGFjY09iamVjdC0+
ZG9BWFJhbmdlRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgd2hpbGUgKHJhbmdlLmxlbmd0
aCkgeworICAgICAgICAgICAgLy8gV2hlbiBhIGxpbmUgb2YgdGV4dCB3cmFwcyBpbiBhIHRleHQg
YXJlYSwgdGhlIGZpbmFsIHNwYWNlIGlzIHJlbW92ZWQuCisgICAgICAgICAgICBpZiAocmFuZ2Uu
c3RhcnQgKyByYW5nZS5sZW5ndGggPCB0ZXh0TGVuZ3RoKQorICAgICAgICAgICAgICAgIHJhbmdl
Lmxlbmd0aCAtPSAxOworICAgICAgICAgICAgU3RyaW5nIGxpbmVUZXh0ID0gYWNjT2JqZWN0LT5k
b0FYU3RyaW5nRm9yUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0
ciwgbGluZVRleHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQo
c3RyLCAiXG4iKTsKKyAgICAgICAgICAgIHJhbmdlID0gYWNjT2JqZWN0LT5kb0FYUmFuZ2VGb3JM
aW5lKCsrbGluZU51bWJlcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBG
b3IgUmVuZGVyQmxvY2tzLCBwaWVjZSB0b2dldGhlciB0aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJU
ZXh0IG9iamVjdHMgdGhleSBjb250YWluLgorICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogb2Jq
ID0gYWNjT2JqZWN0LT5yZW5kZXJlcigpLT5maXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pc0JSKCkpIHsKKyAgICAgICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4
dCA9IHRvUmVuZGVyVGV4dChvYmopOworICAgICAgICAgICAgLy8gQmUgc3VyZSB3ZSBoYXZlIGEg
UmVuZGVyVGV4dCBvYmplY3Qgd2UgY2FuIHdvcmsgd2l0aC4KKyAgICAgICAgICAgIGlmICghcmVu
ZGVyVGV4dCB8fCAhb2JqLT5pc1RleHQoKSkgeworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBS
ZW5kZXJJbmxpbmVzIChhbmQgYW55IG90aGVyIHNpbWlsaWFyIFJlbmRlck9iamVjdHMpLgorICAg
ICAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqLT5maXJzdENoaWxkKCkp
OworICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGV4dCkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElubGluZVRleHRCb3gqIGJv
eCA9IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpOworICAgICAgICAgICAgd2hpbGUgKGJveCkg
eworICAgICAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0gY29udmVydFVuaUNoYXJUb1VURjgocmVu
ZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCksIGJveC0+c3Rh
cnQoKSwgYm94LT5lbmQoKSk7CisgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwg
dGV4dCk7CisgICAgICAgICAgICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJl
c3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBjaGVjaworICAgICAgICAgICAgICAgIC8v
IGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlvdXQuIFNlZSBidWcgMjU0MTUgY29t
bWVudCAjNzguCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc2libGluZyBpcyBhIEJS
LCB3ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3ZSBleGFtaW5lIHRoYXQgY2hpbGQuCisgICAg
ICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAmJiAoIW9iai0+bmV4dFNp
YmxpbmcoKSB8fCAhb2JqLT5uZXh0U2libGluZygpLT5pc0JSKCkpKQorICAgICAgICAgICAgICAg
ICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBib3ggPSBi
b3gtPm5leHRUZXh0Qm94KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Cit9CisKICNlbmRpZiAvLyBIQVZFKEFD
Q0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmggYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKaW5kZXggZThjZWMwOC4uMWMwZjRmYiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckF0ay5oCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuaApAQCAtMjUsNiArMjUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKKyAgICBjbGFzcyBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OwogfQogCiBHX0JFR0lOX0RFQ0xTCkBAIC02Miw2ICs2Myw4IEBAIEF0a09i
amVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXZWJLaXRBY2Nlc3Np
YmxlKiBhY2Nlc3NpYmxlKTsKIAogV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0
QW5kT2Zmc2V0VW5pZ25vcmVkKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QsIGludCYgb2Zmc2V0LCBib29sIGlnbm9yZUxpbmtzKTsKIAorc3RhdGljIGdjaGFyKiB0ZXh0
Rm9yT2JqZWN0KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIGFjY09iamVjdCk7
CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
a19oCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IGM0MThlM2EuLjBhMmFiZmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDEt
MTggIEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCisgICAgICAgIFtHdGtdIEltcGxlbWVudCBB
dGtUZXh0IGZvciBIVE1MIGVsZW1lbnRzIHdoaWNoIGNvbnRhaW4gdGV4dAorCisgICAgICAgIEFk
ZHMgdHdvIG5ld3MgdGVzdHMuIEFsc28gKGhvcGVmdWxseSkgYnJpbmdzIHRoZSByZXN0IGludG8g
Y29tcGxpYW5jZQorICAgICAgICB3aXRoIHRoZSBzdHlsZSBndWlkZWxpbmVzLgorCisgICAgICAg
ICogdGVzdHMvdGVzdGF0ay5jCisgICAgICAgIChiYWlsT3V0KToKKyAgICAgICAgKHRlc3RHZXRU
ZXh0RnVuY3Rpb24pOgorICAgICAgICAocnVuR2V0VGV4dFRlc3RzKToKKyAgICAgICAgKHRlc3RX
ZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRGb3Jtcyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0
VGV4dEF0T2Zmc2V0KToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXROZXds
aW5lcyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0VGV4dGFyZWEpOgor
ICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFRleHRJbnB1dCk6CisgICAgICAg
ICh0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSk6CisgICAgICAg
ICh0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keU1vZGVyYXRlKToKKyAgICAg
ICAgKG1haW4pOgorCiAyMDEwLTAxLTE1ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKaW5k
ZXggN2Y4N2JkYy4uZDA1N2M4YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRr
LmMKKysrIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKQEAgLTI2LDE1ICsyNiwxOSBAQAog
CiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDE2LCAwKSAmJiBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNCwgMCkKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gIjxodG1sPjxib2R5Pjxw
PlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIEFuZCB0aGlzIHRo
ZSB0aGlyZC48L3A+PC9ib2R5PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnRlbnRz
ID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2Vu
dGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9ib2R5PjwvaHRtbD4iOwogCi1zdGF0aWMg
Y29uc3QgY2hhciogY29udGVudHNXaXRoTmV3bGluZXMgPSAiPGh0bWw+PGJvZHk+PHA+VGhpcyBp
cyBhIHRlc3QuIFxuXG5UaGlzXG4gaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhl
IHRoaXJkLjwvcD48L2JvZHk+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhciAqY29udGVudHNX
aXRoTmV3bGluZXMgPSAiPGh0bWw+PGJvZHk+PHA+VGhpcyBpcyBhIHRlc3QuIFxuXG5UaGlzXG4g
aXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLjwvcD48L2JvZHk+PC9o
dG1sPiI7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c0luVGV4dGFyZWEgPSAiPGh0bWw+
PGJvZHk+PHRleHRhcmVhIGNvbHM9JzgwJz5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vj
b25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuPC90ZXh0YXJlYT48L2JvZHk+PC9odG1s
PiI7CitzdGF0aWMgY29uc3QgY2hhciAqY29udGVudHNJblRleHRhcmVhID0gIjxodG1sPjxib2R5
Pjx0ZXh0YXJlYSBjb2xzPSc4MCc+VGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgdGhlIHNlY29uZCBz
ZW50ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLjwvdGV4dGFyZWE+PC9ib2R5PjwvaHRtbD4iOwog
Ci1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHNJblRleHRJbnB1dCA9ICI8aHRtbD48Ym9keT48
aW5wdXQgdHlwZT0ndGV4dCcgc2l6ZT0nODAnIHZhbHVlPSdUaGlzIGlzIGEgdGVzdC4gVGhpcyBp
cyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuJy8+PC9ib2R5PjwvaHRt
bD4iOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnRlbnRzSW5UZXh0SW5wdXQgPSAiPGh0bWw+PGJv
ZHk+PGlucHV0IHR5cGU9J3RleHQnIHNpemU9JzgwJyB2YWx1ZT0nVGhpcyBpcyBhIHRlc3QuIFRo
aXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLicvPjwvYm9keT48
L2h0bWw+IjsKIAotc3RhdGljIGdib29sZWFuIGJhaWxfb3V0KEdNYWluTG9vcCogbG9vcCkKK3N0
YXRpYyBjb25zdCBjaGFyICpjb250ZW50c0luUGFyYWdyYXBoQW5kQm9keVNpbXBsZSA9ICI8aHRt
bD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+SGVsbG8gd29ybGQuPC9ib2R5PjwvaHRtbD4i
OworCitzdGF0aWMgY29uc3QgY2hhciAqY29udGVudHNJblBhcmFncmFwaEFuZEJvZHlNb2RlcmF0
ZSA9ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+SGVsbG8gd29ybGQuPGJyIC8+
PGZvbnQgY29sb3I9JyMwMGNjMDAnPlRoaXMgc2VudGVuY2UgaXMgZ3JlZW4uPC9mb250PjxiciAv
PlRoaXMgb25lIGlzIG5vdC48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBnYm9vbGVhbiBiYWls
T3V0KEdNYWluTG9vcCogbG9vcCkKIHsKICAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhs
b29wKSkKICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKQEAgLTQ0LDE2NyArNDgsMTY3
IEBAIHN0YXRpYyBnYm9vbGVhbiBiYWlsX291dChHTWFpbkxvb3AqIGxvb3ApCiAKIHR5cGVkZWYg
Z2NoYXIqICgqQXRrR2V0VGV4dEZ1bmN0aW9uKSAoQXRrVGV4dCosIGdpbnQsIEF0a1RleHRCb3Vu
ZGFyeSwgZ2ludCosIGdpbnQqKTsKIAotc3RhdGljIHZvaWQgdGVzdF9nZXRfdGV4dF9mdW5jdGlv
bihBdGtUZXh0KiB0ZXh0X29iaiwgQXRrR2V0VGV4dEZ1bmN0aW9uIGZuLCBBdGtUZXh0Qm91bmRh
cnkgYm91bmRhcnksIGdpbnQgb2Zmc2V0LCBjb25zdCBjaGFyKiB0ZXh0X3Jlc3VsdCwgZ2ludCBz
dGFydF9vZmZzZXRfcmVzdWx0LCBnaW50IGVuZF9vZmZzZXRfcmVzdWx0KQorc3RhdGljIHZvaWQg
dGVzdEdldFRleHRGdW5jdGlvbihBdGtUZXh0ICp0ZXh0T2JqLCBBdGtHZXRUZXh0RnVuY3Rpb24g
Zm4sIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeSwgZ2ludCBvZmZzZXQsIGNvbnN0IGNoYXIgKnRl
eHRSZXN1bHQsIGdpbnQgc3RhcnRPZmZzZXRSZXN1bHQsIGdpbnQgZW5kT2Zmc2V0UmVzdWx0KQog
ewotICAgIGdpbnQgc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0OwotICAgIGNoYXIqIHRleHQ7Cisg
ICAgZ2ludCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0OworICAgIGNoYXIgKnRleHQ7CiAKLSAgICB0
ZXh0ID0gZm4odGV4dF9vYmosIG9mZnNldCwgYm91bmRhcnksICZzdGFydF9vZmZzZXQsICZlbmRf
b2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sIHRleHRfcmVzdWx0KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRfb2Zmc2V0LCA9PSwgc3RhcnRfb2Zmc2V0X3Jlc3VsdCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZF9vZmZzZXQsID09LCBlbmRfb2Zmc2V0X3Jlc3VsdCk7
CisgICAgdGV4dCA9IGZuKHRleHRPYmosIG9mZnNldCwgYm91bmRhcnksICZzdGFydE9mZnNldCwg
JmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCB0ZXh0UmVzdWx0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBzdGFydE9mZnNldFJlc3VsdCk7
CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIGVuZE9mZnNldFJlc3VsdCk7CiAg
ICAgZ19mcmVlKHRleHQpOwogfQogCi1zdGF0aWMgdm9pZCBydW5fZ2V0X3RleHRfdGVzdHMoQXRr
VGV4dCogdGV4dF9vYmopCitzdGF0aWMgdm9pZCBydW5HZXRUZXh0VGVzdHMoQXRrVGV4dCAqdGV4
dE9iaikKIHsKLSAgICBjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQodGV4dF9vYmosIDAs
IC0xKTsKKyAgICBjaGFyICp0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQodGV4dE9iaiwgMCwgLTEp
OwogICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlz
IHRoZSBzZWNvbmQgc2VudGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC4iKTsKICAgICBnX2ZyZWUo
dGV4dCk7CiAKICAgICAvKiBBVEtfVEVYVF9CT1VOREFSWV9DSEFSICovCi0gICAgdGVzdF9nZXRf
dGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9DSEFSLAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgIlQiLCAwLCAxKTsKIAotICAgIHRlc3RfZ2V0X3RleHRf
ZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfQ0hBUiwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190
ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsICJoIiwgMSwgMik7CiAKLSAgICB0ZXN0X2dldF90ZXh0
X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9DSEFSLAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRr
X3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsICIiLCAwLCAwKTsKIAotICAgIHRlc3RfZ2V0X3Rl
eHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX0NIQVIsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBh
dGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgIlQiLCAwLCAxKTsKLSAgICAKKwogICAgIC8q
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQgKi8KLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0
aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfU1RBUlQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAiVGhpcyAiLCAwLCA1KTsKIAotICAgIHRlc3RfZ2V0
X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9T
VEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsICJUaGlzICIsIDAsIDUpOwogCi0g
ICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgIHRlc3RHZXRUZXh0RnVu
Y3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsICJ0ZXN0LiAi
LCAxMCwgMTYpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3Rl
eHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAg
IHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNTgsICJ0aGlyZC4iLCA1OCwgNjQpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0
ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRB
UllfV09SRF9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0
X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA1LCAiVGhpcyAiLCAwLCA1KTsKIAotICAgIHRlc3Rf
Z2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZz
ZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgdGVzdEdldFRleHRGdW5jdGlv
bih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIlRoaXMgIiwg
MCwgNSk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9n
ZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAg
dGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZz
ZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAiaXMgIiwgNSwgOCk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRf
b2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dP
UkRfU1RBUlQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRf
dGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA0LCAiaXMgIiwgNSwgOCk7CiAKLSAgICB0ZXN0X2dldF90ZXh0
X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19U
RVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2Jq
LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRf
U1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCAiaXMgIiwgNSwgOCk7CiAKICAg
ICAvKiBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCAqLwotICAgIHRlc3RfZ2V0X3RleHRfZnVu
Y3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9V
TkRBUllfV09SRF9FTkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgIlRoaXMiLCAwLCA0KTsKIAotICAgIHRlc3RfZ2V0X3Rl
eHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBh
dGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgIiBpcyIsIDQsIDcpOwogCi0gICAgdGVzdF9n
ZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9F
TkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LCAiIGlzIiwgNCwgNyk7CiAKLSAgICB0
ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZz
ZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24o
dGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9X
T1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDksICIgdGVzdCIsIDksIDE0KTsK
IAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0
X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgIHRlc3RHZXRU
ZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LCAi
VGhpcyIsIDAsIDQpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRr
X3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQs
CisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZv
cmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDQsICJUaGlzIiwgMCwgNCk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9u
KHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0
X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNywgIiBpcyIsIDQsIDcpOwogCi0gICAgdGVzdF9nZXRf
dGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09S
RF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LCAiIGEiLCA3LCA5KTsKIAotICAg
IHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVy
X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgdGVzdEdldFRleHRGdW5j
dGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JP
VU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgIiBhIiwgNywg
OSk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRf
dGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgIHRlc3RHZXRU
ZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4LCAiIHRo
aXJkIiwgNTcsIDYzKTsKIAogICAgIC8qIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJU
ICovCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKKyAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAiVGhpcyBpcyBhIHRlc3QuICIsIDAsIDE2KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVu
Y3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9V
TkRBUllfU0VOVEVOQ0VfU1RBUlQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBh
dGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NU
QVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUsICJUaGlzIGlzIGEgdGVzdC4gIiwg
MCwgMTYpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRf
Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwK
KyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVy
X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAiVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiAiLCAxNiwgNDUp
OwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3Rl
eHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKKyAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxNSwgIlRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gIiwgMTYsIDQ1KTsKIAot
ICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2Jl
Zm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJULAorICAgIHRlc3RH
ZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxNiwgIlRoaXMgaXMgYSB0ZXN0LiAiLCAwLCAxNik7CiAKLSAgICB0ZXN0X2dldF90ZXh0
X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRl
eHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZ
X1NFTlRFTkNFX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQsICJUaGlzIGlz
IGEgdGVzdC4gIiwgMCwgMTYpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29i
aiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VO
VEVOQ0VfU1RBUlQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9n
ZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1LCAiIiwgMCwgMCk7CiAKICAgICAvKiBBVEtf
VEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQgKi8KLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9u
KHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZ
X1NFTlRFTkNFX0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0
X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgIlRoaXMgaXMgYSB0ZXN0LiIsIDAsIDE1KTsKIAot
ICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0
X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAorICAgIHRlc3RHZXRUZXh0
RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9TRU5URU5DRV9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSwgIiBU
aGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIiwgMTUsIDQ0KTsKIAotICAgIHRlc3RfZ2V0X3Rl
eHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9i
aiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5D
RV9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgIiBUaGlzIGlzIHRoZSBzZWNv
bmQgc2VudGVuY2UuIiwgMTUsIDQ0KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4
dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VO
VEVOQ0VfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0
X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxNywgIiBUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIiwg
MTUsIDQ0KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0
X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAor
ICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCAiIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4iLCAxNSwgNDQpOwog
Ci0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRf
YWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCisgICAgdGVzdEdl
dFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDE1LCAiIEFuZCB0aGlzIHRoZSB0aGlyZC4iLCA0NCwgNjQpOwogCi0gICAgdGVzdF9nZXRfdGV4
dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4
dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
U0VOVEVOQ0VfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsICJUaGlzIGlzIGEg
dGVzdC4iLCAwLCAxNSk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBh
dGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5D
RV9FTkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4
dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxNSwgIlRoaXMgaXMgYSB0ZXN0LiIsIDAsIDE1KTsKIAotICAg
IHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9y
ZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKKyAgICB0ZXN0R2V0VGV4
dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19U
RVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0
LCAiIiwgMCwgMCk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtf
dGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9F
TkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9i
ZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0NCwgIiBUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIiwgMTUs
IDQ0KTsKIAogICAgIC8qIEl0J3MgdHJpY2sgdG8gdGVzdCB0aGVzZSBwcm9wZXJseSByaWdodCBu
b3csIHNpbmNlIG91ciBhMTF5CiAgICAgICAgaW1wbGVtZW50YXRpb24gc3BsaXRzIGRpZmZlcmVu
dCBsaW5lcyBpbiBkaWZmZXJlbnQgYTExeQogICAgICAgIGl0ZW1zICovCiAgICAgLyogQVRLX1RF
WFRfQk9VTkRBUllfTElORV9TVEFSVCAqLwotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4
dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfTElO
RV9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90
ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsICJUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNl
bnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuIiwgMCwgNjQpOwogCiAgICAgLyogQVRLX1RFWFRf
Qk9VTkRBUllfTElORV9FTkQgKi8KLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2Jq
LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfRU5E
LAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX0VORCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICJUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBB
bmQgdGhpcyB0aGUgdGhpcmQuIiwgMCwgNjQpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X2Zvcm1zKHZvaWQpCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
a2l0QXRrR2V0VGV4dEF0T2Zmc2V0Rm9ybXModm9pZCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3OwotICAgIEF0a09iamVjdCogb2JqOwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBB
dGtUZXh0KiB0ZXh0X29iajsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3OworICAgIEF0a09i
amVjdCAqb2JqOworICAgIEdNYWluTG9vcCAqbG9vcDsKKyAgICBBdGtUZXh0ICp0ZXh0T2JqOwog
CiAgICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwog
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwpAQCAtMjEzLDcgKzIxNyw3IEBAIHN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfZm9ybXModm9pZCkKICAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHMsIE5VTEwsIE5V
TEwsIE5VTEwpOwogICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CiAKLSAg
ICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKWJhaWxfb3V0LCBsb29wKTsKKyAgICBn
X3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKWJhaWxPdXQsIGxvb3ApOwogICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKIAogICAgIC8qIEdldCB0byB0aGUgaW5uZXIgQXRrVGV4dCBvYmpl
Y3QgKi8KQEAgLTIyMiwyMCArMjI2LDIxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19n
ZXRfdGV4dF9hdF9vZmZzZXRfZm9ybXModm9pZCkKICAgICBvYmogPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7CiAgICAgZ19hc3NlcnQob2JqKTsKIAotICAgIHRleHRf
b2JqID0gQVRLX1RFWFQob2JqKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0X29iaikp
OworICAgIHRleHRPYmogPSBBVEtfVEVYVChvYmopOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhU
KHRleHRPYmopKTsKIAotICAgIHJ1bl9nZXRfdGV4dF90ZXN0cyh0ZXh0X29iaik7CisgICAgcnVu
R2V0VGV4dFRlc3RzKHRleHRPYmopOwogCisgICAgZ19vYmplY3RfdW5yZWYob2JqKTsKICAgICBn
X29iamVjdF91bnJlZih3ZWJWaWV3KTsKIH0KIAotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF90ZXh0X2F0X29mZnNldCh2b2lkKQorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRl
eHRBdE9mZnNldCh2b2lkKQogewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgQXRr
T2JqZWN0KiBvYmo7Ci0gICAgR01haW5Mb29wKiBsb29wOwotICAgIEF0a1RleHQqIHRleHRfb2Jq
OworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7CisgICAgQXRrT2JqZWN0ICpvYmo7CisgICAg
R01haW5Mb29wICpsb29wOworICAgIEF0a1RleHQgKnRleHRPYmo7CiAKICAgICB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CiAgICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViVmlldyk7CkBAIC0yNDQsNyArMjQ5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfYXRrX2dldF90ZXh0X2F0X29mZnNldCh2b2lkKQogICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywgTlVMTCwgTlVMTCwgTlVMTCk7CiAgICAgbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKIAotICAgIGdfdGltZW91dF9hZGQoMTAwLCAo
R1NvdXJjZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1Nv
dXJjZUZ1bmMpYmFpbE91dCwgbG9vcCk7CiAgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwogCiAg
ICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVjdCAqLwpAQCAtMjUzLDIwICsyNTgs
MjEgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldCh2b2lk
KQogICAgIG9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsKICAg
ICBnX2Fzc2VydChvYmopOwogCi0gICAgdGV4dF9vYmogPSBBVEtfVEVYVChvYmopOwotICAgIGdf
YXNzZXJ0KEFUS19JU19URVhUKHRleHRfb2JqKSk7CisgICAgdGV4dE9iaiA9IEFUS19URVhUKG9i
aik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iaikpOwogCi0gICAgcnVuX2dldF90
ZXh0X3Rlc3RzKHRleHRfb2JqKTsKKyAgICBydW5HZXRUZXh0VGVzdHModGV4dE9iaik7CiAKKyAg
ICBnX29iamVjdF91bnJlZihvYmopOwogICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwogfQog
Ci1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X25ld2xpbmVz
KHZvaWQpCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0TmV3bGluZXMo
dm9pZCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEF0a09iamVjdCogb2Jq
OwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBBdGtUZXh0KiB0ZXh0X29iajsKKyAgICBXZWJL
aXRXZWJWaWV3ICp3ZWJWaWV3OworICAgIEF0a09iamVjdCAqb2JqOworICAgIEdNYWluTG9vcCAq
bG9vcDsKKyAgICBBdGtUZXh0ICp0ZXh0T2JqOwogCiAgICAgd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwogICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZp
ZXcpOwpAQCAtMjc1LDcgKzI4MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRf
dGV4dF9hdF9vZmZzZXRfbmV3bGluZXModm9pZCkKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcod2ViVmlldywgY29udGVudHNXaXRoTmV3bGluZXMsIE5VTEwsIE5VTEwsIE5VTEwpOwog
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CiAKLSAgICBnX3RpbWVvdXRf
YWRkKDEwMCwgKEdTb3VyY2VGdW5jKWJhaWxfb3V0LCBsb29wKTsKKyAgICBnX3RpbWVvdXRfYWRk
KDEwMCwgKEdTb3VyY2VGdW5jKWJhaWxPdXQsIGxvb3ApOwogICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKIAogICAgIC8qIEdldCB0byB0aGUgaW5uZXIgQXRrVGV4dCBvYmplY3QgKi8KQEAgLTI4
NCwyMCArMjkwLDIxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9v
ZmZzZXRfbmV3bGluZXModm9pZCkKICAgICBvYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9iaiwgMCk7CiAgICAgZ19hc3NlcnQob2JqKTsKIAotICAgIHRleHRfb2JqID0gQVRL
X1RFWFQob2JqKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0X29iaikpOworICAgIHRl
eHRPYmogPSBBVEtfVEVYVChvYmopOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmop
KTsKIAotICAgIHJ1bl9nZXRfdGV4dF90ZXN0cyh0ZXh0X29iaik7CisgICAgcnVuR2V0VGV4dFRl
c3RzKHRleHRPYmopOwogCisgICAgZ19vYmplY3RfdW5yZWYob2JqKTsKICAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKIH0KIAotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0
X2F0X29mZnNldF90ZXh0YXJlYSh2b2lkKQorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRl
eHRBdE9mZnNldFRleHRhcmVhKHZvaWQpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsK
LSAgICBBdGtPYmplY3QqIG9iajsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0gICAgQXRrVGV4dCog
dGV4dF9vYmo7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBBdGtPYmplY3QgKm9i
ajsKKyAgICBHTWFpbkxvb3AgKmxvb3A7CisgICAgQXRrVGV4dCAqdGV4dE9iajsKIAogICAgIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKICAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKQEAgLTMwNiw3ICszMTMsNyBAQCBzdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRhcmVhKHZvaWQpCiAgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzSW5UZXh0YXJlYSwgTlVM
TCwgTlVMTCwgTlVMTCk7CiAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
IAotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOwor
ICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpYmFpbE91dCwgbG9vcCk7CiAgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwogCiAgICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0
IG9iamVjdCAqLwpAQCAtMzE3LDIwICszMjQsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF90ZXh0X2F0X29mZnNldF90ZXh0YXJlYSh2b2lkKQogICAgIG9iaiA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsKICAgICBnX2Fzc2VydChvYmopOwogCi0g
ICAgdGV4dF9vYmogPSBBVEtfVEVYVChvYmopOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRl
eHRfb2JqKSk7CisgICAgdGV4dE9iaiA9IEFUS19URVhUKG9iaik7CisgICAgZ19hc3NlcnQoQVRL
X0lTX1RFWFQodGV4dE9iaikpOwogCi0gICAgcnVuX2dldF90ZXh0X3Rlc3RzKHRleHRfb2JqKTsK
KyAgICBydW5HZXRUZXh0VGVzdHModGV4dE9iaik7CiAKKyAgICBnX29iamVjdF91bnJlZihvYmop
OwogICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRfaW5wdXQodm9pZCkKK3N0YXRpYyB2b2lk
IHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRUZXh0SW5wdXQodm9pZCkKIHsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEF0a09iamVjdCogb2JqOwotICAgIEdNYWluTG9vcCog
bG9vcDsKLSAgICBBdGtUZXh0KiB0ZXh0X29iajsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
OworICAgIEF0a09iamVjdCAqb2JqOworICAgIEdNYWluTG9vcCAqbG9vcDsKKyAgICBBdGtUZXh0
ICp0ZXh0T2JqOwogCiAgICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOwogICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwpAQCAtMzM5LDcgKzM0
Nyw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfdGV4
dF9pbnB1dCh2b2lkKQogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBj
b250ZW50c0luVGV4dElucHV0LCBOVUxMLCBOVUxMLCBOVUxMKTsKICAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwogCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNl
RnVuYyliYWlsX291dCwgbG9vcCk7CisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVu
YyliYWlsT3V0LCBsb29wKTsKICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CiAKICAgICAvKiBH
ZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0ICovCkBAIC0zNTAsMTEgKzM1OCw5NCBAQCBz
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRfaW5wdXQo
dm9pZCkKICAgICBvYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7
CiAgICAgZ19hc3NlcnQob2JqKTsKIAotICAgIHRleHRfb2JqID0gQVRLX1RFWFQob2JqKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0X29iaikpOworICAgIHRleHRPYmogPSBBVEtfVEVY
VChvYmopOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmopKTsKKworICAgIHJ1bkdl
dFRleHRUZXN0cyh0ZXh0T2JqKTsKKworICAgIGdfb2JqZWN0X3VucmVmKG9iaik7CisgICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRU
ZXh0SW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyAq
d2ViVmlldzsKKyAgICBBdGtPYmplY3QgKm9iaiwgKm9iajEsICpvYmoyOworICAgIEdNYWluTG9v
cCAqbG9vcDsKKyAgICBBdGtUZXh0ICp0ZXh0T2JqMSwgKnRleHRPYmoyOworCisgICAgd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2MgPSB7IDAsIDAsIDgw
MCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmll
dyksICZhbGxvYyk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNv
bnRlbnRzSW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBs
b29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ190aW1lb3V0X2FkZCgx
MDAsIChHU291cmNlRnVuYyliYWlsT3V0LCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7CisKKyAgICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0ICovCisgICAgb2Jq
ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBn
X2Fzc2VydChvYmopOworICAgIG9iajEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iaiwgMCk7CisgICAgZ19hc3NlcnQob2JqMSk7CisgICAgb2JqMiA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqLCAxKTsKKyAgICBnX2Fzc2VydChvYmoyKTsKKworICAgIHRl
eHRPYmoxID0gQVRLX1RFWFQob2JqMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9i
ajEpKTsKKyAgICB0ZXh0T2JqMiA9IEFUS19URVhUKG9iajIpOworICAgIGdfYXNzZXJ0KEFUS19J
U19URVhUKHRleHRPYmoyKSk7CiAKLSAgICBydW5fZ2V0X3RleHRfdGVzdHModGV4dF9vYmopOwor
ICAgIGNoYXIgKnRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0T2JqMSwgMCwgLTEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlRoaXMgaXMgYSB0ZXN0LiIpOwogCisgICAgdGV4
dCA9IGF0a190ZXh0X2dldF90ZXh0KHRleHRPYmoyLCAwLCAxMik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRleHQsID09LCAiSGVsbG8gd29ybGQuIik7CisKKyAgICBnX29iamVjdF91bnJlZihvYmox
KTsKKyAgICBnX29iamVjdF91bnJlZihvYmoyKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRleHRJblBhcmFncmFwaEFuZEJv
ZHlNb2RlcmF0ZSh2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7CisgICAgQXRr
T2JqZWN0ICpvYmosICpvYmoxLCAqb2JqMjsKKyAgICBHTWFpbkxvb3AgKmxvb3A7CisgICAgQXRr
VGV4dCAqdGV4dE9iajEsICp0ZXh0T2JqMjsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2MpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c0luUGFyYWdyYXBo
QW5kQm9keU1vZGVyYXRlLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBsb29wID0gZ19tYWluX2xv
b3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVu
YyliYWlsT3V0LCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBH
ZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0ICovCisgICAgb2JqID0gZ3RrX3dpZGdldF9n
ZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChvYmopOwor
ICAgIG9iajEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7CisgICAg
Z19hc3NlcnQob2JqMSk7CisgICAgb2JqMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqLCAxKTsKKyAgICBnX2Fzc2VydChvYmoyKTsKKworICAgIHRleHRPYmoxID0gQVRLX1RF
WFQob2JqMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iajEpKTsKKyAgICB0ZXh0
T2JqMiA9IEFUS19URVhUKG9iajIpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmoy
KSk7CisKKyAgICBjaGFyICp0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQodGV4dE9iajEsIDAsIC0x
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJUaGlzIGlzIGEgdGVzdC4iKTsKKwor
ICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0T2JqMiwgMCwgNTMpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIkhlbGxvIHdvcmxkLlxuVGhpcyBzZW50ZW5jZSBpcyBncmVl
bi5cblRoaXMgb25lIGlzIG5vdC4iKTsKKworICAgIGdfb2JqZWN0X3VucmVmKG9iajEpOworICAg
IGdfb2JqZWN0X3VucmVmKG9iajIpOwogICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwogfQog
CkBAIC0zNjQsMTYgKzQ1NSwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAg
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwogCiAgICAgZ190ZXN0X2J1Z19i
YXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvYXRrL2dldF90ZXh0X2F0X29mZnNldCIsIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9h
dF9vZmZzZXQpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0X3RleHRfYXRf
b2Zmc2V0X2Zvcm1zIiwgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldF9mb3Jtcyk7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRfdGV4dF9hdF9vZmZzZXRfbmV3
bGluZXMiLCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X25ld2xpbmVzKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldF90ZXh0X2F0X29mZnNldF90ZXh0YXJl
YSIsIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dGFyZWEpOwotICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRfaW5wdXQi
LCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRfaW5wdXQpOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0T2Zmc2V0IiwgdGVzdFdlYmtpdEF0
a0dldFRleHRBdE9mZnNldCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRU
ZXh0QXRPZmZzZXRGb3JtcyIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRGb3Jtcyk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXROZXdsaW5lcyIs
IHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXROZXdsaW5lcyk7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXRUZXh0YXJlYSIsIHRlc3RXZWJraXRBdGtH
ZXRUZXh0QXRPZmZzZXRUZXh0YXJlYSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9nZXRUZXh0QXRPZmZzZXRUZXh0SW5wdXQiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0
VGV4dElucHV0KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRJblBh
cmFncmFwaEFuZEJvZHlTaW1wbGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5k
Qm9keVNpbXBsZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0SW5Q
YXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdyYXBo
QW5kQm9keU1vZGVyYXRlKTsKICAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKIH0KIAogI2Vsc2UK
LWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
ICoqYXJndikKIHsKICAgICBnX2NyaXRpY2FsKCJZb3Ugd2lsbCBuZWVkIGF0IGxlYXN0IGdsaWIt
Mi4xNi4wIGFuZCBndGstMi4xNC4wIHRvIHJ1biB0aGUgdW5pdCB0ZXN0cy4gRG9pbmcgbm90aGlu
ZyBub3cuIik7CiAgICAgcmV0dXJuIDA7Ci0tIAoxLjYuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46792</attachid>
            <date>2010-01-17 23:37:05 -0800</date>
            <delta_ts>2010-01-19 10:43:27 -0800</delta_ts>
            <desc>Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests, style compliance changes....</desc>
            <filename>30883-5a.patch</filename>
            <type>text/plain</type>
            <size>37199</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSA2YjJiOGJjMmE2NTRjNTkzOWUyOWY1YjczODRhYzA0NGY0NGZkZTdiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBTdW4sIDE3IEphbiAyMDEwIDIyOjA3OjIzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0g
MjAxMC0wMS0xOCBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgoK
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCiAgICAgICAgW0d0a10gSW1wbGVtZW50
IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CgogICAgICAgIE1v
dmVzIHRoZSB0ZXh0IGFzc2VtYmxpbmcgZnVuY3Rpb25hbGl0eSBmcm9tIGdldFBhbmdvTGF5b3V0
Rm9yQXRrIHRvCiAgICAgICAgdGV4dEZvck9iamVjdCwgd2hpY2ggd2Via2l0X2FjY2Vzc2libGVf
dGV4dF9nZXRfdGV4dCBub3cgZmFsbHMgYmFjayBvbgogICAgICAgIHdoZW4gaXQgY29tZXMgdXAg
ZW1wdHkuCgogICAgICAgIEFkZHMgYSBjaGVjayBpbiB0ZXh0Rm9yT2JqZWN0IHNvIHRoYXQgd2Ug
ZG9uJ3QgZG91YmxlLWFkZCBuZXdsaW5lcwogICAgICAgIHdoZW4gd2UgaGF2ZSBhIEJSLgoKICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgK
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcDoKICAgICAgICAodGV4dEZvck9iamVjdCk6CiAgICAgICAgKGdldFBhbmdvTGF5b3V0Rm9y
QXRrKToKICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCk6CgoyMDEwLTAx
LTE4ICBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgoKICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODgzCiAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0a1Rl
eHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CgogICAgICAgIEFkZHMgdHdv
IG5ld3MgdGVzdHMuIEFsc28gKGhvcGVmdWxseSkgYnJpbmdzIHRoZSByZXN0IGludG8gY29tcGxp
YW5jZQogICAgICAgIHdpdGggdGhlIHN0eWxlIGd1aWRlbGluZXMuCgogICAgICAgICogdGVzdHMv
dGVzdGF0ay5jCiAgICAgICAgKGJhaWxPdXQpOgogICAgICAgICh0ZXN0R2V0VGV4dEZ1bmN0aW9u
KToKICAgICAgICAocnVuR2V0VGV4dFRlc3RzKToKICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRl
eHRBdE9mZnNldEZvcm1zKToKICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldCk6
CiAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXROZXdsaW5lcyk6CiAgICAgICAg
KHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRUZXh0YXJlYSk6CiAgICAgICAgKHRlc3RXZWJr
aXRBdGtHZXRUZXh0QXRPZmZzZXRUZXh0SW5wdXQpOgogICAgICAgICh0ZXN0V2Via2l0QXRrR2V0
VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSk6CiAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRU
ZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUpOgogICAgICAgIChtYWluKToKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKysK
IC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwICAgICAgICAgIHwgIDEy
NCArKysrKy0tLS0KIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCAgICAg
ICAgICAgIHwgICAgMyArCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMjMgKysKIFdlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDMwOSArKysrKysrKysrKysrLS0tLS0tLQogNSBmaWxlcyBjaGFu
Z2VkLCAzMTkgaW5zZXJ0aW9ucygrKSwgMTYwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM4NTBjZi4uYmExZTAz
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMyBAQAorMjAxMC0wMS0xOCBKb2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUu
ZGlnZ3NAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDg4Mwor
ICAgICAgICBbR3RrXSBJbXBsZW1lbnQgQXRrVGV4dCBmb3IgSFRNTCBlbGVtZW50cyB3aGljaCBj
b250YWluIHRleHQKKworICAgICAgICBNb3ZlcyB0aGUgdGV4dCBhc3NlbWJsaW5nIGZ1bmN0aW9u
YWxpdHkgZnJvbSBnZXRQYW5nb0xheW91dEZvckF0ayB0bworICAgICAgICB0ZXh0Rm9yT2JqZWN0
LCB3aGljaCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0IG5vdyBmYWxscyBiYWNrIG9u
CisgICAgICAgIHdoZW4gaXQgY29tZXMgdXAgZW1wdHkuCisKKyAgICAgICAgQWRkcyBhIGNoZWNr
IGluIHRleHRGb3JPYmplY3Qgc28gdGhhdCB3ZSBkb24ndCBkb3VibGUtYWRkIG5ld2xpbmVzCisg
ICAgICAgIHdoZW4gd2UgaGF2ZSBhIEJSLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHRleHRGb3JP
YmplY3QpOgorICAgICAgICAoZ2V0UGFuZ29MYXlvdXRGb3JBdGspOgorICAgICAgICAod2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCk6CisKIDIwMTAtMDEtMTcgIE1hcnRpbiBSb2JpbnNv
biAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCBkMWI0
NjNjLi41YjM5YmNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtODMyLDYgKzgzMiwxNCBA
QCBzdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCog
dGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZwogICAgIGVsc2UKICAgICAgICAgcmV0ID0gY29yZU9i
amVjdC0+dGV4dFVuZGVyRWxlbWVudCgpLnN1YnN0cmluZyhzdGFydCwgbGVuZ3RoKTsKIAorICAg
IGlmICghcmV0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBhdCBsZWFz
dCB3aXRoIGFub255bW91cyBSZW5kZXJCbG9ja3MgKGUuZy4gYm9keSB0ZXh0IGFtb25nc3QgcGFy
YWdyYXBocykKKyAgICAgICAgcmV0ID0gU3RyaW5nKHRleHRGb3JPYmplY3Qoc3RhdGljX2Nhc3Q8
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KGNvcmVPYmplY3QpKSk7CisgICAgICAgIGlmICgh
ZW5kT2Zmc2V0KQorICAgICAgICAgICAgZW5kT2Zmc2V0ID0gcmV0Lmxlbmd0aCgpOworICAgICAg
ICByZXQgPSByZXQuc3Vic3RyaW5nKHN0YXJ0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7Cisg
ICAgfQorCiAgICAgcmV0dXJuIGdfc3RyZHVwKHJldC51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAt
OTAxLDU4ICs5MDksMTIgQEAgc3RhdGljIFBhbmdvTGF5b3V0KiBnZXRQYW5nb0xheW91dEZvckF0
ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIGlmICghd2ViVmlldykKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7Ci0KICAgICBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Kj4oY29yZU9iamVjdCk7CiAgICAgaWYgKCFhY2NPYmplY3QpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggdGhlIGxheW91dCBhcyBp
dCBhcHBlYXJzIG9uIHRoZSBzY3JlZW4KLSAgICAvLyBGb3IgdGV4dCBjb250cm9scywgd2UgY2Fu
IGdldCB0aGUgdGV4dCBsaW5lIGJ5IGxpbmUuCi0gICAgaWYgKGFjY09iamVjdC0+aXNUZXh0Q29u
dHJvbCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBhY2NPYmplY3QtPnRleHRM
ZW5ndGgoKTsKLSAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgICAgICBQbGFpblRleHRS
YW5nZSByYW5nZSA9IGFjY09iamVjdC0+ZG9BWFJhbmdlRm9yTGluZShsaW5lTnVtYmVyKTsKLSAg
ICAgICAgd2hpbGUgKHJhbmdlLmxlbmd0aCkgewotICAgICAgICAgICAgLy8gV2hlbiBhIGxpbmUg
b2YgdGV4dCB3cmFwcyBpbiBhIHRleHQgYXJlYSwgdGhlIGZpbmFsIHNwYWNlIGlzIHJlbW92ZWQu
Ci0gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPCB0ZXh0TGVuZ3Ro
KQotICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCAtPSAxOwotICAgICAgICAgICAgU3RyaW5n
IGxpbmVUZXh0ID0gYWNjT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocmFuZ2UpOwotICAgICAg
ICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgbGluZVRleHQudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAgICAgICAgIHJhbmdlID0g
YWNjT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51bWJlcik7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBGb3IgUmVuZGVyQmxvY2tzLCBwaWVjZSB0b2dldGhlciB0
aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0IG9iamVjdHMgdGhleSBjb250YWluLgotICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogb2JqID0gYWNjT2JqZWN0LT5yZW5kZXJlcigpLT5maXJzdENo
aWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAo
b2JqLT5pc0JSKCkpIHsKLSAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChvYmopOwotICAgICAgICAg
ICAgLy8gQmUgc3VyZSB3ZSBoYXZlIGEgUmVuZGVyVGV4dCBvYmplY3Qgd2UgY2FuIHdvcmsgd2l0
aC4KLSAgICAgICAgICAgIGlmICghcmVuZGVyVGV4dCB8fCAhb2JqLT5pc1RleHQoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEhhbmRsZSBSZW5kZXJJbmxpbmVzIChhbmQgYW55IG90aGVyIHNpbWls
aWFyIFJlbmRlck9iamVjdHMpLgotICAgICAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRl
clRleHQob2JqLT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVuZGVyVGV4
dCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIElubGluZVRleHRCb3gqIGJveCA9IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpOwot
ICAgICAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0g
Y29udmVydFVuaUNoYXJUb1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0
LT50ZXh0TGVuZ3RoKCksIGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAgICAg
ICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgdGV4dCk7Ci0gICAgICAgICAgICAgICAgLy8gTmV3bGlu
ZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBj
aGVjawotICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBs
YXlvdXQuIFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzguCi0gICAgICAgICAgICAgICAgaWYgKCFi
b3gtPm5leHRPbkxpbmVFeGlzdHMoKSkKLSAgICAgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBw
ZW5kKHN0ciwgIlxuIik7Ci0gICAgICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0VGV4dEJveCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgUGFuZ29MYXlvdXQqIGxh
eW91dCA9IGd0a193aWRnZXRfY3JlYXRlX3BhbmdvX2xheW91dChzdGF0aWNfY2FzdDxHdGtXaWRn
ZXQqPih3ZWJWaWV3KSwgZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKSk7CisgICAgUGFuZ29MYXlv
dXQqIGxheW91dCA9IGd0a193aWRnZXRfY3JlYXRlX3BhbmdvX2xheW91dChzdGF0aWNfY2FzdDxH
dGtXaWRnZXQqPih3ZWJWaWV3KSwgdGV4dEZvck9iamVjdChhY2NPYmplY3QpKTsKICAgICBnX29i
amVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHRleHRPYmplY3QpLCAid2Via2l0LWFjY2Vzc2li
bGUtcGFuZ28tbGF5b3V0IiwgbGF5b3V0LCBnX29iamVjdF91bnJlZik7CiAgICAgcmV0dXJuIGxh
eW91dDsKIH0KQEAgLTE3NDcsNiArMTcwOSw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dEFuZE9mZnNldFVuaWdub3JlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBpCiB7
CiAgICAgTm9kZSogZW5kTm9kZSA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QqPihjb3JlT2JqZWN0KS0+cmVuZGVyZXIoKS0+bm9kZSgpOwogICAgIGludCBlbmRPZmZzZXQg
PSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKS5lbmQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCk7CisgICAgLy8gSW5kaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBib2d1cyBoYXMgdHJhbnNw
aXJlZC4KKyAgICBvZmZzZXQgPSAtMTsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJlYWxP
YmplY3QgPSBjb3JlT2JqZWN0OwogICAgIGlmIChyZWFsT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpCkBAIC0xNzU1LDEyICsxNzE5LDY4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdEFuZE9mZnNldFVuaWdub3JlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBp
CiAgICAgaWYgKGlnbm9yZUxpbmtzICYmIHJlYWxPYmplY3QtPmlzTGluaygpKQogICAgICAgICBy
ZWFsT2JqZWN0ID0gcmVhbE9iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QqPihyZWFsT2JqZWN0KS0+cmVuZGVyZXIoKS0+bm9kZSgpKTsKLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICByYW5nZS0+c2V0RW5kQmVmb3JlKGVuZE5vZGUs
IGVjKTsKLSAgICBvZmZzZXQgPSByYW5nZS0+dGV4dCgpLmxlbmd0aCgpICsgZW5kT2Zmc2V0Owot
CisgICAgTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qq
PihyZWFsT2JqZWN0KS0+cmVuZGVyZXIoKS0+bm9kZSgpOworICAgIGlmIChub2RlKSB7CisgICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZU9mQ29udGVudHMobm9kZSk7CisgICAgICAg
IGlmIChyYW5nZS0+b3duZXJEb2N1bWVudCgpID09IG5vZGUtPmRvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEJl
Zm9yZShlbmROb2RlLCBlYyk7CisgICAgICAgICAgICBpZiAocmFuZ2UtPmJvdW5kYXJ5UG9pbnRz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSByYW5nZS0+dGV4dCgpLmxlbmd0aCgp
ICsgZW5kT2Zmc2V0OworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiByZWFsT2JqZWN0Owog
fQogCitzdGF0aWMgZ2NoYXIqIHRleHRGb3JPYmplY3QoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCogYWNjT2JqZWN0KQoreworICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKKwor
ICAgIC8vIEZvciB0ZXh0IGNvbnRyb2xzLCB3ZSBjYW4gZ2V0IHRoZSB0ZXh0IGxpbmUgYnkgbGlu
ZS4KKyAgICBpZiAoYWNjT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKKyAgICAgICAgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IGFjY09iamVjdC0+dGV4dExlbmd0aCgpOworICAgICAgICBpbnQgbGlu
ZU51bWJlciA9IDA7CisgICAgICAgIFBsYWluVGV4dFJhbmdlIHJhbmdlID0gYWNjT2JqZWN0LT5k
b0FYUmFuZ2VGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICB3aGlsZSAocmFuZ2UubGVuZ3Ro
KSB7CisgICAgICAgICAgICAvLyBXaGVuIGEgbGluZSBvZiB0ZXh0IHdyYXBzIGluIGEgdGV4dCBh
cmVhLCB0aGUgZmluYWwgc3BhY2UgaXMgcmVtb3ZlZC4KKyAgICAgICAgICAgIGlmIChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCA8IHRleHRMZW5ndGgpCisgICAgICAgICAgICAgICAgcmFuZ2Uu
bGVuZ3RoIC09IDE7CisgICAgICAgICAgICBTdHJpbmcgbGluZVRleHQgPSBhY2NPYmplY3QtPmRv
QVhTdHJpbmdGb3JSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3Ry
LCBsaW5lVGV4dC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChz
dHIsICJcbiIpOworICAgICAgICAgICAgcmFuZ2UgPSBhY2NPYmplY3QtPmRvQVhSYW5nZUZvckxp
bmUoKytsaW5lTnVtYmVyKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZv
ciBSZW5kZXJCbG9ja3MsIHBpZWNlIHRvZ2V0aGVyIHRoZSB0ZXh0IGZyb20gdGhlIFJlbmRlclRl
eHQgb2JqZWN0cyB0aGV5IGNvbnRhaW4uCisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmog
PSBhY2NPYmplY3QtPnJlbmRlcmVyKCktPmZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChvYmotPmlzQlIoKSkgeworICAgICAgICAg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0
ID0gdG9SZW5kZXJUZXh0KG9iaik7CisgICAgICAgICAgICAvLyBCZSBzdXJlIHdlIGhhdmUgYSBS
ZW5kZXJUZXh0IG9iamVjdCB3ZSBjYW4gd29yayB3aXRoLgorICAgICAgICAgICAgaWYgKCFyZW5k
ZXJUZXh0IHx8ICFvYmotPmlzVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIFJl
bmRlcklubGluZXMgKGFuZCBhbnkgb3RoZXIgc2ltaWxpYXIgUmVuZGVyT2JqZWN0cykuCisgICAg
ICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChvYmotPmZpcnN0Q2hpbGQoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJUZXh0KQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSW5saW5lVGV4dEJveCogYm94
ID0gcmVuZGVyVGV4dC0+Zmlyc3RUZXh0Qm94KCk7CisgICAgICAgICAgICB3aGlsZSAoYm94KSB7
CisgICAgICAgICAgICAgICAgZ2NoYXIqIHRleHQgPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChyZW5k
ZXJUZXh0LT5jaGFyYWN0ZXJzKCksIHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSwgYm94LT5zdGFy
dCgpLCBib3gtPmVuZCgpKTsKKyAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCB0
ZXh0KTsKKyAgICAgICAgICAgICAgICAvLyBOZXdsaW5lIGNoYXJzIGluIHRoZSBzb3VyY2UgcmVz
dWx0IGluIHNlcGFyYXRlIHRleHQgYm94ZXMsIHNvIGNoZWNrCisgICAgICAgICAgICAgICAgLy8g
YmVmb3JlIGFkZGluZyBhIG5ld2xpbmUgaW4gdGhlIGxheW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21t
ZW50ICM3OC4KKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmV4dCBzaWJsaW5nIGlzIGEgQlIs
IHdlJ2xsIGFkZCB0aGUgbmV3bGluZSB3aGVuIHdlIGV4YW1pbmUgdGhhdCBjaGlsZC4KKyAgICAg
ICAgICAgICAgICBpZiAoIWJveC0+bmV4dE9uTGluZUV4aXN0cygpICYmICghb2JqLT5uZXh0U2li
bGluZygpIHx8ICFvYmotPm5leHRTaWJsaW5nKCktPmlzQlIoKSkpCisgICAgICAgICAgICAgICAg
ICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOworICAgICAgICAgICAgICAgIGJveCA9IGJv
eC0+bmV4dFRleHRCb3goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKK30KKwogI2VuZGlmIC8vIEhBVkUoQUND
RVNTSUJJTElUWSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAppbmRleCBlOGNlYzA4Li4xYzBmNGZiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmgKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckF0ay5oCkBAIC0yNSw2ICsyNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OworICAgIGNsYXNzIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q7CiB9CiAKIEdfQkVHSU5fREVDTFMKQEAgLTYyLDYgKzYzLDggQEAgQXRrT2Jq
ZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50KFdlYktpdEFjY2Vzc2li
bGUqIGFjY2Vzc2libGUpOwogCiBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RB
bmRPZmZzZXRVbmlnbm9yZWQoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCwgaW50JiBvZmZzZXQsIGJvb2wgaWdub3JlTGlua3MpOwogCitzdGF0aWMgZ2NoYXIqIHRleHRG
b3JPYmplY3QoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCogYWNjT2JqZWN0KTsK
KwogR19FTkRfREVDTFMKIAogI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
X2gKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKaW5kZXggYzQxOGUzYS4uMGEyYWJmZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wMS0x
OCAgSm9hbm1hcmllIERpZ2dzICA8am9hbm1hcmllLmRpZ2dzQGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA4ODMKKyAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0
a1RleHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFpbiB0ZXh0CisKKyAgICAgICAgQWRk
cyB0d28gbmV3cyB0ZXN0cy4gQWxzbyAoaG9wZWZ1bGx5KSBicmluZ3MgdGhlIHJlc3QgaW50byBj
b21wbGlhbmNlCisgICAgICAgIHdpdGggdGhlIHN0eWxlIGd1aWRlbGluZXMuCisKKyAgICAgICAg
KiB0ZXN0cy90ZXN0YXRrLmMKKyAgICAgICAgKGJhaWxPdXQpOgorICAgICAgICAodGVzdEdldFRl
eHRGdW5jdGlvbik6CisgICAgICAgIChydW5HZXRUZXh0VGVzdHMpOgorICAgICAgICAodGVzdFdl
YmtpdEF0a0dldFRleHRBdE9mZnNldEZvcm1zKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRU
ZXh0QXRPZmZzZXQpOgorICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldE5ld2xp
bmVzKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRUZXh0YXJlYSk6Cisg
ICAgICAgICh0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0VGV4dElucHV0KToKKyAgICAgICAg
KHRlc3RXZWJraXRBdGtHZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlKToKKyAgICAgICAg
KHRlc3RXZWJraXRBdGtHZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUpOgorICAgICAg
ICAobWFpbik6CisKIDIwMTAtMDEtMTUgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRl
eCA3Zjg3YmRjLi5kMDU3YzhhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsu
YworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpAQCAtMjYsMTUgKzI2LDE5IEBACiAK
ICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApICYmIEdUS19DSEVDS19WRVJTSU9OKDIs
IDE0LCAwKQogCi1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHMgPSAiPGh0bWw+PGJvZHk+PHA+
VGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhl
IHRoaXJkLjwvcD48L2JvZHk+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhciAqY29udGVudHMg
PSAiPGh0bWw+PGJvZHk+PHA+VGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50
ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLjwvcD48L2JvZHk+PC9odG1sPiI7CiAKLXN0YXRpYyBj
b25zdCBjaGFyKiBjb250ZW50c1dpdGhOZXdsaW5lcyA9ICI8aHRtbD48Ym9keT48cD5UaGlzIGlz
IGEgdGVzdC4gXG5cblRoaXNcbiBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUg
dGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb250ZW50c1dp
dGhOZXdsaW5lcyA9ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC4gXG5cblRoaXNcbiBp
cyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0
bWw+IjsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UZXh0YXJlYSA9ICI8aHRtbD48
Ym9keT48dGV4dGFyZWEgY29scz0nODAnPlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNv
bmQgc2VudGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3RleHRhcmVhPjwvYm9keT48L2h0bWw+
IjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb250ZW50c0luVGV4dGFyZWEgPSAiPGh0bWw+PGJvZHk+
PHRleHRhcmVhIGNvbHM9JzgwJz5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNl
bnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuPC90ZXh0YXJlYT48L2JvZHk+PC9odG1sPiI7CiAK
LXN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c0luVGV4dElucHV0ID0gIjxodG1sPjxib2R5Pjxp
bnB1dCB0eXBlPSd0ZXh0JyBzaXplPSc4MCcgdmFsdWU9J1RoaXMgaXMgYSB0ZXN0LiBUaGlzIGlz
IHRoZSBzZWNvbmQgc2VudGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC4nLz48L2JvZHk+PC9odG1s
PiI7CitzdGF0aWMgY29uc3QgY2hhciAqY29udGVudHNJblRleHRJbnB1dCA9ICI8aHRtbD48Ym9k
eT48aW5wdXQgdHlwZT0ndGV4dCcgc2l6ZT0nODAnIHZhbHVlPSdUaGlzIGlzIGEgdGVzdC4gVGhp
cyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuJy8+PC9ib2R5Pjwv
aHRtbD4iOwogCi1zdGF0aWMgZ2Jvb2xlYW4gYmFpbF9vdXQoR01haW5Mb29wKiBsb29wKQorc3Rh
dGljIGNvbnN0IGNoYXIgKmNvbnRlbnRzSW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlID0gIjxodG1s
Pjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LjwvcD5IZWxsbyB3b3JsZC48L2JvZHk+PC9odG1sPiI7
CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb250ZW50c0luUGFyYWdyYXBoQW5kQm9keU1vZGVyYXRl
ID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LjwvcD5IZWxsbyB3b3JsZC48YnIgLz48
Zm9udCBjb2xvcj0nIzAwY2MwMCc+VGhpcyBzZW50ZW5jZSBpcyBncmVlbi48L2ZvbnQ+PGJyIC8+
VGhpcyBvbmUgaXMgbm90LjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGdib29sZWFuIGJhaWxP
dXQoR01haW5Mb29wKiBsb29wKQogewogICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGxv
b3ApKQogICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwpAQCAtNDQsMTY3ICs0OCwxNjcg
QEAgc3RhdGljIGdib29sZWFuIGJhaWxfb3V0KEdNYWluTG9vcCogbG9vcCkKIAogdHlwZWRlZiBn
Y2hhciogKCpBdGtHZXRUZXh0RnVuY3Rpb24pIChBdGtUZXh0KiwgZ2ludCwgQXRrVGV4dEJvdW5k
YXJ5LCBnaW50KiwgZ2ludCopOwogCi1zdGF0aWMgdm9pZCB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9u
KEF0a1RleHQqIHRleHRfb2JqLCBBdGtHZXRUZXh0RnVuY3Rpb24gZm4sIEF0a1RleHRCb3VuZGFy
eSBib3VuZGFyeSwgZ2ludCBvZmZzZXQsIGNvbnN0IGNoYXIqIHRleHRfcmVzdWx0LCBnaW50IHN0
YXJ0X29mZnNldF9yZXN1bHQsIGdpbnQgZW5kX29mZnNldF9yZXN1bHQpCitzdGF0aWMgdm9pZCB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKEF0a1RleHQgKnRleHRPYmosIEF0a0dldFRleHRGdW5jdGlvbiBm
biwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5LCBnaW50IG9mZnNldCwgY29uc3QgY2hhciAqdGV4
dFJlc3VsdCwgZ2ludCBzdGFydE9mZnNldFJlc3VsdCwgZ2ludCBlbmRPZmZzZXRSZXN1bHQpCiB7
Ci0gICAgZ2ludCBzdGFydF9vZmZzZXQsIGVuZF9vZmZzZXQ7Ci0gICAgY2hhciogdGV4dDsKKyAg
ICBnaW50IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ7CisgICAgY2hhciAqdGV4dDsKIAotICAgIHRl
eHQgPSBmbih0ZXh0X29iaiwgb2Zmc2V0LCBib3VuZGFyeSwgJnN0YXJ0X29mZnNldCwgJmVuZF9v
ZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgdGV4dF9yZXN1bHQpOwotICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydF9vZmZzZXQsID09LCBzdGFydF9vZmZzZXRfcmVzdWx0KTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kX29mZnNldCwgPT0sIGVuZF9vZmZzZXRfcmVzdWx0KTsK
KyAgICB0ZXh0ID0gZm4odGV4dE9iaiwgb2Zmc2V0LCBib3VuZGFyeSwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sIHRleHRSZXN1bHQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIHN0YXJ0T2Zmc2V0UmVzdWx0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgZW5kT2Zmc2V0UmVzdWx0KTsKICAg
ICBnX2ZyZWUodGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bl9nZXRfdGV4dF90ZXN0cyhBdGtU
ZXh0KiB0ZXh0X29iaikKK3N0YXRpYyB2b2lkIHJ1bkdldFRleHRUZXN0cyhBdGtUZXh0ICp0ZXh0
T2JqKQogewotICAgIGNoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0X29iaiwgMCwg
LTEpOworICAgIGNoYXIgKnRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0T2JqLCAwLCAtMSk7
CiAgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMg
dGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLiIpOwogICAgIGdfZnJlZSh0
ZXh0KTsKIAogICAgIC8qIEFUS19URVhUX0JPVU5EQVJZX0NIQVIgKi8KLSAgICB0ZXN0X2dldF90
ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19U
RVhUX0JPVU5EQVJZX0NIQVIsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtf
dGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAiVCIsIDAsIDEpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9m
dW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9DSEFSLAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3Rl
eHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgImgiLCAxLCAyKTsKIAotICAgIHRlc3RfZ2V0X3RleHRf
ZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19U
RVhUX0JPVU5EQVJZX0NIQVIsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtf
dGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgIiIsIDAsIDApOwogCi0gICAgdGVzdF9nZXRfdGV4
dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfQ0hBUiwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0
a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAiVCIsIDAsIDEpOwotICAgIAorCiAgICAgLyog
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCAqLwotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rp
b24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRB
UllfV09SRF9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0
X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsICJUaGlzICIsIDAsIDUpOwogCi0gICAgdGVzdF9nZXRf
dGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9i
aiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NU
QVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgIlRoaXMgIiwgMCwgNSk7CiAKLSAg
ICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9v
ZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgdGVzdEdldFRleHRGdW5j
dGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCwgInRlc3QuICIs
IDEwLCAxNik7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAg
dGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQs
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1OCwgInRoaXJkLiIsIDU4LCA2NCk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRl
eHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFS
WV9XT1JEX1NUQVJULAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRf
Z2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDUsICJUaGlzICIsIDAsIDUpOwogCi0gICAgdGVzdF9n
ZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9u
KHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAiVGhpcyAiLCAw
LCA1KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dl
dF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsICJpcyAiLCA1LCA4KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9v
YmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09S
RF9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90
ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQsICJpcyAiLCA1LCA4KTsKIAotICAgIHRlc3RfZ2V0X3RleHRf
ZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmos
IGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9T
VEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsICJpcyAiLCA1LCA4KTsKIAogICAg
IC8qIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EICovCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5j
dGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0
X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAiVGhpcyIsIDAsIDQpOwogCi0gICAgdGVzdF9nZXRfdGV4
dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0
a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAiIGlzIiwgNCwgNyk7CiAKLSAgICB0ZXN0X2dl
dF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9i
aiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VO
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUsICIgaXMiLCA0LCA3KTsKIAotICAgIHRl
c3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0
ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dP
UkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgOSwgIiB0ZXN0IiwgOSwgMTQpOwog
Ci0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRf
YmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgdGVzdEdldFRl
eHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUsICJU
aGlzIiwgMCwgNCk7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtf
dGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwK
KyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9y
ZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNCwgIlRoaXMiLCAwLCA0KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24o
dGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRf
Z2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA3LCAiIGlzIiwgNCwgNyk7CiAKLSAgICB0ZXN0X2dldF90
ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9i
aiwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JE
X0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUsICIgYSIsIDcsIDkpOwogCi0gICAg
dGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0
aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9V
TkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAiIGEiLCA3LCA5
KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90
ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgdGVzdEdldFRl
eHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhU
X0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgNTgsICIgdGhp
cmQiLCA1NywgNjMpOwogCiAgICAgLyogQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQg
Ki8KLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4
dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJULAorICAgIHRlc3RH
ZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsICJUaGlzIGlzIGEgdGVzdC4gIiwgMCwgMTYpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5j
dGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9TRU5URU5DRV9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0
a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RB
UlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSwgIlRoaXMgaXMgYSB0ZXN0LiAiLCAw
LCAxNik7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9n
ZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJULAor
ICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsICJUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuICIsIDE2LCA0NSk7
CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4
dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJULAorICAgIHRl
c3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0
LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDE1LCAiVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiAiLCAxNiwgNDUpOwogCi0g
ICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVm
b3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQsCisgICAgdGVzdEdl
dFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDE2LCAiVGhpcyBpcyBhIHRlc3QuICIsIDAsIDE2KTsKIAotICAgIHRlc3RfZ2V0X3RleHRf
ZnVuY3Rpb24odGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19U
RVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJULAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4
dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
U0VOVEVOQ0VfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NCwgIlRoaXMgaXMg
YSB0ZXN0LiAiLCAwLCAxNik7CiAKLSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2Jq
LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5U
RU5DRV9TVEFSVCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dl
dF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJULAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUsICIiLCAwLCAwKTsKIAogICAgIC8qIEFUS19U
RVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCAqLwotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24o
dGV4dF9vYmosIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
U0VOVEVOQ0VfRU5ELAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRf
Z2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAiVGhpcyBpcyBhIHRlc3QuIiwgMCwgMTUpOwogCi0g
ICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCisgICAgdGVzdEdldFRleHRG
dW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JP
VU5EQVJZX1NFTlRFTkNFX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1LCAiIFRo
aXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4iLCAxNSwgNDQpOwogCi0gICAgdGVzdF9nZXRfdGV4
dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2Jq
LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNF
X0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAiIFRoaXMgaXMgdGhlIHNlY29u
ZCBzZW50ZW5jZS4iLCAxNSwgNDQpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0
X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5U
RU5DRV9FTkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRf
dGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDE3LCAiIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4iLCAx
NSwgNDQpOwogCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRf
Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCisg
ICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9v
ZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsICIgVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiIsIDE1LCA0NCk7CiAK
LSAgICB0ZXN0X2dldF90ZXh0X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9h
ZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKKyAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTUsICIgQW5kIHRoaXMgdGhlIHRoaXJkLiIsIDQ0LCA2NCk7CiAKLSAgICB0ZXN0X2dldF90ZXh0
X2Z1bmN0aW9uKHRleHRfb2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9TRU5URU5DRV9FTkQsCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0
T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9T
RU5URU5DRV9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgIlRoaXMgaXMgYSB0
ZXN0LiIsIDAsIDE1KTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0
a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNF
X0VORCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0
X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDE1LCAiVGhpcyBpcyBhIHRlc3QuIiwgMCwgMTUpOwogCi0gICAg
dGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3Jl
X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAorICAgIHRlc3RHZXRUZXh0
RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQs
ICIiLCAwLCAwKTsKIAotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmosIGF0a190
ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VO
RCwKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmosIGF0a190ZXh0X2dldF90ZXh0X2Jl
Zm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDQ0LCAiIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4iLCAxNSwg
NDQpOwogCiAgICAgLyogSXQncyB0cmljayB0byB0ZXN0IHRoZXNlIHByb3Blcmx5IHJpZ2h0IG5v
dywgc2luY2Ugb3VyIGExMXkKICAgICAgICBpbXBsZW1lbnRhdGlvbiBzcGxpdHMgZGlmZmVyZW50
IGxpbmVzIGluIGRpZmZlcmVudCBhMTF5CiAgICAgICAgaXRlbXMgKi8KICAgICAvKiBBVEtfVEVY
VF9CT1VOREFSWV9MSU5FX1NUQVJUICovCi0gICAgdGVzdF9nZXRfdGV4dF9mdW5jdGlvbih0ZXh0
X29iaiwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9MSU5F
X1NUQVJULAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iaiwgYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgIlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2Vu
dGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC4iLCAwLCA2NCk7CiAKICAgICAvKiBBVEtfVEVYVF9C
T1VOREFSWV9MSU5FX0VORCAqLwotICAgIHRlc3RfZ2V0X3RleHRfZnVuY3Rpb24odGV4dF9vYmos
IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9FTkQs
CisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9v
ZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfRU5ELAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgIlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIEFu
ZCB0aGlzIHRoZSB0aGlyZC4iLCAwLCA2NCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfZm9ybXModm9pZCkKK3N0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtHZXRUZXh0QXRPZmZzZXRGb3Jtcyh2b2lkKQogewotICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXc7Ci0gICAgQXRrT2JqZWN0KiBvYmo7Ci0gICAgR01haW5Mb29wKiBsb29wOwotICAgIEF0
a1RleHQqIHRleHRfb2JqOworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7CisgICAgQXRrT2Jq
ZWN0ICpvYmo7CisgICAgR01haW5Mb29wICpsb29wOworICAgIEF0a1RleHQgKnRleHRPYmo7CiAK
ICAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CiAg
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CkBAIC0yMTMsNyArMjE3LDcgQEAgc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldF9mb3Jtcyh2b2lkKQogICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywgTlVMTCwgTlVM
TCwgTlVMTCk7CiAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKIAotICAg
IGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdf
dGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpYmFpbE91dCwgbG9vcCk7CiAgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwogCiAgICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVj
dCAqLwpAQCAtMjIyLDIwICsyMjYsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dl
dF90ZXh0X2F0X29mZnNldF9mb3Jtcyh2b2lkKQogICAgIG9iaiA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqLCAwKTsKICAgICBnX2Fzc2VydChvYmopOwogCi0gICAgdGV4dF9v
YmogPSBBVEtfVEVYVChvYmopOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRfb2JqKSk7
CisgICAgdGV4dE9iaiA9IEFUS19URVhUKG9iaik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
dGV4dE9iaikpOwogCi0gICAgcnVuX2dldF90ZXh0X3Rlc3RzKHRleHRfb2JqKTsKKyAgICBydW5H
ZXRUZXh0VGVzdHModGV4dE9iaik7CiAKKyAgICBnX29iamVjdF91bnJlZihvYmopOwogICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXcpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtf
Z2V0X3RleHRfYXRfb2Zmc2V0KHZvaWQpCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4
dEF0T2Zmc2V0KHZvaWQpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBBdGtP
YmplY3QqIG9iajsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0gICAgQXRrVGV4dCogdGV4dF9vYmo7
CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBBdGtPYmplY3QgKm9iajsKKyAgICBH
TWFpbkxvb3AgKmxvb3A7CisgICAgQXRrVGV4dCAqdGV4dE9iajsKIAogICAgIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKICAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKQEAgLTI0NCw3ICsyNDksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0KHZvaWQpCiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
c3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKICAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwogCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIChH
U291cmNlRnVuYyliYWlsX291dCwgbG9vcCk7CisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291
cmNlRnVuYyliYWlsT3V0LCBsb29wKTsKICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CiAKICAg
ICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0ICovCkBAIC0yNTMsMjAgKzI1OCwy
MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0KHZvaWQp
CiAgICAgb2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDApOwogICAg
IGdfYXNzZXJ0KG9iaik7CiAKLSAgICB0ZXh0X29iaiA9IEFUS19URVhUKG9iaik7Ci0gICAgZ19h
c3NlcnQoQVRLX0lTX1RFWFQodGV4dF9vYmopKTsKKyAgICB0ZXh0T2JqID0gQVRLX1RFWFQob2Jq
KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2JqKSk7CiAKLSAgICBydW5fZ2V0X3Rl
eHRfdGVzdHModGV4dF9vYmopOworICAgIHJ1bkdldFRleHRUZXN0cyh0ZXh0T2JqKTsKIAorICAg
IGdfb2JqZWN0X3VucmVmKG9iaik7CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CiB9CiAK
LXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfbmV3bGluZXMo
dm9pZCkKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXROZXdsaW5lcyh2
b2lkKQogewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgQXRrT2JqZWN0KiBvYmo7
Ci0gICAgR01haW5Mb29wKiBsb29wOwotICAgIEF0a1RleHQqIHRleHRfb2JqOworICAgIFdlYktp
dFdlYlZpZXcgKndlYlZpZXc7CisgICAgQXRrT2JqZWN0ICpvYmo7CisgICAgR01haW5Mb29wICps
b29wOworICAgIEF0a1RleHQgKnRleHRPYmo7CiAKICAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CiAgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7CkBAIC0yNzUsNyArMjgxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF90
ZXh0X2F0X29mZnNldF9uZXdsaW5lcyh2b2lkKQogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBjb250ZW50c1dpdGhOZXdsaW5lcywgTlVMTCwgTlVMTCwgTlVMTCk7CiAg
ICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKIAotICAgIGdfdGltZW91dF9h
ZGQoMTAwLCAoR1NvdXJjZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdfdGltZW91dF9hZGQo
MTAwLCAoR1NvdXJjZUZ1bmMpYmFpbE91dCwgbG9vcCk7CiAgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOwogCiAgICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVjdCAqLwpAQCAtMjg0
LDIwICsyOTAsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29m
ZnNldF9uZXdsaW5lcyh2b2lkKQogICAgIG9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqLCAwKTsKICAgICBnX2Fzc2VydChvYmopOwogCi0gICAgdGV4dF9vYmogPSBBVEtf
VEVYVChvYmopOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRfb2JqKSk7CisgICAgdGV4
dE9iaiA9IEFUS19URVhUKG9iaik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iaikp
OwogCi0gICAgcnVuX2dldF90ZXh0X3Rlc3RzKHRleHRfb2JqKTsKKyAgICBydW5HZXRUZXh0VGVz
dHModGV4dE9iaik7CiAKKyAgICBnX29iamVjdF91bnJlZihvYmopOwogICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRf
YXRfb2Zmc2V0X3RleHRhcmVhKHZvaWQpCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4
dEF0T2Zmc2V0VGV4dGFyZWEodm9pZCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Owot
ICAgIEF0a09iamVjdCogb2JqOwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBBdGtUZXh0KiB0
ZXh0X29iajsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3OworICAgIEF0a09iamVjdCAqb2Jq
OworICAgIEdNYWluTG9vcCAqbG9vcDsKKyAgICBBdGtUZXh0ICp0ZXh0T2JqOwogCiAgICAgd2Vi
VmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwogICAgIGdfb2Jq
ZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwpAQCAtMzA2LDcgKzMxMyw3IEBAIHN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dGFyZWEodm9pZCkKICAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNJblRleHRhcmVhLCBOVUxM
LCBOVUxMLCBOVUxMKTsKICAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwog
Ci0gICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYyliYWlsX291dCwgbG9vcCk7Cisg
ICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYyliYWlsT3V0LCBsb29wKTsKICAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CiAKICAgICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQg
b2JqZWN0ICovCkBAIC0zMTcsMjAgKzMyNCwyMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRhcmVhKHZvaWQpCiAgICAgb2JqID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDApOwogICAgIGdfYXNzZXJ0KG9iaik7CiAKLSAg
ICB0ZXh0X29iaiA9IEFUS19URVhUKG9iaik7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4
dF9vYmopKTsKKyAgICB0ZXh0T2JqID0gQVRLX1RFWFQob2JqKTsKKyAgICBnX2Fzc2VydChBVEtf
SVNfVEVYVCh0ZXh0T2JqKSk7CiAKLSAgICBydW5fZ2V0X3RleHRfdGVzdHModGV4dF9vYmopOwor
ICAgIHJ1bkdldFRleHRUZXN0cyh0ZXh0T2JqKTsKIAorICAgIGdfb2JqZWN0X3VucmVmKG9iaik7
CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dF9pbnB1dCh2b2lkKQorc3RhdGljIHZvaWQg
dGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFRleHRJbnB1dCh2b2lkKQogewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgQXRrT2JqZWN0KiBvYmo7Ci0gICAgR01haW5Mb29wKiBs
b29wOwotICAgIEF0a1RleHQqIHRleHRfb2JqOworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7
CisgICAgQXRrT2JqZWN0ICpvYmo7CisgICAgR01haW5Mb29wICpsb29wOworICAgIEF0a1RleHQg
KnRleHRPYmo7CiAKICAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CiAgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CkBAIC0zMzksNyArMzQ3
LDcgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldF90ZXh0
X2lucHV0KHZvaWQpCiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNv
bnRlbnRzSW5UZXh0SW5wdXQsIE5VTEwsIE5VTEwsIE5VTEwpOwogICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7CiAKLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VG
dW5jKWJhaWxfb3V0LCBsb29wKTsKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5j
KWJhaWxPdXQsIGxvb3ApOwogICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKIAogICAgIC8qIEdl
dCB0byB0aGUgaW5uZXIgQXRrVGV4dCBvYmplY3QgKi8KQEAgLTM1MCwxMSArMzU4LDk0IEBAIHN0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dF9pbnB1dCh2
b2lkKQogICAgIG9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsK
ICAgICBnX2Fzc2VydChvYmopOwogCi0gICAgdGV4dF9vYmogPSBBVEtfVEVYVChvYmopOwotICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRfb2JqKSk7CisgICAgdGV4dE9iaiA9IEFUS19URVhU
KG9iaik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iaikpOworCisgICAgcnVuR2V0
VGV4dFRlc3RzKHRleHRPYmopOworCisgICAgZ19vYmplY3RfdW5yZWYob2JqKTsKKyAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRl
eHRJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUodm9pZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3OworICAgIEF0a09iamVjdCAqb2JqLCAqb2JqMSwgKm9iajI7CisgICAgR01haW5Mb29w
ICpsb29wOworICAgIEF0a1RleHQgKnRleHRPYmoxLCAqdGV4dE9iajI7CisKKyAgICB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYyA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29u
dGVudHNJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGxv
b3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3RpbWVvdXRfYWRkKDEw
MCwgKEdTb3VyY2VGdW5jKWJhaWxPdXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKworICAgIC8qIEdldCB0byB0aGUgaW5uZXIgQXRrVGV4dCBvYmplY3QgKi8KKyAgICBvYmog
PSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdf
YXNzZXJ0KG9iaik7CisgICAgb2JqMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqLCAwKTsKKyAgICBnX2Fzc2VydChvYmoxKTsKKyAgICBvYmoyID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmosIDEpOworICAgIGdfYXNzZXJ0KG9iajIpOworCisgICAgdGV4
dE9iajEgPSBBVEtfVEVYVChvYmoxKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2Jq
MSkpOworICAgIHRleHRPYmoyID0gQVRLX1RFWFQob2JqMik7CisgICAgZ19hc3NlcnQoQVRLX0lT
X1RFWFQodGV4dE9iajIpKTsKIAotICAgIHJ1bl9nZXRfdGV4dF90ZXN0cyh0ZXh0X29iaik7Cisg
ICAgY2hhciAqdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KHRleHRPYmoxLCAwLCAtMSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiVGhpcyBpcyBhIHRlc3QuIik7CiAKKyAgICB0ZXh0
ID0gYXRrX3RleHRfZ2V0X3RleHQodGV4dE9iajIsIDAsIDEyKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dCwgPT0sICJIZWxsbyB3b3JsZC4iKTsKKworICAgIGdfb2JqZWN0X3VucmVmKG9iajEp
OworICAgIGdfb2JqZWN0X3VucmVmKG9iajIpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5kQm9k
eU1vZGVyYXRlKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBBdGtP
YmplY3QgKm9iaiwgKm9iajEsICpvYmoyOworICAgIEdNYWluTG9vcCAqbG9vcDsKKyAgICBBdGtU
ZXh0ICp0ZXh0T2JqMSwgKnRleHRPYmoyOworCisgICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcp
OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2MgPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvYyk7CisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzSW5QYXJhZ3JhcGhB
bmRCb2R5TW9kZXJhdGUsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5j
KWJhaWxPdXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIC8qIEdl
dCB0byB0aGUgaW5uZXIgQXRrVGV4dCBvYmplY3QgKi8KKyAgICBvYmogPSBndGtfd2lkZ2V0X2dl
dF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KG9iaik7Cisg
ICAgb2JqMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsKKyAgICBn
X2Fzc2VydChvYmoxKTsKKyAgICBvYmoyID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmosIDEpOworICAgIGdfYXNzZXJ0KG9iajIpOworCisgICAgdGV4dE9iajEgPSBBVEtfVEVY
VChvYmoxKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2JqMSkpOworICAgIHRleHRP
YmoyID0gQVRLX1RFWFQob2JqMik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iajIp
KTsKKworICAgIGNoYXIgKnRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0T2JqMSwgMCwgLTEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlRoaXMgaXMgYSB0ZXN0LiIpOworCisg
ICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KHRleHRPYmoyLCAwLCA1Myk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRleHQsID09LCAiSGVsbG8gd29ybGQuXG5UaGlzIHNlbnRlbmNlIGlzIGdyZWVu
LlxuVGhpcyBvbmUgaXMgbm90LiIpOworCisgICAgZ19vYmplY3RfdW5yZWYob2JqMSk7CisgICAg
Z19vYmplY3RfdW5yZWYob2JqMik7CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CiB9CiAK
QEAgLTM2NCwxNiArNDU1LDE4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAg
ICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CiAKICAgICBnX3Rlc3RfYnVnX2Jh
c2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9hdGsvZ2V0X3RleHRfYXRfb2Zmc2V0IiwgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0
X29mZnNldCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRfdGV4dF9hdF9v
ZmZzZXRfZm9ybXMiLCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3RleHRfYXRfb2Zmc2V0X2Zvcm1zKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldF90ZXh0X2F0X29mZnNldF9uZXds
aW5lcyIsIHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfbmV3bGluZXMpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRhcmVh
IiwgdGVzdF93ZWJraXRfYXRrX2dldF90ZXh0X2F0X29mZnNldF90ZXh0YXJlYSk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dF9pbnB1dCIs
IHRlc3Rfd2Via2l0X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dF9pbnB1dCk7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXQiLCB0ZXN0V2Via2l0QXRr
R2V0VGV4dEF0T2Zmc2V0KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRl
eHRBdE9mZnNldEZvcm1zIiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldEZvcm1zKTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRBdE9mZnNldE5ld2xpbmVzIiwg
dGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldE5ld2xpbmVzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvYXRrL2dldFRleHRBdE9mZnNldFRleHRhcmVhIiwgdGVzdFdlYmtpdEF0a0dl
dFRleHRBdE9mZnNldFRleHRhcmVhKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRr
L2dldFRleHRBdE9mZnNldFRleHRJbnB1dCIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRU
ZXh0SW5wdXQpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEluUGFy
YWdyYXBoQW5kQm9keVNpbXBsZSIsIHRlc3RXZWJraXRBdGtHZXRUZXh0SW5QYXJhZ3JhcGhBbmRC
b2R5U2ltcGxlKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRJblBh
cmFncmFwaEFuZEJvZHlNb2RlcmF0ZSIsIHRlc3RXZWJraXRBdGtHZXRUZXh0SW5QYXJhZ3JhcGhB
bmRCb2R5TW9kZXJhdGUpOwogICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwogfQogCiAjZWxzZQot
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQogewogICAgIGdfY3JpdGljYWwoIllvdSB3aWxsIG5lZWQgYXQgbGVhc3QgZ2xpYi0y
LjE2LjAgYW5kIGd0ay0yLjE0LjAgdG8gcnVuIHRoZSB1bml0IHRlc3RzLiBEb2luZyBub3RoaW5n
IG5vdy4iKTsKICAgICByZXR1cm4gMDsKLS0gCjEuNi41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46926</attachid>
            <date>2010-01-19 10:43:27 -0800</date>
            <delta_ts>2010-01-19 13:31:07 -0800</delta_ts>
            <desc>Handle the issue from comment #28, add sanity checks to objectAndOffsetUnignored, new tests</desc>
            <filename>30883-6.patch</filename>
            <type>text/plain</type>
            <size>14896</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSA5YzUxYTJmODI3NWUwNTRlNjhhODZlMTcwYjlmMDRjMGZkNmYwNjNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBUdWUsIDE5IEphbiAyMDEwIDEzOjM0OjExIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0g
MDEwLTAxLTE5IEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5jb20+Cgog
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA4ODMKICAgICAgICBbR3RrXSBJbXBsZW1lbnQg
QXRrVGV4dCBmb3IgSFRNTCBlbGVtZW50cyB3aGljaCBjb250YWluIHRleHQKCiAgICAgICAgTW92
ZXMgdGhlIHRleHQgYXNzZW1ibGluZyBmdW5jdGlvbmFsaXR5IGZyb20gZ2V0UGFuZ29MYXlvdXRG
b3JBdGsgdG8KICAgICAgICB0ZXh0Rm9yT2JqZWN0LCB3aGljaCB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF90ZXh0IG5vdyBmYWxscyBiYWNrIG9uCiAgICAgICAgd2hlbiBpdCBjb21lcyB1cCBl
bXB0eS4KCiAgICAgICAgQWRkcyBhIGNoZWNrIGluIHRleHRGb3JPYmplY3Qgc28gdGhhdCB3ZSBk
b24ndCBkb3VibGUtYWRkIG5ld2xpbmVzCiAgICAgICAgd2hlbiB3ZSBoYXZlIGEgQlIuCgogICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3Bw
OgogICAgICAgICh0ZXh0Rm9yT2JqZWN0KToKICAgICAgICAoZ2V0UGFuZ29MYXlvdXRGb3JBdGsp
OgogICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KToKCjIwMTAtMDEtMTkg
IEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5jb20+CgogICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzA4ODMKICAgICAgICBbR3RrXSBJbXBsZW1lbnQgQXRrVGV4dCBm
b3IgSFRNTCBlbGVtZW50cyB3aGljaCBjb250YWluIHRleHQKCiAgICAgICAgQWRkcyB0d28gbmV3
cyB0ZXN0cy4KCiAgICAgICAgKiB0ZXN0cy90ZXN0YXRrLmMKICAgICAgICAodGVzdFdlYmtpdEF0
a0dldFRleHRJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUpOgogICAgICAgICh0ZXN0V2Via2l0QXRr
R2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keU1vZGVyYXRlKToKICAgICAgICAobWFpbik6Ci0tLQog
V2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5
ICsrKwogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgICAgICAgICAg
fCAgMTI4ICsrKysrKysrKysrLS0tLS0tLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArKwogV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRr
LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk0ICsrKysrKysrKysrKysrCiA0IGZpbGVz
IGNoYW5nZWQsIDIwMSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDIzODUwY2YuLjY3
YWZhNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDEtMTkgSm9hbm1hcmllIERpZ2dzICA8am9hbm1h
cmllLmRpZ2dzQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA4
ODMKKyAgICAgICAgW0d0a10gSW1wbGVtZW50IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMgd2hp
Y2ggY29udGFpbiB0ZXh0CisKKyAgICAgICAgTW92ZXMgdGhlIHRleHQgYXNzZW1ibGluZyBmdW5j
dGlvbmFsaXR5IGZyb20gZ2V0UGFuZ29MYXlvdXRGb3JBdGsgdG8KKyAgICAgICAgdGV4dEZvck9i
amVjdCwgd2hpY2ggd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCBub3cgZmFsbHMgYmFj
ayBvbgorICAgICAgICB3aGVuIGl0IGNvbWVzIHVwIGVtcHR5LgorCisgICAgICAgIEFkZHMgYSBj
aGVjayBpbiB0ZXh0Rm9yT2JqZWN0IHNvIHRoYXQgd2UgZG9uJ3QgZG91YmxlLWFkZCBuZXdsaW5l
cworICAgICAgICB3aGVuIHdlIGhhdmUgYSBCUi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHRleHRGb3JP
YmplY3QpOgorICAgICAgICAoZ2V0UGFuZ29MYXlvdXRGb3JBdGspOgorICAgICAgICAod2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCk6CisKIDIwMTAtMDEtMTcgIE1hcnRpbiBSb2JpbnNv
biAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCBkMWI0
NjNjLi44NzA3MGNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtODE1LDM4ICs4MTUsNiBA
QCBzdGF0aWMgdm9pZCBhdGtfc2VsZWN0aW9uX2ludGVyZmFjZV9pbml0KEF0a1NlbGVjdGlvbklm
YWNlKiBpZmFjZSkKIAogLy8gVGV4dAogCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfZ2V0X3RleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRP
ZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4
dCk7Ci0gICAgU3RyaW5nIHJldDsKLSAgICB1bnNpZ25lZCBzdGFydCA9IHN0YXJ0T2Zmc2V0Owot
ICAgIGlmIChlbmRPZmZzZXQgPT0gLTEpIHsKLSAgICAgICAgZW5kT2Zmc2V0ID0gY29yZU9iamVj
dC0+c3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKLSAgICAgICAgaWYgKCFlbmRPZmZzZXQpCi0gICAg
ICAgICAgICBlbmRPZmZzZXQgPSBjb3JlT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3Ro
KCk7Ci0gICAgfQotICAgIGludCBsZW5ndGggPSBlbmRPZmZzZXQgLSBzdGFydE9mZnNldDsKLQot
ICAgIGlmIChjb3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkpCi0gICAgICAgIHJldCA9IGNvcmVP
YmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFydCwgbGVuZ3RoKSk7
Ci0gICAgZWxzZQotICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCku
c3Vic3RyaW5nKHN0YXJ0LCBsZW5ndGgpOwotCi0gICAgcmV0dXJuIGdfc3RyZHVwKHJldC51dGY4
KCkuZGF0YSgpKTsKLX0KLQotc3RhdGljIEdhaWxUZXh0VXRpbCogZ2V0R2FpbFRleHRVdGlsRm9y
QXRrKEF0a1RleHQqIHRleHRPYmplY3QpCi17Ci0gICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0
X2dldF9kYXRhKEdfT0JKRUNUKHRleHRPYmplY3QpLCAid2Via2l0LWFjY2Vzc2libGUtZ2FpbC10
ZXh0LXV0aWwiKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdh
aWxUZXh0VXRpbCo+KGRhdGEpOwotCi0gICAgR2FpbFRleHRVdGlsKiBnYWlsVGV4dFV0aWwgPSBn
YWlsX3RleHRfdXRpbF9uZXcoKTsKLSAgICBnYWlsX3RleHRfdXRpbF90ZXh0X3NldHVwKGdhaWxU
ZXh0VXRpbCwgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCh0ZXh0T2JqZWN0LCAwLCAt
MSkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QodGV4dE9iamVjdCksICJ3
ZWJraXQtYWNjZXNzaWJsZS1nYWlsLXRleHQtdXRpbCIsIGdhaWxUZXh0VXRpbCwgZ19vYmplY3Rf
dW5yZWYpOwotICAgIHJldHVybiBnYWlsVGV4dFV0aWw7Ci19Ci0KIHN0YXRpYyBnY2hhciogdXRm
OFN1YnN0cihjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IHN0YXJ0LCBnaW50IGVuZCkKIHsKICAg
ICBBU1NFUlQoc3RyaW5nKTsKQEAgLTg5MCwyNCArODU4LDEwIEBAIHN0YXRpYyBnY2hhciogY29u
dmVydFVuaUNoYXJUb1VURjgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGdpbnQgbGVuZ3RoLCBp
bnQgZnJvCiAgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmV0LCBGQUxTRSk7CiB9CiAKLXN0YXRp
YyBQYW5nb0xheW91dCogZ2V0UGFuZ29MYXlvdXRGb3JBdGsoQXRrVGV4dCogdGV4dE9iamVjdCkK
K2djaGFyKiB0ZXh0Rm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIGFjY09iamVj
dCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0T2Jq
ZWN0KTsKLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBjb3JlT2JqZWN0LT5kb2N1bWVu
dCgpLT52aWV3KCktPmhvc3RXaW5kb3coKTsKLSAgICBpZiAoIWhvc3RXaW5kb3cpCi0gICAgICAg
IHJldHVybiAwOwotICAgIFBsYXRmb3JtUGFnZUNsaWVudCB3ZWJWaWV3ID0gaG9zdFdpbmRvdy0+
cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgaWYgKCF3ZWJWaWV3KQotICAgICAgICByZXR1cm4g
MDsKLQogICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKIAotICAgIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QqIGFjY09iamVjdCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QqPihjb3JlT2JqZWN0KTsKLSAgICBpZiAoIWFjY09iamVjdCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCB0aGUgbGF5b3V0IGFzIGl0
IGFwcGVhcnMgb24gdGhlIHNjcmVlbgogICAgIC8vIEZvciB0ZXh0IGNvbnRyb2xzLCB3ZSBjYW4g
Z2V0IHRoZSB0ZXh0IGxpbmUgYnkgbGluZS4KICAgICBpZiAoYWNjT2JqZWN0LT5pc1RleHRDb250
cm9sKCkpIHsKICAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IGFjY09iamVjdC0+dGV4dExl
bmd0aCgpOwpAQCAtOTQ1LDE0ICs4OTksNzMgQEAgc3RhdGljIFBhbmdvTGF5b3V0KiBnZXRQYW5n
b0xheW91dEZvckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgICAgICAgICAgICAgIGdfc3Ry
aW5nX2FwcGVuZChzdHIsIHRleHQpOwogICAgICAgICAgICAgICAgIC8vIE5ld2xpbmUgY2hhcnMg
aW4gdGhlIHNvdXJjZSByZXN1bHQgaW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28gY2hlY2sKICAg
ICAgICAgICAgICAgICAvLyBiZWZvcmUgYWRkaW5nIGEgbmV3bGluZSBpbiB0aGUgbGF5b3V0LiBT
ZWUgYnVnIDI1NDE1IGNvbW1lbnQgIzc4LgotICAgICAgICAgICAgICAgIGlmICghYm94LT5uZXh0
T25MaW5lRXhpc3RzKCkpCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc2libGluZyBp
cyBhIEJSLCB3ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3ZSBleGFtaW5lIHRoYXQgY2hpbGQu
CisgICAgICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAmJiAoIW9iai0+
bmV4dFNpYmxpbmcoKSB8fCAhb2JqLT5uZXh0U2libGluZygpLT5pc0JSKCkpKQogICAgICAgICAg
ICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKICAgICAgICAgICAgICAgICBi
b3ggPSBib3gtPm5leHRUZXh0Qm94KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Cit9CisKK3N0YXRpYyBnY2hh
ciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChBdGtUZXh0KiB0ZXh0LCBnaW50IHN0
YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBTdHJpbmcgcmV0OworICAgIHVuc2lnbmVkIHN0
YXJ0ID0gc3RhcnRPZmZzZXQ7CisgICAgaWYgKGVuZE9mZnNldCA9PSAtMSkgeworICAgICAgICBl
bmRPZmZzZXQgPSBjb3JlT2JqZWN0LT5zdHJpbmdWYWx1ZSgpLmxlbmd0aCgpOworICAgICAgICBp
ZiAoIWVuZE9mZnNldCkKKyAgICAgICAgICAgIGVuZE9mZnNldCA9IGNvcmVPYmplY3QtPnRleHRV
bmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKKyAgICB9CisgICAgaW50IGxlbmd0aCA9IGVuZE9mZnNl
dCAtIHN0YXJ0T2Zmc2V0OworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkK
KyAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKFBsYWluVGV4dFJh
bmdlKHN0YXJ0LCBsZW5ndGgpKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IGNvcmVPYmplY3Qt
PnRleHRVbmRlckVsZW1lbnQoKS5zdWJzdHJpbmcoc3RhcnQsIGxlbmd0aCk7CisKKyAgICBpZiAo
IXJldC5sZW5ndGgoKSkgeworICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gYXQgbGVhc3Qgd2l0
aCBhbm9ueW1vdXMgUmVuZGVyQmxvY2tzIChlLmcuIGJvZHkgdGV4dCBhbW9uZ3N0IHBhcmFncmFw
aHMpCisgICAgICAgIHJldCA9IFN0cmluZyh0ZXh0Rm9yT2JqZWN0KHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QqPihjb3JlT2JqZWN0KSkpOworICAgICAgICBpZiAoIWVuZE9m
ZnNldCkKKyAgICAgICAgICAgIGVuZE9mZnNldCA9IHJldC5sZW5ndGgoKTsKKyAgICAgICAgcmV0
ID0gcmV0LnN1YnN0cmluZyhzdGFydCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOworICAgIH0K
KworICAgIHJldHVybiBnX3N0cmR1cChyZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK3N0YXRpYyBH
YWlsVGV4dFV0aWwqIGdldEdhaWxUZXh0VXRpbEZvckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQor
eworICAgIGdwb2ludGVyIGRhdGEgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVCh0ZXh0T2Jq
ZWN0KSwgIndlYmtpdC1hY2Nlc3NpYmxlLWdhaWwtdGV4dC11dGlsIik7CisgICAgaWYgKGRhdGEp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHYWlsVGV4dFV0aWwqPihkYXRhKTsKIAotICAg
IFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBndGtfd2lkZ2V0X2NyZWF0ZV9wYW5nb19sYXlvdXQoc3Rh
dGljX2Nhc3Q8R3RrV2lkZ2V0Kj4od2ViVmlldyksIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSkp
OworICAgIEdhaWxUZXh0VXRpbCogZ2FpbFRleHRVdGlsID0gZ2FpbF90ZXh0X3V0aWxfbmV3KCk7
CisgICAgZ2FpbF90ZXh0X3V0aWxfdGV4dF9zZXR1cChnYWlsVGV4dFV0aWwsIHdlYmtpdF9hY2Nl
c3NpYmxlX3RleHRfZ2V0X3RleHQodGV4dE9iamVjdCwgMCwgLTEpKTsKKyAgICBnX29iamVjdF9z
ZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHRleHRPYmplY3QpLCAid2Via2l0LWFjY2Vzc2libGUtZ2Fp
bC10ZXh0LXV0aWwiLCBnYWlsVGV4dFV0aWwsIGdfb2JqZWN0X3VucmVmKTsKKyAgICByZXR1cm4g
Z2FpbFRleHRVdGlsOworfQorCitzdGF0aWMgUGFuZ29MYXlvdXQqIGdldFBhbmdvTGF5b3V0Rm9y
QXRrKEF0a1RleHQqIHRleHRPYmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCA9IGNvcmUodGV4dE9iamVjdCk7CisKKyAgICBIb3N0V2luZG93KiBob3N0V2luZG93
ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7CisgICAgaWYg
KCFob3N0V2luZG93KQorICAgICAgICByZXR1cm4gMDsKKyAgICBQbGF0Zm9ybVBhZ2VDbGllbnQg
d2ViVmlldyA9IGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIGlmICghd2Vi
VmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KiBhY2NPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4oY29y
ZU9iamVjdCk7CisgICAgaWYgKCFhY2NPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggdGhlIGxheW91dCBhcyBpdCBhcHBlYXJzIG9uIHRoZSBz
Y3JlZW4KKyAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ3RrX3dpZGdldF9jcmVhdGVfcGFuZ29f
bGF5b3V0KHN0YXRpY19jYXN0PEd0a1dpZGdldCo+KHdlYlZpZXcpLCB0ZXh0Rm9yT2JqZWN0KGFj
Y09iamVjdCkpOwogICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QodGV4dE9iamVj
dCksICJ3ZWJraXQtYWNjZXNzaWJsZS1wYW5nby1sYXlvdXQiLCBsYXlvdXQsIGdfb2JqZWN0X3Vu
cmVmKTsKICAgICByZXR1cm4gbGF5b3V0OwogfQpAQCAtMTc0Nyw2ICsxNzYwLDggQEAgQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0QW5kT2Zmc2V0VW5pZ25vcmVkKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QsIGkKIHsKICAgICBOb2RlKiBlbmROb2RlID0gc3RhdGljX2Nhc3Q8QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KGNvcmVPYmplY3QpLT5yZW5kZXJlcigpLT5ub2RlKCk7
CiAgICAgaW50IGVuZE9mZnNldCA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpLmVuZCgpLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICAvLyBJbmRpY2F0aW9uIHRoYXQgc29tZXRo
aW5nIGJvZ3VzIGhhcyB0cmFuc3BpcmVkLgorICAgIG9mZnNldCA9IC0xOwogCiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogcmVhbE9iamVjdCA9IGNvcmVPYmplY3Q7CiAgICAgaWYgKHJlYWxPYmpl
Y3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKQEAgLTE3NTUsMTEgKzE3NzAsMTYgQEAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0QW5kT2Zmc2V0VW5pZ25vcmVkKEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QsIGkKICAgICBpZiAoaWdub3JlTGlua3MgJiYgcmVhbE9iamVjdC0+
aXNMaW5rKCkpCiAgICAgICAgIHJlYWxPYmplY3QgPSByZWFsT2JqZWN0LT5wYXJlbnRPYmplY3RV
bmlnbm9yZWQoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZU9mQ29udGVudHMo
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KHJlYWxPYmplY3QpLT5yZW5k
ZXJlcigpLT5ub2RlKCkpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHJhbmdlLT5z
ZXRFbmRCZWZvcmUoZW5kTm9kZSwgZWMpOwotICAgIG9mZnNldCA9IHJhbmdlLT50ZXh0KCkubGVu
Z3RoKCkgKyBlbmRPZmZzZXQ7Ci0KKyAgICBOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCo+KHJlYWxPYmplY3QpLT5yZW5kZXJlcigpLT5ub2RlKCk7Cisg
ICAgaWYgKG5vZGUpIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlT2ZDb250
ZW50cyhub2RlKTsKKyAgICAgICAgaWYgKHJhbmdlLT5vd25lckRvY3VtZW50KCkgPT0gbm9kZS0+
ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAg
ICAgICByYW5nZS0+c2V0RW5kQmVmb3JlKGVuZE5vZGUsIGVjKTsKKyAgICAgICAgICAgIGlmIChy
YW5nZS0+Ym91bmRhcnlQb2ludHNWYWxpZCgpKQorICAgICAgICAgICAgICAgIG9mZnNldCA9IHJh
bmdlLT50ZXh0KCkubGVuZ3RoKCkgKyBlbmRPZmZzZXQ7CisgICAgICAgIH0KKyAgICB9CiAgICAg
cmV0dXJuIHJlYWxPYmplY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYzQxOGUzYS4uM2ZlYmZiZCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMC0wMS0xOSAgSm9hbm1hcmllIERpZ2dzICA8am9hbm1hcmllLmRpZ2dz
QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA4ODMKKyAgICAg
ICAgW0d0a10gSW1wbGVtZW50IEF0a1RleHQgZm9yIEhUTUwgZWxlbWVudHMgd2hpY2ggY29udGFp
biB0ZXh0CisKKyAgICAgICAgQWRkcyB0d28gbmV3cyB0ZXN0cy4KKworICAgICAgICAqIHRlc3Rz
L3Rlc3RhdGsuYworICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRleHRJblBhcmFncmFwaEFuZEJv
ZHlTaW1wbGUpOgorICAgICAgICAodGVzdFdlYmtpdEF0a0dldFRleHRJblBhcmFncmFwaEFuZEJv
ZHlNb2RlcmF0ZSk6CisgICAgICAgIChtYWluKToKKwogMjAxMC0wMS0xNSAgQWxlamFuZHJvIEcu
IENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9w
ZXouCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGF0ay5jCmluZGV4IDdmODdiZGMuLjdkYjI3NGEgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGF0ay5jCisrKyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCkBA
IC0zNCw2ICszNCwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNJblRleHRhcmVhID0g
IjxodG1sPjxib2R5Pjx0ZXh0YXJlYSBjb2xzPSc4MCc+VGhpcyBpcwogCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29udGVudHNJblRleHRJbnB1dCA9ICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ndGV4
dCcgc2l6ZT0nODAnIHZhbHVlPSdUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNl
bnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuJy8+PC9ib2R5PjwvaHRtbD4iOwogCitzdGF0aWMg
Y29uc3QgY2hhciogY29udGVudHNJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUgPSAiPGh0bWw+PGJv
ZHk+PHA+VGhpcyBpcyBhIHRlc3QuPC9wPkhlbGxvIHdvcmxkLjwvYm9keT48L2h0bWw+IjsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUgPSAi
PGh0bWw+PGJvZHk+PHA+VGhpcyBpcyBhIHRlc3QuPC9wPkhlbGxvIHdvcmxkLjxiciAvPjxmb250
IGNvbG9yPScjMDBjYzAwJz5UaGlzIHNlbnRlbmNlIGlzIGdyZWVuLjwvZm9udD48YnIgLz5UaGlz
IG9uZSBpcyBub3QuPC9ib2R5PjwvaHRtbD4iOworCiBzdGF0aWMgZ2Jvb2xlYW4gYmFpbF9vdXQo
R01haW5Mb29wKiBsb29wKQogewogICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3Ap
KQpAQCAtMzU4LDYgKzM2Miw5NCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Rl
eHRfYXRfb2Zmc2V0X3RleHRfaW5wdXQodm9pZCkKICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3
KTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRleHRJblBhcmFncmFwaEFuZEJv
ZHlTaW1wbGUodm9pZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIEF0a09i
amVjdCogb2JqOworICAgIEF0a09iamVjdCogb2JqMTsKKyAgICBBdGtPYmplY3QqIG9iajI7Cisg
ICAgR01haW5Mb29wKiBsb29wOworICAgIEF0a1RleHQqIHRleHRPYmoxOworICAgIEF0a1RleHQq
IHRleHRPYmoyOworCisgICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2MgPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvYyk7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzSW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlLCBO
VUxMLCBOVUxMLCBOVUxMKTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYyliYWlsX291dCwgbG9vcCk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogR2V0IHRvIHRoZSBpbm5lciBB
dGtUZXh0IG9iamVjdCAqLworICAgIG9iaiA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RL
X1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQob2JqKTsKKyAgICBvYmoxID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDApOworICAgIGdfYXNzZXJ0KG9iajEpOwor
ICAgIG9iajIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMSk7CisgICAg
Z19hc3NlcnQob2JqMik7CisKKyAgICB0ZXh0T2JqMSA9IEFUS19URVhUKG9iajEpOworICAgIGdf
YXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmoxKSk7CisgICAgdGV4dE9iajIgPSBBVEtfVEVYVChv
YmoyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2JqMikpOworCisgICAgY2hhciAq
dGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KHRleHRPYmoxLCAwLCAtMSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHRleHQsID09LCAiVGhpcyBpcyBhIHRlc3QuIik7CisKKyAgICB0ZXh0ID0gYXRrX3Rl
eHRfZ2V0X3RleHQodGV4dE9iajIsIDAsIDEyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwg
PT0sICJIZWxsbyB3b3JsZC4iKTsKKworICAgIGdfb2JqZWN0X3VucmVmKG9iajEpOworICAgIGdf
b2JqZWN0X3VucmVmKG9iajIpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keU1vZGVyYXRl
KHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBBdGtPYmplY3QqIG9i
ajsKKyAgICBBdGtPYmplY3QqIG9iajE7CisgICAgQXRrT2JqZWN0KiBvYmoyOworICAgIEdNYWlu
TG9vcCogbG9vcDsKKyAgICBBdGtUZXh0KiB0ZXh0T2JqMTsKKyAgICBBdGtUZXh0KiB0ZXh0T2Jq
MjsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2MpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBjb250ZW50c0luUGFyYWdyYXBoQW5kQm9keU1vZGVyYXRlLCBOVUxMLCBO
VUxMLCBOVUxMKTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisg
ICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYyliYWlsX291dCwgbG9vcCk7CisgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0
IG9iamVjdCAqLworICAgIG9iaiA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdF
VCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQob2JqKTsKKyAgICBvYmoxID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDApOworICAgIGdfYXNzZXJ0KG9iajEpOworICAgIG9i
ajIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMSk7CisgICAgZ19hc3Nl
cnQob2JqMik7CisKKyAgICB0ZXh0T2JqMSA9IEFUS19URVhUKG9iajEpOworICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHRleHRPYmoxKSk7CisgICAgdGV4dE9iajIgPSBBVEtfVEVYVChvYmoyKTsK
KyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2JqMikpOworCisgICAgY2hhciAqdGV4dCA9
IGF0a190ZXh0X2dldF90ZXh0KHRleHRPYmoxLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHRleHQsID09LCAiVGhpcyBpcyBhIHRlc3QuIik7CisKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0
X3RleHQodGV4dE9iajIsIDAsIDUzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJI
ZWxsbyB3b3JsZC5cblRoaXMgc2VudGVuY2UgaXMgZ3JlZW4uXG5UaGlzIG9uZSBpcyBub3QuIik7
CisKKyAgICBnX29iamVjdF91bnJlZihvYmoxKTsKKyAgICBnX29iamVjdF91bnJlZihvYmoyKTsK
KyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogewogICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7CkBAIC0zNjksNiArNDYxLDgg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9hdGsvZ2V0X3RleHRfYXRfb2Zmc2V0X25ld2xpbmVzIiwgdGVzdF93ZWJraXRfYXRr
X2dldF90ZXh0X2F0X29mZnNldF9uZXdsaW5lcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L2F0ay9nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dGFyZWEiLCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3RleHRfYXRfb2Zmc2V0X3RleHRhcmVhKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
YXRrL2dldF90ZXh0X2F0X29mZnNldF90ZXh0X2lucHV0IiwgdGVzdF93ZWJraXRfYXRrX2dldF90
ZXh0X2F0X29mZnNldF90ZXh0X2lucHV0KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
YXRrL2dldFRleHRJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4
dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay9nZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUiLCB0ZXN0V2Via2l0QXRrR2V0
VGV4dEluUGFyYWdyYXBoQW5kQm9keU1vZGVyYXRlKTsKICAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKIH0KIAotLSAKMS42LjUKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>