<?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>74533</bug_id>
          
          <creation_ts>2011-12-14 13:11:59 -0800</creation_ts>
          <short_desc>REGRESSION(r102619): Reproducible crash closing window with video + poster image inside an object element</short_desc>
          <delta_ts>2012-03-21 11:59:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74607</dependson>
          <blocked>74555</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>kbr</cc>
    
    <cc>mrowe</cc>
    
    <cc>ossy</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>521225</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 13:11:59 -0800</bug_when>
    <thetext>REGRESSION(r102619): Reproducible crash closing window with video + poster image inside an object element

0   com.apple.WebCore             	0x000000010ca60dac WebCore::FrameLoader::loadedResourceFromMemoryCache(WebCore::CachedResource*) + 76
1   com.apple.WebCore             	0x000000010c92fb15 WebCore::CachedResourceLoader::requestResource(WebCore::CachedResource::Type, WebCore::ResourceRequest&amp;, WTF::String const&amp;, WebCore::ResourceLoaderOptions const&amp;, WebCore::ResourceLoadPriority, bool) + 821
2   com.apple.WebCore             	0x000000010c92f702 WebCore::CachedResourceLoader::requestImage(WebCore::ResourceRequest&amp;) + 402
3   com.apple.WebCore             	0x000000010c42d1d1 WebCore::ImageLoader::updateFromElement() + 769
4   com.apple.WebCore             	0x000000010c470389 WebCore::HTMLVideoElement::attach() + 121
5   com.apple.WebCore             	0x000000010c30ec5c WebCore::ContainerNode::attach() + 28
6   com.apple.WebCore             	0x000000010c31d9d9 WebCore::Element::attach() + 105
7   com.apple.WebCore             	0x000000010c30ec5c WebCore::ContainerNode::attach() + 28
8   com.apple.WebCore             	0x000000010c31d9d9 WebCore::Element::attach() + 105
9   com.apple.WebCore             	0x000000010c34e520 WebCore::Element::recalcStyle(WebCore::Node::StyleChange) + 592
10  com.apple.WebCore             	0x000000010ca9ea2b WebCore::HTMLPlugInImageElement::documentWillBecomeInactive() + 203
11  com.apple.WebCore             	0x000000010c375479 WebCore::Document::detach() + 409
12  com.apple.WebCore             	0x000000010c300c48 WebCore::Frame::setView(WTF::PassRefPtr&lt;WebCore::FrameView&gt;) + 72
13  com.apple.WebCore             	0x000000010c373a9a WebCore::FrameLoader::detachFromParent() + 314
14  com.apple.WebKit2             	0x000000010bd7f59a WebKit::WebPage::close() + 306

This is due to running what was intended to be &quot;suspend&quot; code at teardown time.

Fix is forthcoming.

In radar as &lt;rdar://problem/10576732&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521266</commentid>
    <comment_count>1</comment_count>
      <attachid>119290</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 13:54:58 -0800</bug_when>
    <thetext>Created attachment 119290
Patch v1 - Fix + layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521270</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 13:58:57 -0800</bug_when>
    <thetext>Attachment 119290 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1

Source/WebCore/html/HTMLPlugInImageElement.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521271</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 13:59:58 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 119290 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1
&gt; 
&gt; Source/WebCore/html/HTMLPlugInImageElement.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Total errors found: 1 in 7 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Will fix this, and clean up the layout test some more - Just realized it had unnecessary remnants from a past version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521291</commentid>
    <comment_count>4</comment_count>
      <attachid>119297</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 14:27:57 -0800</bug_when>
    <thetext>Created attachment 119297
Patch v2 - Style fix and better layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521296</commentid>
    <comment_count>5</comment_count>
      <attachid>119297</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-14 14:32:15 -0800</bug_when>
    <thetext>Comment on attachment 119297
Patch v2 - Style fix and better layout test

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

&gt; Source/WebCore/html/HTMLPlugInImageElement.h:59
&gt; +    virtual bool canSuspend() const OVERRIDE;
&gt; +    virtual void suspend(ReasonForSuspension) OVERRIDE;
&gt; +    virtual void resume() OVERRIDE;

Do these need to be public? Why can’t they be protected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521312</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 14:47:15 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 119297 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119297&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.h:59
&gt; &gt; +    virtual bool canSuspend() const OVERRIDE;
&gt; &gt; +    virtual void suspend(ReasonForSuspension) OVERRIDE;
&gt; &gt; +    virtual void resume() OVERRIDE;
&gt; 
&gt; Do these need to be public? Why can’t they be protected?

Good point, fixing before landing.  Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521322</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 14:52:33 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/102829</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521362</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-14 15:32:00 -0800</bug_when>
    <thetext>I don&apos;t think that using ActiveDOMObject here is right. In particular, it looks like the suspend() function can fire events, breaking iteration over the objects in ScriptExecutionContext.

ActiveDOMObject was meant as a means to keep non-node objects alive, and using it with nodes might still be causing issues along the lines of bug 45309. Also, as you mentioned on IRC, the semantics of moving ActiveDOMObject nodes between documents are unclear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521373</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 15:40:50 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I don&apos;t think that using ActiveDOMObject here is right. In particular, it looks like the suspend() function can fire events, breaking iteration over the objects in ScriptExecutionContext.

Breaking how?  Can&apos;t the ScriptExecutionContext iterate in a manner that won&apos;t be broken?

&gt; ActiveDOMObject was meant as a means to keep non-node objects alive, and using it with nodes might still be causing issues along the lines of bug 45309.

That might have been one of it&apos;s purposes, but doesn&apos;t it also do much more than fits the Document activation callback use case quite well?  I think that&apos;s why over time more elements have found themselves moving to ActiveDOMObject.

&gt;Also, as you mentioned on IRC, the semantics of moving ActiveDOMObject nodes between documents are unclear.

Indeed.  Such semantics are only clear for elements that override willMoveToNewOwnerDocument and didMoveToNewOwnerDocument, which is dreadfully few.  In general our support for moving objects between Documents is horrible.  Making ActiveDOMObject aware of this would be useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521387</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-14 15:51:36 -0800</bug_when>
    <thetext>&gt; Breaking how?  Can&apos;t the ScriptExecutionContext iterate in a manner that won&apos;t be broken?

An event handler can add or remove ActiveDOMObjects.

This was previously discussed at length in the context of IndexedDB, and no, it doesn&apos;t seem easy to change the code in a way that would be sufficiently robust. No matter how we change iteration in ScriptExecutionContext, there will be cases that don&apos;t work right in general case.

Since this patch almost certainly introduces a security bug, it should probably be rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521403</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-14 16:03:20 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Breaking how?  Can&apos;t the ScriptExecutionContext iterate in a manner that won&apos;t be broken?
&gt; 
&gt; An event handler can add or remove ActiveDOMObjects.
&gt; 
&gt; This was previously discussed at length in the context of IndexedDB, and no, it doesn&apos;t seem easy to change the code in a way that would be sufficiently robust. No matter how we change iteration in ScriptExecutionContext, there will be cases that don&apos;t work right in general case.
&gt; 
&gt; Since this patch almost certainly introduces a security bug, it should probably be rolled out.

Can you explain why this patch almost certainly introduces a security bug whereas the Media and Marquee element stuff do not, and should not be rolled out?

I&apos;m still unclear on what the actual security bug is.

Why can&apos;t we copy the set of objects to a vector before iterating them...?

Going forward we should have precisely *one* mechanism for handling suspend/resume instead of the current two mechanisms.  I think the right course is to fix the shortcomings in the obviously superior mechanism so we can get rid of the obviously inferior one (which I already filed as https://bugs.webkit.org/show_bug.cgi?id=74545)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521405</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-14 16:05:02 -0800</bug_when>
    <thetext>Another point: this patch caused the layout test fast/images/move-image-to-new-document.html to start timing out, which would be another point in favor of rolling out and trying another approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521422</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-14 16:12:48 -0800</bug_when>
    <thetext>&gt; Can you explain why this patch almost certainly introduces a security bug whereas the Media and Marquee element stuff do not, and should not be rolled out?

HTMLPlugInImageElement::suspend does a style recalculation, which can do things like instantiating plug-ins or firing events. I haven&apos;t looked at the other active nodes now, perhaps they also do something terrible like that.

Someone who wants to redesign ActiveDOMObject can follow discussions in 52719, bug 52366 and related bugs. My take from those discussions is that ActiveDOMObject should be avoided. Given that it often causes such strong desire to use it, it should probably be made less prominent or removed altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521431</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-14 16:17:04 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Another point: this patch caused the layout test fast/images/move-image-to-new-document.html to start timing out, which would be another point in favor of rolling out and trying another approach.

To be clear, the regression in that test case looks pretty serious -- load events aren&apos;t firing for an object element when it&apos;s moved from one page to another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521751</commentid>
    <comment_count>15</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-15 01:50:08 -0800</bug_when>
    <thetext>Test fix seems broke fast/images/move-image-to-new-document.html on several bots (at least on Mac, GTK and QT). Any idea how to fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521880</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-15 07:08:26 -0800</bug_when>
    <thetext>New bug report for the new regression: https://bugs.webkit.org/show_bug.cgi?id=74607</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521934</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-15 08:54:06 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Another point: this patch caused the layout test fast/images/move-image-to-new-document.html to start timing out, which would be another point in favor of rolling out and trying another approach.

Covered by https://bugs.webkit.org/show_bug.cgi?id=74555 I&apos;ll take action on this today.

(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; To be clear, the regression in that test case looks pretty serious -- load events aren&apos;t firing for an object element when it&apos;s moved from one page to another.

Actually our support for moving nodes between documents is spotty at best.  I&apos;m surprised I happened to touch a cross section of the code where it *was* handled properly.

Reproducible crashers are also serious, but obviously it&apos;s not okay to cause a known regression either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522053</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-15 10:51:04 -0800</bug_when>
    <thetext>Reverted r102829 for reason:

Caused https://bugs.webkit.org/show_bug.cgi?id=74555

Committed r102962: &lt;http://trac.webkit.org/changeset/102962&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522268</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-15 15:37:15 -0800</bug_when>
    <thetext>I have a patch for a better fix, but I can&apos;t test it easily right now as http://trac.webkit.org/changeset/102866 is causing a crash.

Covered by https://bugs.webkit.org/show_bug.cgi?id=74655</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522844</commentid>
    <comment_count>20</comment_count>
      <attachid>119634</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-16 10:54:04 -0800</bug_when>
    <thetext>Created attachment 119634
Patch v3 - Rename &quot;document activation callbacks&quot; to &quot;page cache suspension&quot; callbacks and use them

This changes the &quot;document will become inactive&quot; callbacks from being called both on page cache suspension and document detachment in to &quot;page cache suspension&quot; callbacks that are absolutely only called when the document goes in to the page cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523132</commentid>
    <comment_count>21</comment_count>
      <attachid>119634</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-16 16:06:56 -0800</bug_when>
    <thetext>Comment on attachment 119634
Patch v3 - Rename &quot;document activation callbacks&quot; to &quot;page cache suspension&quot; callbacks and use them

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Elements that used to register for &quot;document activation callbacks&quot; now register for &quot;page cache suspension&quot; callbacks.
&gt; +        The Document only dispatches these callbacks specifically when it suspended in to the page cache or resumed from it.

I think this description is unnecessarily oblique. The real issue is that we don’t need to do all this work when tearing down documents; only when suspending documents we plan to resume later. Maybe there’s a more straightforward way of saying that.

&gt; Source/WebCore/dom/Document.h:982
&gt; +    enum ReasonForInactivation {
&gt; +        Suspension,
&gt; +        Detach
&gt; +    };

I’d rather tree this all on one line. I don’t think that “suspension” and “detach” are parallel. Maybe call it “render tree destruction” instead of “detach”? I wonder what the name is for a process when a document goes into a state where it’s no longer showed in a frame, but nodes in it may still exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523133</commentid>
    <comment_count>22</comment_count>
      <attachid>119634</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-16 16:08:19 -0800</bug_when>
    <thetext>Comment on attachment 119634
Patch v3 - Rename &quot;document activation callbacks&quot; to &quot;page cache suspension&quot; callbacks and use them

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

&gt; Source/WebCore/dom/Document.cpp:3922
&gt; -void Document::documentWillBecomeInactive() 
&gt; +void Document::documentWillBecomeInactive(ReasonForInactivation reason)

I think this should just be two functions. One can call the other. There’s no reason to use an enum here instead of a second function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523153</commentid>
    <comment_count>23</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-12-16 16:33:15 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/103130</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119290</attachid>
            <date>2011-12-14 13:54:58 -0800</date>
            <delta_ts>2011-12-14 14:27:57 -0800</delta_ts>
            <desc>Patch v1 - Fix + layout test</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9295</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTE0ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA1
NzY3MzI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzMK
KyAgICAgICAgUkVHUkVTU0lPTihyMTAyNjE5KTogUmVwcm9kdWNpYmxlIGNyYXNoIGNsb3Npbmcg
d2luZG93IHdpdGggdmlkZW8gKyBwb3N0ZXIgaW1hZ2UgaW5zaWRlIGFuIG9iamVjdCBlbGVtZW50
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
bWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLmh0
bWwKKworICAgICAgICBTd2l0Y2ggSFRNTFBsdWdJbkltYWdlRWxlbWVudCBmcm9tIHVzaW5nIGRv
Y3VtZW50IGFjdGl2YXRpb24gY2FsbGJhY2tzIHRvIHVzaW5nIHRoZSBBY3RpdmVET01PYmplY3QK
KyAgICAgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgcHJldmVudCB0aGUgdW5uZWNlc3NhcnkgKGFu
ZCBjcmFzaHkpIHdvcmsgYXQgRG9jdW1lbnQgdGVhcmRvd246CisgICAgICAgICogaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OnJlc3VtZSk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg6CisKIDIwMTEtMTItMTQgIEpvbmF0aGFuIEJhY2tlciAgPGJhY2tlckBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBQbHVtYiB0aHJvdWdoIGZsYWcgZm9yIGVuYWJs
aW5nIHBhcnRpYWwgc3dhcApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDI4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBQcmVmZXJQbHVnSW5zRm9ySW1hZ2Vz
T3B0aW9uIHByZWZlclBsdWdJbnNGb3JJbWFnZXNPcHRpb24pCiAgICAgOiBIVE1MUGx1Z0luRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCwg
dGhpcykKICAgICAvLyBtX25lZWRzV2lkZ2V0VXBkYXRlKCFjcmVhdGVkQnlQYXJzZXIpIGFsbG93
cyBIVE1MT2JqZWN0RWxlbWVudCB0byBkZWxheQogICAgIC8vIHdpZGdldCB1cGRhdGVzIHVudGls
IGFmdGVyIGFsbCBjaGlsZHJlbiBhcmUgcGFyc2VkLiAgRm9yIEhUTUxFbWJlZEVsZW1lbnQKICAg
ICAvLyB0aGlzIGRlbGF5IGlzIHVubmVjZXNzYXJ5LCBidXQgaXQgaXMgc2ltcGxlciB0byBtYWtl
IGJvdGggY2xhc3NlcyBzaGFyZQpAQCAtMjAyLDI3ICsyMDMsMTYgQEAgdm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpmaW5pc2hQYXJzaQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
ICAgIAogfQogCi12b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCkKK2Jvb2wgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2FuU3VzcGVuZCgpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MpCi0gICAg
ICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3Mo
dGhpcyk7Ci0KLSAgICBpZiAobV9pbWFnZUxvYWRlcikKLSAgICAgICAgbV9pbWFnZUxvYWRlci0+
ZWxlbWVudFdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7Ci0KLSAgICBIVE1MUGx1Z0luRWxl
bWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCkKK3ZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5z
aW9uIHJlYXNvbikKIHsKLSAgICBpZiAobV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNr
cykKLSAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxs
YmFja3ModGhpcyk7ICAgCi0gICAgCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKTsKLX0KKyAgICBpZiAocmVhc29uICE9IERvY3VtZW50V2lsbEJlY29t
ZUluYWN0aXZlKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKQotewogICAgIGlmIChSZW5kZXJTdHlsZSog
cnMgPSByZW5kZXJTdHlsZSgpKSB7CiAgICAgICAgIG1fY3VzdG9tU3R5bGVGb3JQYWdlQ2FjaGUg
PSBSZW5kZXJTdHlsZTo6Y2xvbmUocnMpOwogICAgICAgICBtX2N1c3RvbVN0eWxlRm9yUGFnZUNh
Y2hlLT5zZXREaXNwbGF5KE5PTkUpOwpAQCAtMjMyLDExICsyMjIsOSBAQCB2b2lkIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OmRvY3VtZW50V2lsCiAKICAgICBpZiAobV9jdXN0b21TdHlsZUZvclBh
Z2VDYWNoZSkKICAgICAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwotICAgICAgICAKLSAgICBIVE1M
UGx1Z0luRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKTsKIH0KIAotdm9pZCBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpCit2b2lkIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3VtZSgpCiB7CiAgICAgY2xlYXJIYXNDdXN0b21TdHls
ZUZvclJlbmRlcmVyKCk7CiAKQEAgLTI0NCw4ICsyMzIsNiBAQCB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmRvY3VtZW50RGlkCiAgICAgICAgIG1fY3VzdG9tU3R5bGVGb3JQYWdlQ2FjaGUg
PSAwOwogICAgICAgICByZWNhbGNTdHlsZShGb3JjZSk7CiAgICAgfQotICAgIAotICAgIEhUTUxQ
bHVnSW5FbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOwogfQogCiBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRl
cmVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oCShyZXZpc2lvbiAxMDI4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC00
Miw3ICs0Myw3IEBAIGVudW0gUHJlZmVyUGx1Z0luc0ZvckltYWdlc09wdGlvbiB7CiB9OwogCiAv
LyBCYXNlIGNsYXNzIGZvciBIVE1MT2JqZWN0RWxlbWVudCBhbmQgSFRNTEVtYmVkRWxlbWVudAot
Y2xhc3MgSFRNTFBsdWdJbkltYWdlRWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudCB7
CitjbGFzcyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5FbGVtZW50
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50KCk7CiAKQEAgLTU0LDYgKzU1LDEwIEBAIHB1YmxpYzoKICAgICBjb25z
dCBTdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CiAgICAgYm9vbCBzaG91bGRQ
cmVmZXJQbHVnSW5zRm9ySW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQcmVmZXJQbHVn
SW5zRm9ySW1hZ2VzOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKSBPVkVSUklERTsKKyAgICAKIHByb3Rl
Y3RlZDoKICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIsIFByZWZlclBsdWdJbnNGb3JJ
bWFnZXNPcHRpb24pOwogCkBAIC03MywxMiArNzgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBh
bGxvd2VkVG9Mb2FkRnJhbWVVUkwoY29uc3QgU3RyaW5nJiB1cmwpOwogICAgIGJvb2wgd291bGRM
b2FkQXNOZXRzY2FwZVBsdWdpbihjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZXJ2
aWNlVHlwZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgp
IE9WRVJSSURFOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudFdpbGxCZWNvbWVJbmFj
dGl2ZSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudERpZEJlY29tZUFjdGl2
ZSgpIE9WRVJSSURFOwotCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjdXN0
b21TdHlsZUZvclJlbmRlcmVyKCkgT1ZFUlJJREU7CiAKIHByaXZhdGU6CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMDI4MTkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAxMS0xMi0xNCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNTc2NzMyPiBhbmQgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTMzCisgICAgICAgIFJFR1JFU1NJT04ocjEw
MjYxOSk6IFJlcHJvZHVjaWJsZSBjcmFzaCBjbG9zaW5nIHdpbmRvdyB3aXRoIHZpZGVvICsgcG9z
dGVyIGltYWdlIGluc2lkZSBhbiBvYmplY3QgZWxlbWVudAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdp
dGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogbWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNr
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3Jlc291cmNlcy92aWRlby13aXRoLXBvc3Rl
ci1hcy1vYmplY3QtZmFsbGJhY2suaHRtbDogQWRkZWQuCisKIDIwMTEtMTItMTQgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSAtd2Via2l0LWZp
bHRlciBhbmltYXRhYmxlCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9jcmFzaC1jbG9zaW5nLXBh
Z2Utd2l0aC1tZWRpYS1hcy1wbHVnaW4tZmFsbGJhY2stZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL21lZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlhLWFzLXBs
dWdpbi1mYWxsYmFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9t
ZWRpYS9jcmFzaC1jbG9zaW5nLXBhZ2Utd2l0aC1tZWRpYS1hcy1wbHVnaW4tZmFsbGJhY2stZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVzdCBtYWtlcyBz
dXJlIHRoYXQgY2xvc2luZyBhIHdpbmRvdyB3aXRoIGEgdmlkZW8gZWxlbWVudCB0aGF0IGhhcyBh
IHBvc3RlciBpbWFnZSBkb2Vzbid0IGNyYXNoIChyYWRhciAxMDU3NjczMiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTMzKQorSWYgaXQgZG9lc24ndCBjcmFz
aCwgaXQgcGFzc2VzLgorQ2xpY2sgaGVyZSB0byBvcGVuIHRlc3Qgd2luZG93CitDbG9zZWQgdGhl
IHdpbmRvdyB3aXRob3V0IGNyYXNoaW5nIQorCisKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL2Ny
YXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlhLWFzLXBsdWdpbi1mYWxsYmFjay5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlh
LWFzLXBsdWdpbi1mYWxsYmFjay5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVk
aWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzxzY3JpcHQ+Cit2YXIgY2hpbGRXaW5kb3c7
Cis8L3NjcmlwdD4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgY2xvc2luZyBhIHdpbmRvdyB3
aXRoIGEgdmlkZW8gZWxlbWVudCB0aGF0IGhhcyBhIHBvc3RlciBpbWFnZSBkb2Vzbid0IGNyYXNo
IChyYWRhciAxMDU3NjczMiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0NTMzKTxicj4KK0lmIGl0IGRvZXNuJ3QgY3Jhc2gsIGl0IHBhc3Nlcy48YnI+Cis8YnV0
dG9uIGlkPSJidXR0b24iIG9uY2xpY2s9ImNoaWxkV2luZG93ID0gd2luZG93Lm9wZW4oJ3Jlc291
cmNlcy92aWRlby13aXRoLXBvc3Rlci1hcy1vYmplY3QtZmFsbGJhY2suaHRtbCcpIj4KKyAgICBD
bGljayBoZXJlIHRvIG9wZW4gdGVzdCB3aW5kb3cKKzwvYnV0dG9uPjxicj4KKzxkaXYgaWQ9InJl
c3VsdCI+PC9kaXY+PGJyPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIs
IDEpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
UGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zUHJlZmVyZW5jZUtleSIsIDEpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5kb3dzKHRydWUpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLnNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSh0cnVlKTsKKyAgICB2
YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbiIpOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlTW92ZVRvKGJ1dHRvbi5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCArIGJ1dHRv
bi5vZmZzZXRMZWZ0ICsgYnV0dG9uLm9mZnNldFdpZHRoIC8gMiwgYnV0dG9uLm9mZnNldFBhcmVu
dC5vZmZzZXRUb3AgKyAgYnV0dG9uLm9mZnNldFRvcCArIGJ1dHRvbi5vZmZzZXRIZWlnaHQgLyAy
KTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVw
KCk7Cit9CisKK2Z1bmN0aW9uIGNoaWxkTG9hZGVkKCkKK3sKKyAgICBjaGlsZFdpbmRvdy5jbG9z
ZSgpOworICAgIHNldFRpbWVvdXQoImNoZWNrQ2xvc2VkKCkiLCAwKTsKK30KKworZnVuY3Rpb24g
Y2hlY2tDbG9zZWQoKQoreworICAgIGlmIChjaGlsZFdpbmRvdy5jbG9zZWQpIHsKKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICJDbG9zZWQgdGhl
IHdpbmRvdyB3aXRob3V0IGNyYXNoaW5nISI7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICBzZXRUaW1lb3V0KCJsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7IiwgMCk7CisgICAgfQorICAgIHNldFRpbWVvdXQoImNoZWNrQ2xvc2Vk
KCkiLCAwKTsKK30KKworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9yZXNvdXJj
ZXMvdmlkZW8td2l0aC1wb3N0ZXItYXMtb2JqZWN0LWZhbGxiYWNrLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvbWVkaWEvcmVzb3VyY2VzL3ZpZGVvLXdpdGgtcG9zdGVyLWFzLW9iamVj
dC1mYWxsYmFjay5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvcmVzb3Vy
Y2VzL3ZpZGVvLXdpdGgtcG9zdGVyLWFzLW9iamVjdC1mYWxsYmFjay5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYgQEAKKzxib2R5IG9ubG9hZD0ib3BlbmVyLmNoaWxkTG9hZGVkKCkiPgor
PG9iamVjdCBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCI+Cis8dmlkZW8gc3JjPSIuLi8uLi9tZWRp
YS9jb250ZW50L2NvdW50aW5nLm1wNCIgY29udHJvbHM9ImNvbnRyb2xzIiBwb3N0ZXI9Ii4uL2Nv
bnRlbnQvYWJlLnBuZyIgcHJlbG9hZD0iYXV0byI+Cis8L3ZpZGVvPgorPC9vYmplY3Q+Cis8L2Jv
ZHk+Cg==
</data>
<flag name="review"
          id="119253"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119297</attachid>
            <date>2011-12-14 14:27:57 -0800</date>
            <delta_ts>2011-12-16 10:54:04 -0800</delta_ts>
            <desc>Patch v2 - Style fix and better layout test</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9492</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTE0ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA1
NzY3MzI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzMK
KyAgICAgICAgUkVHUkVTU0lPTihyMTAyNjE5KTogUmVwcm9kdWNpYmxlIGNyYXNoIGNsb3Npbmcg
d2luZG93IHdpdGggdmlkZW8gKyBwb3N0ZXIgaW1hZ2UgaW5zaWRlIGFuIG9iamVjdCBlbGVtZW50
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
bWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLmh0
bWwKKworICAgICAgICBTd2l0Y2ggSFRNTFBsdWdJbkltYWdlRWxlbWVudCBmcm9tIHVzaW5nIGRv
Y3VtZW50IGFjdGl2YXRpb24gY2FsbGJhY2tzIHRvIHVzaW5nIHRoZSBBY3RpdmVET01PYmplY3QK
KyAgICAgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgcHJldmVudCB0aGUgdW5uZWNlc3NhcnkgKGFu
ZCBjcmFzaHkpIHdvcmsgYXQgRG9jdW1lbnQgdGVhcmRvd246CisgICAgICAgICogaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OnJlc3VtZSk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Lmg6CisKIDIwMTEtMTItMTQgIEpvbmF0aGFuIEJhY2tlciAgPGJhY2tlckBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBQbHVtYiB0aHJvdWdoIGZsYWcgZm9yIGVuYWJs
aW5nIHBhcnRpYWwgc3dhcApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDI4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBQcmVmZXJQbHVnSW5zRm9ySW1hZ2Vz
T3B0aW9uIHByZWZlclBsdWdJbnNGb3JJbWFnZXNPcHRpb24pCiAgICAgOiBIVE1MUGx1Z0luRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCwg
dGhpcykKICAgICAvLyBtX25lZWRzV2lkZ2V0VXBkYXRlKCFjcmVhdGVkQnlQYXJzZXIpIGFsbG93
cyBIVE1MT2JqZWN0RWxlbWVudCB0byBkZWxheQogICAgIC8vIHdpZGdldCB1cGRhdGVzIHVudGls
IGFmdGVyIGFsbCBjaGlsZHJlbiBhcmUgcGFyc2VkLiAgRm9yIEhUTUxFbWJlZEVsZW1lbnQKICAg
ICAvLyB0aGlzIGRlbGF5IGlzIHVubmVjZXNzYXJ5LCBidXQgaXQgaXMgc2ltcGxlciB0byBtYWtl
IGJvdGggY2xhc3NlcyBzaGFyZQpAQCAtMjAyLDI3ICsyMDMsMTYgQEAgdm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpmaW5pc2hQYXJzaQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
ICAgIAogfQogCi12b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCkKK2Jvb2wgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y2FuU3VzcGVuZCgpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MpCi0gICAg
ICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3Mo
dGhpcyk7Ci0KLSAgICBpZiAobV9pbWFnZUxvYWRlcikKLSAgICAgICAgbV9pbWFnZUxvYWRlci0+
ZWxlbWVudFdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7Ci0KLSAgICBIVE1MUGx1Z0luRWxl
bWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCkKK3ZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5z
aW9uIHJlYXNvbikKIHsKLSAgICBpZiAobV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNr
cykKLSAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxs
YmFja3ModGhpcyk7ICAgCi0gICAgCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKTsKLX0KKyAgICBpZiAocmVhc29uICE9IERvY3VtZW50V2lsbEJlY29t
ZUluYWN0aXZlKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKQotewogICAgIGlmIChSZW5kZXJTdHlsZSog
cnMgPSByZW5kZXJTdHlsZSgpKSB7CiAgICAgICAgIG1fY3VzdG9tU3R5bGVGb3JQYWdlQ2FjaGUg
PSBSZW5kZXJTdHlsZTo6Y2xvbmUocnMpOwogICAgICAgICBtX2N1c3RvbVN0eWxlRm9yUGFnZUNh
Y2hlLT5zZXREaXNwbGF5KE5PTkUpOwpAQCAtMjMyLDExICsyMjIsOSBAQCB2b2lkIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OmRvY3VtZW50V2lsCiAKICAgICBpZiAobV9jdXN0b21TdHlsZUZvclBh
Z2VDYWNoZSkKICAgICAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwotICAgICAgICAKLSAgICBIVE1M
UGx1Z0luRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKTsKIH0KIAotdm9pZCBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpCit2b2lkIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlc3VtZSgpCiB7CiAgICAgY2xlYXJIYXNDdXN0b21TdHls
ZUZvclJlbmRlcmVyKCk7CiAKQEAgLTI0NCw4ICsyMzIsNiBAQCB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmRvY3VtZW50RGlkCiAgICAgICAgIG1fY3VzdG9tU3R5bGVGb3JQYWdlQ2FjaGUg
PSAwOwogICAgICAgICByZWNhbGNTdHlsZShGb3JjZSk7CiAgICAgfQotICAgIAotICAgIEhUTUxQ
bHVnSW5FbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOwogfQogCiBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRl
cmVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oCShyZXZpc2lvbiAxMDI4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogI2lmbmRlZiBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50X2gKICNkZWZpbmUgSFRNTFBsdWdJbkltYWdlRWxlbWVudF9o
CiAKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxl
bWVudC5oIgotCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAKQEAgLTQyLDcgKzQyLDcgQEAgZW51bSBQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzT3B0aW9u
IHsKIH07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIEhUTUxPYmplY3RFbGVtZW50IGFuZCBIVE1MRW1i
ZWRFbGVtZW50Ci1jbGFzcyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IDogcHVibGljIEhUTUxQbHVn
SW5FbGVtZW50IHsKK2NsYXNzIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgOiBwdWJsaWMgSFRNTFBs
dWdJbkVsZW1lbnQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIHZpcnR1
YWwgfkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoKTsKIApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGlj
OgogICAgIGNvbnN0IFN0cmluZyYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KICAgICBi
b29sIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZFByZWZlclBsdWdJbnNGb3JJbWFnZXM7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5k
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoUmVhc29uRm9yU3Vz
cGVuc2lvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpIE9WRVJSSURFOwor
ICAgIAogcHJvdGVjdGVkOgogICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlciwgUHJlZmVy
UGx1Z0luc0ZvckltYWdlc09wdGlvbik7CiAKQEAgLTczLDEyICs3Nyw2IEBAIHByb3RlY3RlZDoK
ICAgICBib29sIGFsbG93ZWRUb0xvYWRGcmFtZVVSTChjb25zdCBTdHJpbmcmIHVybCk7CiAgICAg
Ym9vbCB3b3VsZExvYWRBc05ldHNjYXBlUGx1Z2luKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHNlcnZpY2VUeXBlKTsKIAotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCkgT1ZFUlJJREU7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGRvY3VtZW50V2ls
bEJlY29tZUluYWN0aXZlKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlk
QmVjb21lQWN0aXZlKCkgT1ZFUlJJREU7Ci0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IGN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKSBPVkVSUklERTsKIAogcHJpdmF0ZToKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEwMjgxOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTEyLTE0ICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA1NzY3MzI+IGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzMKKyAgICAgICAgUkVH
UkVTU0lPTihyMTAyNjE5KTogUmVwcm9kdWNpYmxlIGNyYXNoIGNsb3Npbmcgd2luZG93IHdpdGgg
dmlkZW8gKyBwb3N0ZXIgaW1hZ2UgaW5zaWRlIGFuIG9iamVjdCBlbGVtZW50CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtZWRpYS9jcmFzaC1jbG9z
aW5nLXBhZ2Utd2l0aC1tZWRpYS1hcy1wbHVnaW4tZmFsbGJhY2stZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBtZWRpYS9jcmFzaC1jbG9zaW5nLXBhZ2Utd2l0aC1tZWRpYS1hcy1wbHVn
aW4tZmFsbGJhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogbWVkaWEvcmVzb3VyY2VzL3ZpZGVv
LXdpdGgtcG9zdGVyLWFzLW9iamVjdC1mYWxsYmFjay5odG1sOiBBZGRlZC4KKwogMjAxMS0xMi0x
NCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IC13ZWJraXQtZmlsdGVyIGFuaW1hdGFibGUKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL2NyYXNo
LWNsb3NpbmctcGFnZS13aXRoLW1lZGlhLWFzLXBsdWdpbi1mYWxsYmFjay1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgt
bWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL21lZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlhLWFzLXBsdWdpbi1m
YWxsYmFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGhpcyB0
ZXN0IG1ha2VzIHN1cmUgdGhhdCBjbG9zaW5nIGEgd2luZG93IHdpdGggYSB2aWRlbyBlbGVtZW50
IHRoYXQgaGFzIGEgcG9zdGVyIGltYWdlIGRvZXNuJ3QgY3Jhc2ggKHJhZGFyIDEwNTc2NzMyIGFu
ZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzMpCitJZiBpdCBk
b2Vzbid0IGNyYXNoLCBpdCBwYXNzZXMuCitDbGljayBoZXJlIHRvIG9wZW4gdGVzdCB3aW5kb3cK
K0Nsb3NlZCB0aGUgd2luZG93IHdpdGhvdXQgY3Jhc2hpbmchCisKKwpJbmRleDogTGF5b3V0VGVz
dHMvbWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNr
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdl
LXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9tZWRpYS9jcmFzaC1jbG9zaW5nLXBhZ2Utd2l0aC1tZWRpYS1hcy1wbHVnaW4tZmFs
bGJhY2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorPHNjcmlwdD4KK3ZhciBj
aGlsZFdpbmRvdzsKKzwvc2NyaXB0PgorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBjbG9zaW5n
IGEgd2luZG93IHdpdGggYSB2aWRlbyBlbGVtZW50IHRoYXQgaGFzIGEgcG9zdGVyIGltYWdlIGRv
ZXNuJ3QgY3Jhc2ggKHJhZGFyIDEwNTc2NzMyIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzQ1MzMpPGJyPgorSWYgaXQgZG9lc24ndCBjcmFzaCwgaXQgcGFzc2Vz
Ljxicj4KKzxidXR0b24gaWQ9ImJ1dHRvbiIgb25jbGljaz0iY2hpbGRXaW5kb3cgPSB3aW5kb3cu
b3BlbigncmVzb3VyY2VzL3ZpZGVvLXdpdGgtcG9zdGVyLWFzLW9iamVjdC1mYWxsYmFjay5odG1s
JykiPgorICAgIENsaWNrIGhlcmUgdG8gb3BlbiB0ZXN0IHdpbmRvdworPC9idXR0b24+PGJyPgor
PGRpdiBpZD0icmVzdWx0Ij48L2Rpdj48YnI+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVm
ZXJlbmNlS2V5IiwgMSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJl
bmNlKCJXZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQcmVmZXJlbmNlS2V5IiwgMSk7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2FuT3BlbldpbmRvd3ModHJ1ZSk7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKHRy
dWUpOworICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uIik7
CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oYnV0dG9uLm9mZnNldFBhcmVudC5vZmZzZXRM
ZWZ0ICsgYnV0dG9uLm9mZnNldExlZnQgKyBidXR0b24ub2Zmc2V0V2lkdGggLyAyLCBidXR0b24u
b2Zmc2V0UGFyZW50Lm9mZnNldFRvcCArICBidXR0b24ub2Zmc2V0VG9wICsgYnV0dG9uLm9mZnNl
dEhlaWdodCAvIDIpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gY2hpbGRMb2FkZWQoKQoreworICAgIGNoaWxk
V2luZG93LmNsb3NlKCk7CisgICAgc2V0VGltZW91dCgiY2hlY2tDbG9zZWQoKSIsIDApOworfQor
CitmdW5jdGlvbiBjaGVja0Nsb3NlZCgpCit7CisgICAgaWYgKGNoaWxkV2luZG93LmNsb3NlZCkg
eworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ID0g
IkNsb3NlZCB0aGUgd2luZG93IHdpdGhvdXQgY3Jhc2hpbmchIjsKKyAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIHNldFRpbWVvdXQoImxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsiLCAwKTsKKyAgICB9CisgICAgc2V0VGltZW91dCgi
Y2hlY2tDbG9zZWQoKSIsIDApOworfQorCis8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL21l
ZGlhL3Jlc291cmNlcy92aWRlby13aXRoLXBvc3Rlci1hcy1vYmplY3QtZmFsbGJhY2suaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9yZXNvdXJjZXMvdmlkZW8td2l0aC1wb3N0
ZXItYXMtb2JqZWN0LWZhbGxiYWNrLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9t
ZWRpYS9yZXNvdXJjZXMvdmlkZW8td2l0aC1wb3N0ZXItYXMtb2JqZWN0LWZhbGxiYWNrLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzxzY3JpcHQgc3JjPSIuLi9tZWRpYS1maWxl
LmpzIj48L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0ib3BlbmVyLmNoaWxkTG9hZGVkKCkiPgorPG9i
amVjdCBoZWlnaHQ9IjUwMCIgd2lkdGg9IjUwMCI+Cis8dmlkZW8gaWQ9InRoZVZpZGVvIiBjb250
cm9scz0iY29udHJvbHMiIHBvc3Rlcj0iLi4vY29udGVudC9hYmUucG5nIiBwcmVsb2FkPSJhdXRv
Ij4KKzwvdmlkZW8+Cis8c2NyaXB0PgorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZVZpZGVv
Iikuc3JjID0gZmluZE1lZGlhRmlsZSgndmlkZW8nLCAnLi4vY29udGVudC9jb3VudGluZycpOwor
PC9zY3JpcHQ+Cis8L29iamVjdD4KKzwvYm9keT4K
</data>
<flag name="review"
          id="119263"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119634</attachid>
            <date>2011-12-16 10:54:04 -0800</date>
            <delta_ts>2011-12-16 16:08:19 -0800</delta_ts>
            <desc>Patch v3 - Rename &quot;document activation callbacks&quot; to &quot;page cache suspension&quot; callbacks and use them</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28149</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzA3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDExLTEyLTE2ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA1
NzY3MzI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzMK
KyAgICAgICAgUkVHUkVTU0lPTihyMTAyNjE5KTogUmVwcm9kdWNpYmxlIGNyYXNoIGNsb3Npbmcg
d2luZG93IHdpdGggdmlkZW8gKyBwb3N0ZXIgaW1hZ2UgaW5zaWRlIGFuIG9iamVjdCBlbGVtZW50
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
bWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLmh0
bWwKKworICAgICAgICBFbGVtZW50cyB0aGF0IHVzZWQgdG8gcmVnaXN0ZXIgZm9yICJkb2N1bWVu
dCBhY3RpdmF0aW9uIGNhbGxiYWNrcyIgbm93IHJlZ2lzdGVyIGZvciAicGFnZSBjYWNoZSBzdXNw
ZW5zaW9uIiBjYWxsYmFja3MuCisgICAgICAgIFRoZSBEb2N1bWVudCBvbmx5IGRpc3BhdGNoZXMg
dGhlc2UgY2FsbGJhY2tzIHNwZWNpZmljYWxseSB3aGVuIGl0IHN1c3BlbmRlZCBpbiB0byB0aGUg
cGFnZSBjYWNoZSBvciByZXN1bWVkIGZyb20gaXQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGFjaCk6IENhbGwgZG9jdW1lbnRE
aWRCZWNvbWVJbmFjdGl2ZSB3aXRoIHJlYXNvbiAiRGV0YWNoIgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKTogT25seSBjYWxsIHRoZSBkb2N1
bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlIGNhbGxiYWNrcyBpZiB0aGUgcmVhc29uCisgICAg
ICAgICAgZm9yIGluYWN0aXZhdGlvbiBpcyAiU3VzcGVuZGVkIi4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojpkb2N1bWVudERpZEJlY29tZUFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cmVnaXN0ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNh
bGxiYWNrcyk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKKyAgICAgICAgKiBoaXN0b3J5
L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lOjpDYWNoZWRG
cmFtZSk6IENhbGwgZG9jdW1lbnREaWRCZWNvbWVJbmFjdGl2ZSB3aXRoIHJlYXNvbiAiU3VzcGVu
c2lvbiIKKworICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKTogUmVuYW1lZCBmcm9tIGRvY3Vt
ZW50V2lsbEJlY29tZUluYWN0aXZlKCkKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRvY3Vt
ZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSk6IFJlbmFtZWQgZnJvbSBkb2N1bWVudERpZEJlY29t
ZUFjdGl2ZSgpCisKKyAgICAgICAgQ2hhbmdlIHRvIHRoZSByZW5hbWVkIHJlZ2lzdHJhdGlvbiBh
bmQgY2FsbGJhY2tzIGZ1bmN0aW9ucyBpbiB0aGUgaGFuZGZ1bCBvZiBjbGFzc2VzIHRoYXQgdXNl
IHRoZW06CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50Ojpkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmRpZE1vdmVUb05ld093
bmVyRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpuZWVkc1N1c3BlbnNpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpyZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnVucmVnaXN0ZXJGb3JTdXNwZW5zaW9u
Q2FsbGJhY2tJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpk
b2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6CisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6fkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpkb2N1bWVudFdp
bGxTdXNwZW5kRm9yUGFnZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSk6CisgICAgICAgICogaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg6CisKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpTVkdTVkdFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6On5TVkdTVkdFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6ZG9jdW1lbnRXaWxsU3VzcGVu
ZEZvclBhZ2VDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpkb2N1bWVu
dERpZFJlc3VtZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6
CisKIDIwMTEtMTItMTYgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBDaGlsZExpc3RNdXRhdGlvblNjb3BlIHdoZW4gbm8g
TXV0YXRpb25PYnNlcnZlcnMgYXJlIHByZXNlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMTAzMDcwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0Niw3ICsxODQ2LDcgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNo
KCkKIAogICAgIC8vIFNlbmQgb3V0IGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCkgbm90aWZp
Y2F0aW9ucyB0byByZWdpc3RlcmVkIGVsZW1lbnRzLAogICAgIC8vIGluIG9yZGVyIHRvIHN0b3Ag
bWVkaWEgZWxlbWVudHMKLSAgICBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOworICAgIGRv
Y3VtZW50V2lsbEJlY29tZUluYWN0aXZlKERldGFjaCk7CiAKICNpZiBFTkFCTEUoU0hBUkVEX1dP
UktFUlMpCiAgICAgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6ZG9jdW1lbnREZXRhY2hlZCh0aGlz
KTsKQEAgLTM5MTksMjUgKzM5MTksMjcgQEAgdm9pZCBEb2N1bWVudDo6c2V0SW5QYWdlQ2FjaGUo
Ym9vbCBmbGFnKQogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudDo6ZG9jdW1lbnRXaWxsQmVjb21l
SW5hY3RpdmUoKSAKK3ZvaWQgRG9jdW1lbnQ6OmRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKFJl
YXNvbkZvckluYWN0aXZhdGlvbiByZWFzb24pCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5kZXJWaWV3KCktPndpbGxN
b3ZlT2Zmc2NyZWVuKCk7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8RWxlbWVudCo+OjppdGVyYXRv
ciBlbmQgPSBtX2RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrRWxlbWVudHMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IG1fZG9jdW1lbnRBY3RpdmF0aW9u
Q2FsbGJhY2tFbGVtZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5k
b2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOworICAgIGlmIChyZWFzb24gPT0gU3VzcGVuc2lv
bikgeworICAgICAgICBIYXNoU2V0PEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8
RWxlbWVudCo+OjppdGVyYXRvciBpID0gbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1l
bnRzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgICAgICAgICAoKmkpLT5kb2N1bWVudFdp
bGxTdXNwZW5kRm9yUGFnZUNhY2hlKCk7CisgICAgfQogfQogCiB2b2lkIERvY3VtZW50Ojpkb2N1
bWVudERpZEJlY29tZUFjdGl2ZSgpIAogewogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7
Ci0gICAgY29weVRvVmVjdG9yKG1fZG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tFbGVtZW50cywg
ZWxlbWVudHMpOworICAgIGNvcHlUb1ZlY3RvcihtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
RWxlbWVudHMsIGVsZW1lbnRzKTsKICAgICBWZWN0b3I8RWxlbWVudCo+OjppdGVyYXRvciBlbmQg
PSBlbGVtZW50cy5lbmQoKTsKICAgICBmb3IgKFZlY3RvcjxFbGVtZW50Kj46Oml0ZXJhdG9yIGkg
PSBlbGVtZW50cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICAoKmkpLT5kb2N1bWVu
dERpZEJlY29tZUFjdGl2ZSgpOworICAgICAgICAoKmkpLT5kb2N1bWVudERpZFJlc3VtZUZyb21Q
YWdlQ2FjaGUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAo
cmVuZGVyZXIoKSkKQEAgLTM5NTEsMTQgKzM5NTMsMTQgQEAgdm9pZCBEb2N1bWVudDo6ZG9jdW1l
bnREaWRCZWNvbWVBY3RpdmUoKQogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlz
cGF0Y2hEaWRCZWNvbWVGcmFtZXNldChpc0ZyYW1lU2V0KCkpOwogfQogCi12b2lkIERvY3VtZW50
OjpyZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyhFbGVtZW50KiBlKQordm9p
ZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1l
bnQqIGUpCiB7Ci0gICAgbV9kb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja0VsZW1lbnRzLmFkZChl
KTsKKyAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMuYWRkKGUpOwogfQog
Ci12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tz
KEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVu
c2lvbkNhbGxiYWNrcyhFbGVtZW50KiBlKQogewotICAgIG1fZG9jdW1lbnRBY3RpdmF0aW9uQ2Fs
bGJhY2tFbGVtZW50cy5yZW1vdmUoZSk7CisgICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a0VsZW1lbnRzLnJlbW92ZShlKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRD
aGFuZ2UoKSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMDMwNzApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTcwLDEyICs5
NzAsMTcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpblBhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5QYWdlQ2FjaGU7IH0KICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7Ci0g
ICAgCi0gICAgLy8gRWxlbWVudHMgY2FuIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgZm9yIHRoZSAiZG9j
dW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKSIgYW5kICAKLSAgICAvLyAiZG9jdW1lbnREaWRCZWNv
bWVBY3RpdmUoKSIgY2FsbGJhY2tzCi0gICAgdm9pZCByZWdpc3RlckZvckRvY3VtZW50QWN0aXZh
dGlvbkNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yRG9jdW1lbnRB
Y3RpdmF0aW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAgICB2b2lkIGRvY3VtZW50V2lsbEJlY29t
ZUluYWN0aXZlKCk7CisKKyAgICAvLyBFbGVtZW50cyBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZlcyBm
b3IgdGhlICJkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKCkiIGFuZCAgCisgICAgLy8g
ImRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpIiBjYWxsYmFja3MKKyAgICB2b2lkIHJl
Z2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50Kik7CisgICAgdm9p
ZCB1bnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50Kik7CisK
KyAgICBlbnVtIFJlYXNvbkZvckluYWN0aXZhdGlvbiB7CisgICAgICAgIFN1c3BlbnNpb24sCisg
ICAgICAgIERldGFjaAorICAgIH07CisgICAgdm9pZCBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2
ZShSZWFzb25Gb3JJbmFjdGl2YXRpb24pOwogICAgIHZvaWQgZG9jdW1lbnREaWRCZWNvbWVBY3Rp
dmUoKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50
Kik7CkBAIC0xMzg3LDcgKzEzOTIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pblBhZ2VDYWNo
ZTsKICAgICBWZWN0b3I8SWNvblVSTD4gbV9pY29uVVJMczsKIAotICAgIEhhc2hTZXQ8RWxlbWVu
dCo+IG1fZG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tFbGVtZW50czsKKyAgICBIYXNoU2V0PEVs
ZW1lbnQqPiBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHM7CiAgICAgSGFzaFNl
dDxFbGVtZW50Kj4gbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHM7CiAgICAgSGFzaFNldDxF
bGVtZW50Kj4gbV9wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50czsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAxMDMwNzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsOCArMjcxLDggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0TWluaW11bVNpemVGb3JSZXNpemluZyhjb25zdCBMYXlvdXRTaXplJik7CiAKICAg
ICAvLyBVc2UgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tz
KCkgdG8gc3Vic2NyaWJlIHRvIHRoZXNlCi0gICAgdmlydHVhbCB2b2lkIGRvY3VtZW50V2lsbEJl
Y29tZUluYWN0aXZlKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlkQmVjb21lQWN0
aXZlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50V2lsbFN1c3BlbmRGb3JQYWdlQ2Fj
aGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hl
KCkgeyB9CiAKICAgICAvLyBVc2UgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxs
YmFja3MoKSB0byBzdWJzY3JpYmUgdG8gdGhpcwogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVZvbHVt
ZURpZENoYW5nZSgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHAJKHJldmlzaW9uIDEwMzA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgQ2FjaGVkRnJhbWU6OkNh
Y2hlZEZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICAvLyBTdXNwZW5kaW5nIG11c3QgYWxzbyBoYXBw
ZW4gYWZ0ZXIgd2UndmUgcmVjdXJzZWQgb3ZlciBjaGlsZCBmcmFtZXMsIGluIGNhc2UKICAgICAv
LyB0aG9zZSBjcmVhdGUgbW9yZSBvYmplY3RzLgogICAgIC8vIEZJWE1FOiBJdCdzIHN0aWxsIHBv
c3NpYmxlIHRvIGhhdmUgb2JqZWN0cyBjcmVhdGVkIGFmdGVyIHN1c3BlbmRpbmcgaW4gc29tZSBj
YXNlcywgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTM3MzMgZm9yIG1vcmUgZGV0YWlscy4KLSAg
ICBtX2RvY3VtZW50LT5kb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOworICAgIG1fZG9jdW1l
bnQtPmRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKERvY3VtZW50OjpTdXNwZW5zaW9uKTsKICAg
ICBtX2RvY3VtZW50LT5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tz
KCk7CiAgICAgbV9kb2N1bWVudC0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoQWN0aXZlRE9NT2Jq
ZWN0OjpEb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSk7CiAgICAgbV9jYWNoZWRGcmFtZVNjcmlw
dERhdGEgPSBhZG9wdFB0cihuZXcgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhKGZyYW1lKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDMwNzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDcgKzkyLDcgQEAgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IEhUTUxGb3Jt
RWxlbQogSFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KCkKIHsKICAgICBpZiAoIXNo
b3VsZEF1dG9jb21wbGV0ZSgpKQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9j
dW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLT51bnJl
Z2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKICAg
ICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmZvcm1EZXN0cm95ZWQoKTsKQEAgLTM3Nyw5
ICszNzcsOSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAg
ICAgIG1fYXR0cmlidXRlcy5zZXRBY2NlcHRDaGFyc2V0KGF0dHItPnZhbHVlKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CiAgICAgICAgIGlmICgh
c2hvdWxkQXV0b2NvbXBsZXRlKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZv
ckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50
KCktPnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0
aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0
ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uc3VibWl0QXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIodGhpcywgYXR0cikpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnJlc2V0
QXR0cikKQEAgLTYzNyw3ICs2MzcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0TmFtZWRF
bGVtZW50cyhjCiAgICAgICAgIGFkZEVsZW1lbnRBbGlhcyhzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obmFtZWRJdGVtcy5maXJzdCgpLmdldCgpKSwgbmFtZSk7CiB9CiAKLXZv
aWQgSFRNTEZvcm1FbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpCit2b2lkIEhUTUxG
b3JtRWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCkKIHsKICAgICBBU1NF
UlQoIXNob3VsZEF1dG9jb21wbGV0ZSgpKTsKIApAQCAtNjUwLDE0ICs2NTAsMTQgQEAgdm9pZCBI
VE1MRm9ybUVsZW1lbnQ6OmRvY3VtZW50RGlkQmVjb21lQQogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKICAgICBpZiAoIXNob3VsZEF1dG9jb21w
bGV0ZSgpKQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0
aW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yUGFn
ZUNhY2hlU3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKICAgICBIVE1MRWxlbWVudDo6d2lsbE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRpZE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKQogewogICAgIGlmICghc2hvdWxkQXV0b2NvbXBsZXRlKCkp
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJh
Y2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3Bl
bnNpb25DYWxsYmFja3ModGhpcyk7CiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5o
CShyZXZpc2lvbiAxMDMwNzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZp
cnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgdm9pZCBkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOworICAgIHZpcnR1YWwgdm9pZCBkb2N1
bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92
ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDEwMzA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsOCBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OmNyZWF0ZVNoYWRvd1N1YnRyCiAKIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5w
dXRFbGVtZW50KCkKIHsKLSAgICBpZiAobmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2soKSkKLSAgICAg
ICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0
aGlzKTsKKyAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKKyAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CiAK
ICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMp
OwogCkBAIC01NjIsNyArNTYyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBl
KCkKICAgICAgICAgZGV0YWNoKCk7CiAKICAgICBib29sIGRpZFN0b3JlVmFsdWUgPSBtX2lucHV0
VHlwZS0+c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICBib29sIG5lZWRl
ZEFjdGl2YXRpb25DYWxsYmFjayA9IG5lZWRzQWN0aXZhdGlvbkNhbGxiYWNrKCk7CisgICAgYm9v
bCBuZWVkZWRTdXNwZW5zaW9uQ2FsbGJhY2sgPSBuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpOwog
ICAgIGJvb2wgZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoID0gbV9pbnB1dFR5cGUtPnNob3VsZFJl
c3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKTsKIAogICAgIG1faW5wdXRUeXBlLT5kZXN0
cm95U2hhZG93U3VidHJlZSgpOwpAQCAtNTg3LDEwICs1ODcsMTAgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50Ojp1cGRhdGVUeXBlKCkKIAogICAgIG1fd2FzTW9kaWZpZWRCeVVzZXIgPSBmYWxzZTsK
IAotICAgIGlmIChuZWVkZWRBY3RpdmF0aW9uQ2FsbGJhY2spCi0gICAgICAgIHVucmVnaXN0ZXJG
b3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOworICAgIGlmIChuZWVkZWRTdXNwZW5zaW9u
Q2FsbGJhY2spCisgICAgICAgIHVucmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRl
ZCgpOwogICAgIGVsc2UKLSAgICAgICAgcmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5l
ZWRlZCgpOworICAgICAgICByZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKCk7
CiAKICAgICBpZiAoZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoICE9IG1faW5wdXRUeXBlLT5zaG91
bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgTmFtZWROb2Rl
TWFwKiBtYXAgPSBhdHRyaWJ1dGVNYXAoKTsKQEAgLTczNSw3ICs3MzUsNyBAQCB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgewogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
YXR0ci0+dmFsdWUoKSwgIm9mZiIpKSB7CiAgICAgICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IE9m
ZjsKLSAgICAgICAgICAgIHJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsK
KyAgICAgICAgICAgIHJlZ2lzdGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wgbmVlZHNUb1VucmVnaXN0ZXIgPSBtX2F1
dG9jb21wbGV0ZSA9PSBPZmY7CiAKQEAgLTc0NSw3ICs3NDUsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICAgICAgbV9hdXRvY29tcGxldGUg
PSBPbjsKIAogICAgICAgICAgICAgaWYgKG5lZWRzVG9VbnJlZ2lzdGVyKQotICAgICAgICAgICAg
ICAgIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOworICAgICAgICAg
ICAgICAgIHVucmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKICAgICAgICAg
dXBkYXRlVHlwZSgpOwpAQCAtMTQ2MiwyMSArMTQ2MiwyMSBAQCBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OmlzT3V0T2ZSYW5nZSgpIGNvCiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5zdXBwb3J0c1Jh
bmdlTGltaXRhdGlvbigpICYmIChyYW5nZVVuZGVyZmxvdyh2YWx1ZSgpKSB8fCByYW5nZU92ZXJm
bG93KHZhbHVlKCkpKTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpuZWVkc0FjdGl2YXRp
b25DYWxsYmFjaygpCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6Om5lZWRzU3VzcGVuc2lvbkNhbGxi
YWNrKCkKIHsKICAgICByZXR1cm4gbV9hdXRvY29tcGxldGUgPT0gT2ZmIHx8IG1faW5wdXRUeXBl
LT5zaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9uKCk7CiB9CiAKLXZvaWQgSFRNTElucHV0
RWxlbWVudDo6cmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpCit2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnJlZ2lzdGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKQog
ewotICAgIGlmIChuZWVkc0FjdGl2YXRpb25DYWxsYmFjaygpKQotICAgICAgICBkb2N1bWVudCgp
LT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBpZiAo
bmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJG
b3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwogfQogCi12b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpCit2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnVucmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRl
ZCgpCiB7Ci0gICAgaWYgKCFuZWVkc0FjdGl2YXRpb25DYWxsYmFjaygpKQotICAgICAgICBkb2N1
bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwor
ICAgIGlmICghbmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+
dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CiB9CiAKIGJv
b2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3QKQEAgLTE0
OTksOSArMTQ5OSw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6b25TZWFyY2goKQogICAgIGRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRydWUs
IGZhbHNlKSk7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVB
Y3RpdmUoKQordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpkb2N1bWVudERpZFJlc3VtZUZyb21QYWdl
Q2FjaGUoKQogewotICAgIEFTU0VSVChuZWVkc0FjdGl2YXRpb25DYWxsYmFjaygpKTsKKyAgICBB
U1NFUlQobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSk7CiAgICAgcmVzZXQoKTsKIH0KIApAQCAt
MTUxMCw4ICsxNTEwLDggQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3du
ZQogICAgIG1faW5wdXRUeXBlLT53aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogCiAgICAg
Ly8gQWx3YXlzIHVucmVnaXN0ZXIgZm9yIGNhY2hlIGNhbGxiYWNrcyB3aGVuIGxlYXZpbmcgYSBk
b2N1bWVudCwgZXZlbiBpZiB3ZSB3b3VsZCBvdGhlcndpc2UgbGlrZSB0byBiZSByZWdpc3RlcmVk
Ci0gICAgaWYgKG5lZWRzQWN0aXZhdGlvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkt
PnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7CisgICAgaWYg
KG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpCisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0
ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwogCiAgICAgZG9jdW1lbnQo
KS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKIApAQCAtMTUyMCw3
ICsxNTIwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZQogCiB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQogewotICAg
IHJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKKyAgICByZWdpc3RlckZv
clN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKCk7CiAKICAgICBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDEwMzA3MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsMTMg
KzI5OCwxMyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0luUmFuZ2UoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNPdXRPZlJhbmdlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnRE
aWRSZXN1bWVGcm9tUGFnZUNhY2hlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKLSAgICBib29sIG5l
ZWRzQWN0aXZhdGlvbkNhbGxiYWNrKCk7Ci0gICAgdm9pZCByZWdpc3RlckZvckFjdGl2YXRpb25D
YWxsYmFja0lmTmVlZGVkKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxi
YWNrSWZOZWVkZWQoKTsKKyAgICBib29sIG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCk7CisgICAg
dm9pZCByZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKCk7CisgICAgdm9pZCB1
bnJlZ2lzdGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKTsKIAogICAgIGJvb2wgc3Vw
cG9ydHNNYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBpc1RleHRUeXBlKCk7IH0KICAgICBib29s
IGlzVGV4dFR5cGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJ
bkltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTAzMDcwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpIVE1MUGx1Z0luSW1hZ2VFCiBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50Ojp+SFRNTFBsdWdJbkltYWdlRWxlbWVudCgpCiB7CiAgICAgaWYg
KG1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50KCkt
PnVucmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAg
IGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKHRo
aXMpOwogfQogCiBSZW5kZXJFbWJlZGRlZE9iamVjdCogSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
cmVuZGVyRW1iZWRkZWRPYmplY3QoKSBjb25zdApAQCAtMTI3LDcgKzEyNyw3IEBAIFJlbmRlck9i
amVjdCogSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3IKICAgICAvLyBpbmFjdGl2ZSBvciByZWFj
dGl2YXRlcyBzbyBpdCBjYW4gY2xlYXIgdGhlIHJlbmRlcmVyIGJlZm9yZSBnb2luZyBpbnRvIHRo
ZSBwYWdlIGNhY2hlLgogICAgIGlmICghbV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNr
cykgewogICAgICAgICBtX25lZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzID0gdHJ1ZTsK
LSAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFj
a3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yUGFnZUNhY2hlU3VzcGVu
c2lvbkNhbGxiYWNrcyh0aGlzKTsKICAgICB9CiAgICAgCiAgICAgLy8gRmFsbGJhY2sgY29udGVu
dCBicmVha3MgdGhlIERPTS0+UmVuZGVyZXIgY2xhc3MgcmVsYXRpb25zaGlwIG9mIHRoaXMKQEAg
LTIwNSw3ICsyMDUsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmZpbmlzaFBhcnNp
CiB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCkKIHsKICAgICBpZiAobV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcykKLSAgICAg
ICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0
aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNp
b25DYWxsYmFja3ModGhpcyk7CiAKICAgICBpZiAobV9pbWFnZUxvYWRlcikKICAgICAgICAgbV9p
bWFnZUxvYWRlci0+ZWxlbWVudFdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CkBAIC0yMTYs
MTIgKzIxNiwxMiBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OndpbGxNb3ZlVG9OCiB2
b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQog
ewogICAgIGlmIChtX25lZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKQotICAgICAgICBk
b2N1bWVudCgpLT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsg
ICAKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2Fs
bGJhY2tzKHRoaXMpOyAgIAogICAgIAogICAgIEhUTUxQbHVnSW5FbGVtZW50OjpkaWRNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCk7CiB9CiAKLXZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZG9j
dW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKQordm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpk
b2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKCkKIHsKICAgICBpZiAoUmVuZGVyU3R5bGUq
IHJzID0gcmVuZGVyU3R5bGUoKSkgewogICAgICAgICBtX2N1c3RvbVN0eWxlRm9yUGFnZUNhY2hl
ID0gUmVuZGVyU3R5bGU6OmNsb25lKHJzKTsKQEAgLTIzMywxMCArMjMzLDEwIEBAIHZvaWQgSFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6ZG9jdW1lbnRXaWwKICAgICBpZiAobV9jdXN0b21TdHlsZUZv
clBhZ2VDYWNoZSkKICAgICAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwogICAgICAgICAKLSAgICBI
VE1MUGx1Z0luRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKTsKKyAgICBIVE1M
UGx1Z0luRWxlbWVudDo6ZG9jdW1lbnRXaWxsU3VzcGVuZEZvclBhZ2VDYWNoZSgpOwogfQogCi12
b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCkKK3Zv
aWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hl
KCkKIHsKICAgICBjbGVhckhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKTsKIApAQCAtMjQ1LDcg
KzI0NSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZG9jdW1lbnREaWQKICAgICAg
ICAgcmVjYWxjU3R5bGUoRm9yY2UpOwogICAgIH0KICAgICAKLSAgICBIVE1MUGx1Z0luRWxlbWVu
dDo6ZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKTsKKyAgICBIVE1MUGx1Z0luRWxlbWVudDo6ZG9j
dW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgJKHJldmlz
aW9uIDEwMzA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpIE9WRVJSSURFOwogICAgIAotICAg
IHZpcnR1YWwgdm9pZCBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpIE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjdXN0b21TdHlsZUZvclJl
bmRlcmVyKCkgT1ZFUlJJREU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAJKHJldmlzaW9uIDEwMzA3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBpbmxpbmUgU1ZHU1ZHRWxlbWVu
dDo6U1ZHU1ZHRWxlbWVudChjb25zCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6
OnN2Z1RhZykpOwogICAgIHJlZ2lzdGVyQW5pbWF0ZWRQcm9wZXJ0aWVzRm9yU1ZHU1ZHRWxlbWVu
dCgpOwotICAgIGRvYy0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhp
cyk7CisgICAgZG9jLT5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhp
cyk7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHU1ZHRWxlbWVudD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTEw
MCw3ICsxMDAsNyBAQCBQYXNzUmVmUHRyPFNWR1NWR0VsZW1lbnQ+IFNWR1NWR0VsZW1lbnQ6CiAK
IFNWR1NWR0VsZW1lbnQ6On5TVkdTVkdFbGVtZW50KCkKIHsKLSAgICBkb2N1bWVudCgpLT51bnJl
Z2lzdGVyRm9yRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50
KCktPnVucmVnaXN0ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwogICAg
IC8vIFRoZXJlIGFyZSBjYXNlcyB3aGVyZSByZW1vdmVkRnJvbURvY3VtZW50KCkgaXMgbm90IGNh
bGxlZC4KICAgICAvLyBzZWUgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQWxsQ2hpbGRyZW4sIGNhbGxl
ZCBieSBpdHMgZGVzdHJ1Y3Rvci4KICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPnJlbW92ZVRpbWVDb250YWluZXIodGhpcyk7CkBAIC0xMDgsMTMgKzEwOCwxMyBAQCBTVkdT
VkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCgpCiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6d2lsbE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKQogewotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JE
b2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQoKS0+dW5yZWdp
c3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CiAgICAgU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKIH0KIAogdm9p
ZCBTVkdTVkdFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKLSAgICBkb2N1
bWVudCgpLT5yZWdpc3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKKyAg
ICBkb2N1bWVudCgpLT5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhp
cyk7CiAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1
bWVudCgpOwogfQogCkBAIC02NTcsMTIgKzY1NywxMiBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6Omlu
aGVyaXRWaWV3QXR0cmlidXRlCiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5
b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ob2JqZWN0KTsKIH0KICAgICAKLXZvaWQg
U1ZHU1ZHRWxlbWVudDo6ZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKQordm9pZCBTVkdTVkdF
bGVtZW50Ojpkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKCkKIHsKICAgICBwYXVzZUFu
aW1hdGlvbnMoKTsKIH0KIAotdm9pZCBTVkdTVkdFbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUFj
dGl2ZSgpCit2b2lkIFNWR1NWR0VsZW1lbnQ6OmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNo
ZSgpCiB7CiAgICAgdW5wYXVzZUFuaW1hdGlvbnMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMTAzMDcwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDggKzE3MSw4IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkgeyBTVkdU
ZXN0czo6c3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnModGhpcyk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgpIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXpl
U3lzdGVtTGFuZ3VhZ2UodGhpcyk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudFdpbGxC
ZWNvbWVJbmFjdGl2ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudERpZEJlY29tZUFjdGl2
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKCk7
CisgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpOwogCiAg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0o
U1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Q7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzA3
OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDExLTEyLTE2ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTA1NzY3MzI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzMKKyAgICAgICAgUkVHUkVTU0lPTihyMTAyNjE5KTogUmVw
cm9kdWNpYmxlIGNyYXNoIGNsb3Npbmcgd2luZG93IHdpdGggdmlkZW8gKyBwb3N0ZXIgaW1hZ2Ug
aW5zaWRlIGFuIG9iamVjdCBlbGVtZW50CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBtZWRpYS9jcmFzaC1jbG9zaW5nLXBhZ2Utd2l0aC1tZWRpYS1h
cy1wbHVnaW4tZmFsbGJhY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9j
cmFzaC1jbG9zaW5nLXBhZ2Utd2l0aC1tZWRpYS1hcy1wbHVnaW4tZmFsbGJhY2suaHRtbDogQWRk
ZWQuCisgICAgICAgICogbWVkaWEvcmVzb3VyY2VzL3ZpZGVvLXdpdGgtcG9zdGVyLWFzLW9iamVj
dC1mYWxsYmFjay5odG1sOiBBZGRlZC4KKwogMjAxMS0xMi0xNiAgQWRyaWVubmUgV2Fsa2VyICA8
ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWFyayBmYXN0L2Zvcm1zL2lu
cHV0LXRleHQtc2Nyb2xsLWxlZnQtb24tYmx1ci5odG1sIGFzIGZhaWxpbmcKSW5kZXg6IExheW91
dFRlc3RzL21lZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlhLWFzLXBsdWdpbi1mYWxs
YmFjay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvY3Jhc2gt
Y2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRo
LW1lZGlhLWFzLXBsdWdpbi1mYWxsYmFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNiBAQAorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBjbG9zaW5nIGEgd2luZG93IHdp
dGggYSB2aWRlbyBlbGVtZW50IHRoYXQgaGFzIGEgcG9zdGVyIGltYWdlIGRvZXNuJ3QgY3Jhc2gg
KHJhZGFyIDEwNTc2NzMyIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzQ1MzMpCitJZiBpdCBkb2Vzbid0IGNyYXNoLCBpdCBwYXNzZXMuCitDbGljayBoZXJlIHRv
IG9wZW4gdGVzdCB3aW5kb3cKK0Nsb3NlZCB0aGUgd2luZG93IHdpdGhvdXQgY3Jhc2hpbmchCisK
KwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvY3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEt
YXMtcGx1Z2luLWZhbGxiYWNrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
Y3Jhc2gtY2xvc2luZy1wYWdlLXdpdGgtbWVkaWEtYXMtcGx1Z2luLWZhbGxiYWNrLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS9jcmFzaC1jbG9zaW5nLXBhZ2Utd2l0aC1t
ZWRpYS1hcy1wbHVnaW4tZmFsbGJhY2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBA
QAorPHNjcmlwdD4KK3ZhciBjaGlsZFdpbmRvdzsKKzwvc2NyaXB0PgorVGhpcyB0ZXN0IG1ha2Vz
IHN1cmUgdGhhdCBjbG9zaW5nIGEgd2luZG93IHdpdGggYSB2aWRlbyBlbGVtZW50IHRoYXQgaGFz
IGEgcG9zdGVyIGltYWdlIGRvZXNuJ3QgY3Jhc2ggKHJhZGFyIDEwNTc2NzMyIGFuZCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzMpPGJyPgorSWYgaXQgZG9lc24n
dCBjcmFzaCwgaXQgcGFzc2VzLjxicj4KKzxidXR0b24gaWQ9ImJ1dHRvbiIgb25jbGljaz0iY2hp
bGRXaW5kb3cgPSB3aW5kb3cub3BlbigncmVzb3VyY2VzL3ZpZGVvLXdpdGgtcG9zdGVyLWFzLW9i
amVjdC1mYWxsYmFjay5odG1sJykiPgorICAgIENsaWNrIGhlcmUgdG8gb3BlbiB0ZXN0IHdpbmRv
dworPC9idXR0b24+PGJyPgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj48YnI+CisKKzxzY3JpcHQ+
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktp
dFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IiwgMSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQcmVm
ZXJlbmNlS2V5IiwgMSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2FuT3BlbldpbmRv
d3ModHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2xvc2VSZW1haW5pbmdXaW5k
b3dzV2hlbkNvbXBsZXRlKHRydWUpOworICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYnV0dG9uIik7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oYnV0dG9uLm9m
ZnNldFBhcmVudC5vZmZzZXRMZWZ0ICsgYnV0dG9uLm9mZnNldExlZnQgKyBidXR0b24ub2Zmc2V0
V2lkdGggLyAyLCBidXR0b24ub2Zmc2V0UGFyZW50Lm9mZnNldFRvcCArICBidXR0b24ub2Zmc2V0
VG9wICsgYnV0dG9uLm9mZnNldEhlaWdodCAvIDIpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93
bigpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gY2hpbGRMb2Fk
ZWQoKQoreworICAgIGNoaWxkV2luZG93LmNsb3NlKCk7CisgICAgc2V0VGltZW91dCgiY2hlY2tD
bG9zZWQoKSIsIDApOworfQorCitmdW5jdGlvbiBjaGVja0Nsb3NlZCgpCit7CisgICAgaWYgKGNo
aWxkV2luZG93LmNsb3NlZCkgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVz
dWx0IikuaW5uZXJUZXh0ID0gIkNsb3NlZCB0aGUgd2luZG93IHdpdGhvdXQgY3Jhc2hpbmchIjsK
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoImxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsiLCAwKTsKKyAgICB9
CisgICAgc2V0VGltZW91dCgiY2hlY2tDbG9zZWQoKSIsIDApOworfQorCis8L3NjcmlwdD4KSW5k
ZXg6IExheW91dFRlc3RzL21lZGlhL3Jlc291cmNlcy92aWRlby13aXRoLXBvc3Rlci1hcy1vYmpl
Y3QtZmFsbGJhY2suaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9yZXNvdXJj
ZXMvdmlkZW8td2l0aC1wb3N0ZXItYXMtb2JqZWN0LWZhbGxiYWNrLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9tZWRpYS9yZXNvdXJjZXMvdmlkZW8td2l0aC1wb3N0ZXItYXMtb2Jq
ZWN0LWZhbGxiYWNrLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzxzY3JpcHQg
c3JjPSIuLi9tZWRpYS1maWxlLmpzIj48L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0ib3BlbmVyLmNo
aWxkTG9hZGVkKCkiPgorPG9iamVjdCBoZWlnaHQ9IjUwMCIgd2lkdGg9IjUwMCI+Cis8dmlkZW8g
aWQ9InRoZVZpZGVvIiBjb250cm9scz0iY29udHJvbHMiIHBvc3Rlcj0iLi4vY29udGVudC9hYmUu
cG5nIiBwcmVsb2FkPSJhdXRvIj4KKzwvdmlkZW8+Cis8c2NyaXB0PgorZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRoZVZpZGVvIikuc3JjID0gZmluZE1lZGlhRmlsZSgndmlkZW8nLCAnLi4vY29u
dGVudC9jb3VudGluZycpOworPC9zY3JpcHQ+Cis8L29iamVjdD4KKzwvYm9keT4K
</data>
<flag name="review"
          id="119716"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>