<?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>93891</bug_id>
          
          <creation_ts>2012-08-13 13:30:33 -0700</creation_ts>
          <short_desc>ASSERTION FAILED: !currBox-&gt;needsLayout() loading bing maps</short_desc>
          <delta_ts>2015-07-28 12:43:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://binged.it/K9uLcw</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>changseok</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimitris.apostolou</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>esprehn</cc>
    
    <cc>glenn</cc>
    
    <cc>inferno</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>kyounga.ra</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>leviw</cc>
    
    <cc>mihnea</cc>
    
    <cc>rbyers</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>694024</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-13 13:30:33 -0700</bug_when>
    <thetext>I hit an assertion when loading http://binged.it/K9uLcw:


ASSERTION FAILED: !currBox-&gt;needsLayout()
/Volumes/SSData/Development/OSX/webkit/OpenSource/Source/WebCore/rendering/RenderBlock.cpp(7431) : void WebCore::RenderBlock::checkPositionedObjectsNeedLayout()
1   0x103f70de2 WebCore::RenderBlock::checkPositionedObjectsNeedLayout()
2   0x1040b7e83 WebCore::RenderObject::checkBlockPositionedObjectsNeedLayout()
3   0x1031ef58c WebCore::RenderObject::setNeedsLayout(bool, WebCore::MarkingBehavior)
4   0x103f49f7c WebCore::RenderBlock::layoutBlock(bool, WebCore::FractionalLayoutUnit)
5   0x103f488d5 WebCore::RenderBlock::layout()
6   0x1041c265d WebCore::RenderView::layout()
7   0x1034c71af WebCore::FrameView::layout(bool)
8   0x1031b0fce WebCore::Document::updateLayout()
9   0x1031b10a5 WebCore::Document::updateLayoutIgnorePendingStylesheets()
10  0x10334a1de WebCore::DOMWindow::scrollY() const
11  0x10396af95 WebCore::DOMWindow::pageYOffset() const
12  0x10393f0ad WebCore::jsDOMWindowPageYOffset(JSC::ExecState*, JSC::JSValue, JSC::PropertyName)
13  0x102034069 JSC::PropertySlot::getValue(JSC::ExecState*, JSC::PropertyName) const
14  0x1020435a2 JSC::JSValue::get(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;) const
15  0x1023c52f1 llint_slow_path_get_by_id
16  0x1023ce175 llint_op_get_by_id
17  0x1021e2fd4 JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*)
18  0x1021dfd8f JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
19  0x1020917d8 JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
20  0x1038724c2 WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
21  0x1042238ce WebCore::ScheduledAction::executeFunctionInContext(JSC::JSGlobalObject*, JSC::JSValue, WebCore::ScriptExecutionContext*)
22  0x1042234a3 WebCore::ScheduledAction::execute(WebCore::Document*)
23  0x1042232f4 WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext*)
24  0x10333acb9 WebCore::DOMTimer::fired()
25  0x10458734d WebCore::ThreadTimers::sharedTimerFiredInternal()
26  0x1045870e9 WebCore::ThreadTimers::sharedTimerFired()
27  0x1042cc3e3 WebCore::timerFired(__CFRunLoopTimer*, void*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721569</commentid>
    <comment_count>1</comment_count>
      <attachid>164312</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-09-16 02:37:29 -0700</bug_when>
    <thetext>Created attachment 164312
reduced test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721570</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-09-16 03:44:26 -0700</bug_when>
    <thetext>1, When the div&apos;s position attribute is changed from fixed to absolute (c.style.position = &quot;absolute&quot;;), it first gets removed and then added back to gPositionedDescendantsMap ListHashSet (RenderBlock::removePositionedObject/insertPositionedObject). 
2, With nested positioned divs, after the position attribute change of the outer div (remove-insert), the inner div gets in front of the outer in the positionedDescendatnsMap. 
3, During a subsequent layout, as RenderBlock::layoutPositionedObjects() iterates through the positioned objects, it first lays out the inner div followed by the outer div.
4, The inner div is marked dirty at RenderBlock::layoutInlineChildren(), while the outer div is being layed out.
5, RenderBlock::layoutPositionedObjects() leaves with the inner div marked dirty.
-&gt;ASSERT.

Not sure why we are marking the fixed positioned inner div dirty, when only the outer (non containing) div is changed (but not the containing block), but the actual fix I think is to make sure the ListHashSet of the positioned objects is in the right order. Proposed fix is coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721576</commentid>
    <comment_count>3</comment_count>
      <attachid>164314</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-09-16 05:02:22 -0700</bug_when>
    <thetext>Created attachment 164314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721580</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-09-16 05:15:43 -0700</bug_when>
    <thetext>alternatively we could limit this change to positioned objects only (gPositionedDescendantsMap) instead of every TrackedRendererListHashSet object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721618</commentid>
    <comment_count>5</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2012-09-16 10:27:06 -0700</bug_when>
    <thetext>This looks like a regression from http://trac.webkit.org/changeset/125351 when we removed m_positionedObjects from every renderblock, saving 4 bytes, but looks like we need to take care of the order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721621</commentid>
    <comment_count>6</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2012-09-16 10:36:39 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This looks like a regression from http://trac.webkit.org/changeset/125351 when we removed m_positionedObjects from every renderblock, saving 4 bytes, but looks like we need to take care of the order.

Ok, i take that back, the order wasn&apos;t enforced even before r125351 (so not a regression). Also, it is not required for percent height descendant sharing the same code - http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/rendering/RenderBlock.cpp&amp;exact_package=chromium&amp;q=file:webkit%20RenderBlock.cpp&amp;type=cs&amp;l=2325</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721624</commentid>
    <comment_count>7</comment_count>
      <attachid>164314</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-16 10:46:07 -0700</bug_when>
    <thetext>Comment on attachment 164314
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        removed and then added back to the list of positioned objects (gPositionedDescendantsMap).
&gt; +        The container&apos;s new position in the list (appended to the end) may be different from its original position.

I would try to keep these lines a bit shorter

&gt; Source/WebCore/rendering/RenderBlock.cpp:3640
&gt; +            RenderBox* r = *it;

box?

Maybe add a comment like // Insert parent before child, as layoutPositionedObjects relies on that.

&gt; LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash-expected.txt:4
&gt; +
&gt; +

Could we avoid two newlines?

&gt; LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html:12
&gt; +    &lt;script type=&quot;text/javascript&quot;&gt;

we normally specify that it is javascript as that is default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721626</commentid>
    <comment_count>8</comment_count>
      <attachid>164323</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-09-16 12:24:20 -0700</bug_when>
    <thetext>Created attachment 164323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721679</commentid>
    <comment_count>9</comment_count>
      <attachid>164323</attachid>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2012-09-16 21:35:38 -0700</bug_when>
    <thetext>Comment on attachment 164323
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        RenderBlock::layoutPositionedObjects()&apos;s logic relies on &apos;parent first&apos;

You need to add a line explaining why it is &apos;&apos;parent first&apos; ordering and how stuff is marked in RenderBlock::layoutInlineChildren.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3636
&gt; +    bool didInsertDescendant = false;

Move this line after the comment below.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3639
&gt; +    if (descendant-&gt;isRenderBlock()) {

I dont think you need to add this virtual call. We want to keep the parent-child order in all cases.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3644
&gt; +                didInsertDescendant = descendantSet-&gt;insertBefore(box, descendant).isNewEntry;

didInsertDescendant will always be true since you bail out on &apos;descendantSet-&gt;contains(descendant)&apos; above. So, no need of the isNewEntry check and assert below.

&gt; LayoutTests/ChangeLog:3
&gt; +        ASSERTION FAILED: !currBox-&gt;needsLayout() loading bing maps

Please move this assertion failure to the description and keep the same title as webcore/changelog here.

&gt; LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html:1
&gt; +&lt;html&gt;

Please declare a !DOCTYPE

&gt; LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html:3
&gt; +    &lt;div id=&quot;toabsolute&quot; style=&quot;position: fixed;&quot;&gt;

instead of toabsolute, please use a good identifier like &apos;container&apos;

&gt; LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html:14
&gt; +         var m = document.getElementById(&quot;foo&quot;);

there is no correlation b/w m and foo, please use a better identifier.

&gt; LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html:15
&gt; +         var c = document.getElementById(&quot;toabsolute&quot;);

instead of &apos;c&apos;, just use &apos;container&apos;

&gt; LayoutTests/fast/dynamic/position-fixed-to-absolute-with-positioned-child-crash.html:20
&gt; +         c.offsetHeight;

This layout call is not needed, it should be automatic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722573</commentid>
    <comment_count>10</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2012-09-18 01:02:20 -0700</bug_when>
    <thetext>Also, the loop is pretty inefficient [99% of the time we are adding descendants at end], you should reverse it and check if the new box is a descendant of the last box in the chain, so basically an insertafter loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723599</commentid>
    <comment_count>11</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-09-19 09:04:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Also, the loop is pretty inefficient [99% of the time we are adding descendants at end], you should reverse it and check if the new box is a descendant of the last box in the chain, so basically an insertafter loop.
Thanks for looking at the code. It is indeed highly inefficient, but probably because of the nature of the positioned elements, most of the inserts dont have parent-child relationship (100 to 1 according to my quick test on some major sites). 
So checking whether the last box is a parent unfortunately does not help to make it run faster either. (unless i misunderstood your comment)
I&apos;ll try to find a way to make it better, but given the average number of positioned elements per document, it will probably not be noticeable. (even though I agree, it is really inefficient)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729116</commentid>
    <comment_count>12</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-09-26 18:20:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/12369546&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733601</commentid>
    <comment_count>13</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-10-03 05:49:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Also, the loop is pretty inefficient [99% of the time we are adding descendants at end], you should reverse it and check if the new box is a descendant of the last box in the chain, so basically an insertafter loop.

How about doing something like this:
Since an insert needs to be preceded by a remove, we can track whether a remove happened and just do the insertBefore only when there&apos;s been a remove. Most of the time there&apos;s no remove at all and no need to enter the loop to find the right position. It can, however, be a little bit more sophisticated than just a remove-happened-flag and track the removed node&apos;s children in a HashSet and check whether a about-to-be-added node needs to be &apos;inserted before&apos; or a simple append will do.
1, have a WTF::HashMap&lt;const RenderBlock*, HashSet&lt;RenderBlock*&gt;*&gt; to track children of removed parents&apos; (similarly to TrackedDescendantsMap)
2, when a node gets removed, check the following nodes in the HashList whether they are descendants and add them to the HashSet. Most of the time, this loop will break on the next node in the HashList and adds nothing to the HashSet.  
3,  when a new node gets added, check whether the HashSet is empty and look for children there. If a descendant is found (most likely not), then do insertBefore in the HashList instead of append.
4, when the associated RenderBlock is destroyed, delete the children HashSet too. (similarly to removeBlockFromDescendantAndContainerMaps)
(I ignored some details like when remove happens, the HashSet needs to be checked to not to end up with orphan nodes)

In best case scenario (which is mostly the case here), the overhead is a size of a (NULL) pointer, while the worst case is to double the size of gPercentHeightDescendantsMap, which is in itself is small most of the time. This brings in a little bit of a complexity, but the performance is not affected as much as with the always-loop-through solution.

However, it would great to know whether this can be fixed by not mandating the parent-child ordering. I assume if both the parent and the child are in the same positioned list, then the child&apos;s layout does not depend on the parent&apos;s layout as its containing block is the actual RenderBlock that holds the list of the positioned objects and not the parent. I might me mistaken here by ignoring some cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733701</commentid>
    <comment_count>14</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2012-10-03 07:55:46 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #10)
&gt; &gt; Also, the loop is pretty inefficient [99% of the time we are adding descendants at end], you should reverse it and check if the new box is a descendant of the last box in the chain, so basically an insertafter loop.
&gt; 
&gt; How about doing something like this:
&gt; Since an insert needs to be preceded by a remove, we can track whether a remove happened and just do the insertBefore only when there&apos;s been a remove. Most of the time there&apos;s no remove at all and no need to enter the loop to find the right position. It can, however, be a little bit more sophisticated than just a remove-happened-flag and track the removed node&apos;s children in a HashSet and check whether a about-to-be-added node needs to be &apos;inserted before&apos; or a simple append will do.
&gt; 1, have a WTF::HashMap&lt;const RenderBlock*, HashSet&lt;RenderBlock*&gt;*&gt; to track children of removed parents&apos; (similarly to TrackedDescendantsMap)
&gt; 2, when a node gets removed, check the following nodes in the HashList whether they are descendants and add them to the HashSet. Most of the time, this loop will break on the next node in the HashList and adds nothing to the HashSet.  
&gt; 3,  when a new node gets added, check whether the HashSet is empty and look for children there. If a descendant is found (most likely not), then do insertBefore in the HashList instead of append.
&gt; 4, when the associated RenderBlock is destroyed, delete the children HashSet too. (similarly to removeBlockFromDescendantAndContainerMaps)
&gt; (I ignored some details like when remove happens, the HashSet needs to be checked to not to end up with orphan nodes)
&gt; 
&gt; In best case scenario (which is mostly the case here), the overhead is a size of a (NULL) pointer, while the worst case is to double the size of gPercentHeightDescendantsMap, which is in itself is small most of the time. This brings in a little bit of a complexity, but the performance is not affected as much as with the always-loop-through solution.
&gt; 
&gt; However, it would great to know whether this can be fixed by not mandating the parent-child ordering. I assume if both the parent and the child are in the same positioned list, then the child&apos;s layout does not depend on the parent&apos;s layout as its containing block is the actual RenderBlock that holds the list of the positioned objects and not the parent. I might me mistaken here by ignoring some cases.

I dont think the added complexity and memory overhead is worth for this simple case. I still like your original solution but with the loop reversed should be fine here. Lets see if what other cced folks think ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733815</commentid>
    <comment_count>15</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-10-03 10:20:45 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I dont think the added complexity and memory overhead is worth for this simple case. I still like your original solution but with the loop reversed should be fine here. Lets see if what other cced folks think ?

This sounds like the right approach to me. I don&apos;t think the approach in c13 is warranted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733865</commentid>
    <comment_count>16</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-10-03 11:17:10 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; I dont think the added complexity and memory overhead is worth for this simple case. I still like your original solution but with the loop reversed should be fine here. Lets see if what other cced folks think ?
&gt; 
&gt; This sounds like the right approach to me. I don&apos;t think the approach in c13 is warranted.
Great, thanks for the feedback. I also think that the second approach introduces too much complexity with little benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753868</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-10-29 16:48:25 -0700</bug_when>
    <thetext>*** Bug 100615 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801976</commentid>
    <comment_count>18</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2013-01-07 20:46:31 -0800</bug_when>
    <thetext>Any update on this?  We&apos;ve had some reports of hitting this assert in chromium (eg. https://code.google.com/p/chromium/issues/detail?id=144608).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111743</commentid>
    <comment_count>19</comment_count>
      <attachid>257378</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-07-23 14:15:24 -0700</bug_when>
    <thetext>Created attachment 257378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111749</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-23 14:17:45 -0700</bug_when>
    <thetext>Attachment 257378 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlock.cpp:1310:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1311:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1313:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1322:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1324:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 5 in 2 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>1111762</commentid>
    <comment_count>21</comment_count>
      <attachid>257378</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-07-23 14:38:25 -0700</bug_when>
    <thetext>Comment on attachment 257378
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:1311
&gt; +    // objects that are positioned implicitly like this.  Such objects are rare, and so in typical DHTML menu usage (where everything is

DHTML huehue

&gt; Source/WebCore/rendering/RenderBlock.cpp:2122
&gt; -    }
&gt; +    }    

Whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112492</commentid>
    <comment_count>22</comment_count>
      <attachid>257588</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-07-27 13:57:06 -0700</bug_when>
    <thetext>Created attachment 257588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112494</commentid>
    <comment_count>23</comment_count>
      <attachid>257588</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-07-27 13:58:52 -0700</bug_when>
    <thetext>Comment on attachment 257588
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:2122
&gt; +    }    

Whitespace!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112495</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-27 13:59:08 -0700</bug_when>
    <thetext>Attachment 257588 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlock.cpp:1310:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1311:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1313:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1322:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:1324:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 5 in 6 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>1112814</commentid>
    <comment_count>25</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-07-28 12:43:36 -0700</bug_when>
    <thetext>Fixed in r187502.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>164312</attachid>
            <date>2012-09-16 02:37:29 -0700</date>
            <delta_ts>2015-07-27 13:57:06 -0700</delta_ts>
            <desc>reduced test case</desc>
            <filename>bing.html</filename>
            <type>text/html</type>
            <size>359</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8cCBpZD0iZm9vIj48L3A+ICAgIAo8ZGl2IGlkPSJmb28yIiBzdHlsZT0i
cG9zaXRpb246IGZpeGVkOyI+CjxkaXYgc3R5bGU9InBvc2l0aW9uOiBmaXhlZDsiPjwvZGl2Pgo8
L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp2YXIgbSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJmb28iKTsKdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9v
MiIpOwpjLm9mZnNldEhlaWdodDsKYy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CmMuc3R5
bGUud2lkdGggPSBtLm9mZnNldFdpZHRoICsgInB4IjsKYy5vZmZzZXRIZWlnaHQ7Cjwvc2NyaXB0
Pgo8L2JvZHk+CjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164314</attachid>
            <date>2012-09-16 05:02:22 -0700</date>
            <delta_ts>2012-09-16 12:24:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93891-20120916140150.patch</filename>
            <type>text/plain</type>
            <size>5472</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODcwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA5LTE2ICBaYWxhbiBC
dWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4KKworICAgICAgICBFbnN1cmUgdGhhdCBwb3NpdGlv
bmVkIG9iamVjdHMnIGxpc3QgaXMgYWx3YXlzIGluIHJpZ2h0IG9yZGVyIChwYXJlbnQgZmlyc3Qp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Mzg5MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gYSBj
b250YWluZXIncyBwb3NpdGlvbiBhdHRyaWJ1dGUgaXMgY2hhbmdlZCAoZml4ZWQtPmFic29sdXRl
KSwgaXQgaXMgZmlyc3QKKyAgICAgICAgcmVtb3ZlZCBhbmQgdGhlbiBhZGRlZCBiYWNrIHRvIHRo
ZSBsaXN0IG9mIHBvc2l0aW9uZWQgb2JqZWN0cyAoZ1Bvc2l0aW9uZWREZXNjZW5kYW50c01hcCku
CisgICAgICAgIFRoZSBjb250YWluZXIncyBuZXcgcG9zaXRpb24gaW4gdGhlIGxpc3QgKGFwcGVu
ZGVkIHRvIHRoZSBlbmQpIG1heSBiZSBkaWZmZXJlbnQgZnJvbSBpdHMgb3JpZ2luYWwgcG9zaXRp
b24uCisgICAgICAgIElmIHRoaXMgY29udGFpbmVyIGhhcyBhIHBvc2l0aW9uZWQgY2hpbGQgaW4g
dGhlIHNhbWUgbGlzdCwgYWZ0ZXIgdGhlIGFwcGVuZCwgYW55IGl0ZXJhdGlvbiB0aHJvdWdoIHRo
ZSBsaXN0CisgICAgICAgIGJyaW5ncyB1cCB0aGUgY2hpbGQgZmlyc3QgYW5kIHRoZW4gdGhlIHBh
cmVudC4KKyAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKCkncyBs
b2dpYyByZWxpZXMgb24gJ3BhcmVudCBmaXJzdCcgcG9zaXRpb25lZCBvYmplY3Qgb3JkZXJpbmcu
CisgICAgICAgIFdyb25nIG9yZGVyaW5nIGNvdWxkIGxlYWQgdG8gaGF2aW5nIGRpcnR5IGNoaWxk
cmVuIG9iamVjdHMgYXJvdW5kLCBhZnRlciBmaW5pc2hpbmcgbGF5b3V0aW5nIHBvc2l0aW9uZWQg
b2JqZWN0cy4KKworICAgICAgICBGaXggaXQgYnkgaW5zZXJ0aW5nIHRoZSBwYXJlbnQgYmVmb3Jl
IHRoZSBjaGlsZCwgaW5zdGVhZCBvZiBhcHBlbmRpbmcgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlz
dC4KKworICAgICAgICBUZXN0OiBmYXN0L2R5bmFtaWMvcG9zaXRpb24tZml4ZWQtdG8tYWJzb2x1
dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLmh0bWwKKworICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0
SW50b1RyYWNrZWRSZW5kZXJlck1hcHMpOgorCiAyMDEyLTA5LTE1ICBNaWtlIFdlc3QgIDxta3dz
dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUGF1c2UgaW5zcGVjdG9yIHdoZW4gaW5saW5lIHNj
cmlwdHMgYXJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3kuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEyODU1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2MjYsMTMgKzM2MjYsMjkgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0SW50b1RyYWNr
ZWRSZW5kZQogICAgICAgICBkZXNjZW5kYW50U2V0ID0gbmV3IFRyYWNrZWRSZW5kZXJlckxpc3RI
YXNoU2V0OwogICAgICAgICBkZXNjZW5kYW50c01hcC0+c2V0KHRoaXMsIGRlc2NlbmRhbnRTZXQp
OwogICAgIH0KLSAgICBib29sIGFkZGVkID0gZGVzY2VuZGFudFNldC0+YWRkKGRlc2NlbmRhbnQp
LmlzTmV3RW50cnk7Ci0gICAgaWYgKCFhZGRlZCkgeworCisgICAgaWYgKGRlc2NlbmRhbnRTZXQt
PmNvbnRhaW5zKGRlc2NlbmRhbnQpKSB7CiAgICAgICAgIEFTU0VSVChjb250YWluZXJNYXAtPmdl
dChkZXNjZW5kYW50KSk7CiAgICAgICAgIEFTU0VSVChjb250YWluZXJNYXAtPmdldChkZXNjZW5k
YW50KS0+Y29udGFpbnModGhpcykpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisg
ICAgYm9vbCBkaWRJbnNlcnREZXNjZW5kYW50ID0gZmFsc2U7CisgICAgaWYgKGRlc2NlbmRhbnQt
PmlzUmVuZGVyQmxvY2soKSkgeworICAgICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldDo6
aXRlcmF0b3IgZW5kID0gZGVzY2VuZGFudFNldC0+ZW5kKCk7CisgICAgICAgIGZvciAoVHJhY2tl
ZFJlbmRlcmVyTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gZGVzY2VuZGFudFNldC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHIgPSAqaXQ7Cisg
ICAgICAgICAgICBpZiAoci0+aXNEZXNjZW5kYW50T2YoZGVzY2VuZGFudCkpIHsKKyAgICAgICAg
ICAgICAgICBkaWRJbnNlcnREZXNjZW5kYW50ID0gZGVzY2VuZGFudFNldC0+aW5zZXJ0QmVmb3Jl
KHIsIGRlc2NlbmRhbnQpLmlzTmV3RW50cnk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGRpZElu
c2VydERlc2NlbmRhbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFkaWRJbnNlcnREZXNjZW5kYW50KQorICAgICAg
ICBkZXNjZW5kYW50U2V0LT5hZGQoZGVzY2VuZGFudCk7CisKICAgICBIYXNoU2V0PFJlbmRlckJs
b2NrKj4qIGNvbnRhaW5lclNldCA9IGNvbnRhaW5lck1hcC0+Z2V0KGRlc2NlbmRhbnQpOwogICAg
IGlmICghY29udGFpbmVyU2V0KSB7CiAgICAgICAgIGNvbnRhaW5lclNldCA9IG5ldyBIYXNoU2V0
PFJlbmRlckJsb2NrKj47CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjg3MDYpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOS0xNiAg
WmFsYW4gQnVqdGFzICA8emJ1anRhc0BnbWFpbC5jb20+CisKKyAgICAgICAgQVNTRVJUSU9OIEZB
SUxFRDogIWN1cnJCb3gtPm5lZWRzTGF5b3V0KCkgbG9hZGluZyBiaW5nIG1hcHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzODkxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2R5bmFtaWMvcG9z
aXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9keW5hbWljL3Bvc2l0aW9uLWZpeGVkLXRv
LWFic29sdXRlLXdpdGgtcG9zaXRpb25lZC1jaGlsZC1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wOS0xNSAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEJyZWFr
IG9uIGlubGluZSBzY3JpcHRzIGJsb2NrZWQgYnkgQ1NQLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9keW5hbWljL3Bvc2l0aW9uLWZpeGVkLXRvLWFic29sdXRlLXdpdGgtcG9zaXRpb25lZC1jaGls
ZC1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9keW5h
bWljL3Bvc2l0aW9uLWZpeGVkLXRvLWFic29sdXRlLXdpdGgtcG9zaXRpb25lZC1jaGlsZC1jcmFz
aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2R5bmFtaWMv
cG9zaXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3RzIHRoYXQg
Y2hhbmdpbmcgdGhlIGNvbnRhaW5lcidzIHBvc2l0aW9uIGZyb20gZml4ZWQgdG8gYWJzb2x1dGUg
aXMgc2FmZSwgd2hlbiBjaGlsZCBjb250YWluZXIgd2l0aCBmaXhlZCBwb3NpdGlvbiBpcyBwcmVz
ZW50LgorUEFTUywgaWYgbm8gY3Jhc2ggb3IgYXNzZXJ0IGluIGRlYnVnLgorCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZHluYW1pYy9wb3NpdGlvbi1maXhlZC10by1hYnNvbHV0ZS13aXRoLXBv
c2l0aW9uZWQtY2hpbGQtY3Jhc2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2R5bmFtaWMvcG9zaXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxk
LWNyYXNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2R5bmFtaWMvcG9z
aXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKKzxodG1sPgorPGJvZHk+CisgICAgPHAgaWQ9
ImZvbyI+CisgICAgICAgIFRoaXMgdGVzdHMgdGhhdCBjaGFuZ2luZyB0aGUgY29udGFpbmVyJ3Mg
cG9zaXRpb24gZnJvbSBmaXhlZCB0byBhYnNvbHV0ZSBpcyBzYWZlLCB3aGVuCisgICAgICAgIGNo
aWxkIGNvbnRhaW5lciB3aXRoIGZpeGVkIHBvc2l0aW9uIGlzIHByZXNlbnQuPGJyPgorICAgICAg
ICBQQVNTLCBpZiBubyBjcmFzaCBvciBhc3NlcnQgaW4gZGVidWcuCisgICAgPC9wPiAgICAKKyAg
ICA8ZGl2IGlkPSJ0b2Fic29sdXRlIiBzdHlsZT0icG9zaXRpb246IGZpeGVkOyI+CisgICAgICAg
IDxkaXYgc3R5bGU9InBvc2l0aW9uOiBmaXhlZDsiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIAor
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAg
ICB2YXIgbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKTsKKyAgICAgICAgIHZhciBj
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRvYWJzb2x1dGUiKTsKKyAgICAgICAgIAorICAg
ICAgICAgYy5vZmZzZXRIZWlnaHQ7CisgICAgICAgICBjLnN0eWxlLnBvc2l0aW9uID0gImFic29s
dXRlIjsKKyAgICAgICAgIGMuc3R5bGUud2lkdGggPSBtLm9mZnNldFdpZHRoICsgInB4IjsKKyAg
ICAgICAgIGMub2Zmc2V0SGVpZ2h0OworICAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164323</attachid>
            <date>2012-09-16 12:24:20 -0700</date>
            <delta_ts>2015-07-23 14:15:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93891-20120916212348.patch</filename>
            <type>text/plain</type>
            <size>5466</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODcwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA5LTE2ICBaYWxhbiBC
dWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4KKworICAgICAgICBFbnN1cmUgdGhhdCBwb3NpdGlv
bmVkIG9iamVjdHMnIGxpc3QgaXMgYWx3YXlzIGluIHBhcmVudCBmaXJzdCBvcmRlci4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzODkxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBhIGNvbnRhaW5l
cidzIHBvc2l0aW9uIGF0dHJpYnV0ZSBpcyBjaGFuZ2VkIChmaXhlZC0+YWJzb2x1dGUpLAorICAg
ICAgICBpdCBpcyBmaXJzdCByZW1vdmVkIGFuZCB0aGVuIGFwcGVuZGVkIGJhY2sgdG8gdGhlIGxp
c3Qgb2YgcG9zaXRpb25lZCBvYmplY3RzLgorICAgICAgICBUaGUgY29udGFpbmVyJ3MgbmV3IHBv
c2l0aW9uIGluIHRoZSBsaXN0IG1heSBiZSBkaWZmZXJlbnQgZnJvbSBpdHMKKyAgICAgICAgb3Jp
Z2luYWwgcG9zaXRpb24uIElmIHRoaXMgY29udGFpbmVyIGFsc28gaGFzIGEgcG9zaXRpb25lZCBj
aGlsZCwKKyAgICAgICAgYW55IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBsaXN0IGJyaW5ncyB1cCBu
b3cgdGhlIGNoaWxkIGJlZm9yZSB0aGUgcGFyZW50LgorICAgICAgICBSZW5kZXJCbG9jazo6bGF5
b3V0UG9zaXRpb25lZE9iamVjdHMoKSdzIGxvZ2ljIHJlbGllcyBvbiAncGFyZW50IGZpcnN0Jwor
ICAgICAgICBwb3NpdGlvbmVkIG9iamVjdCBvcmRlcmluZy4gV3Jvbmcgb3JkZXJpbmcgY291bGQg
ZW5kIHVwIGhhdmluZyBkaXJ0eQorICAgICAgICBjaGlsZHJlbiwgYWZ0ZXIgZmluaXNoaW5nIGxh
eW91dGluZyBwb3NpdGlvbmVkIG9iamVjdHMuCisKKyAgICAgICAgRml4IGl0IGJ5IGluc2VydGlu
ZyB0aGUgcGFyZW50IGJlZm9yZSB0aGUgY2hpbGQsCisgICAgICAgIGluc3RlYWQgb2YgYXBwZW5k
aW5nIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisKKyAgICAgICAgVGVzdDogZmFzdC9keW5h
bWljL3Bvc2l0aW9uLWZpeGVkLXRvLWFic29sdXRlLXdpdGgtcG9zaXRpb25lZC1jaGlsZC1jcmFz
aC5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEludG9UcmFja2VkUmVuZGVyZXJNYXBzKToKKwog
MjAxMi0wOS0xNSAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFBh
dXNlIGluc3BlY3RvciB3aGVuIGlubGluZSBzY3JpcHRzIGFyZSBibG9ja2VkIGJ5IENvbnRlbnQg
U2VjdXJpdHkgUG9saWN5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiAxMjg1NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjI2LDEzICszNjI2LDMxIEBAIHZvaWQg
UmVuZGVyQmxvY2s6Omluc2VydEludG9UcmFja2VkUmVuZGUKICAgICAgICAgZGVzY2VuZGFudFNl
dCA9IG5ldyBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldDsKICAgICAgICAgZGVzY2VuZGFudHNN
YXAtPnNldCh0aGlzLCBkZXNjZW5kYW50U2V0KTsKICAgICB9Ci0gICAgYm9vbCBhZGRlZCA9IGRl
c2NlbmRhbnRTZXQtPmFkZChkZXNjZW5kYW50KS5pc05ld0VudHJ5OwotICAgIGlmICghYWRkZWQp
IHsKKworICAgIGlmIChkZXNjZW5kYW50U2V0LT5jb250YWlucyhkZXNjZW5kYW50KSkgewogICAg
ICAgICBBU1NFUlQoY29udGFpbmVyTWFwLT5nZXQoZGVzY2VuZGFudCkpOwogICAgICAgICBBU1NF
UlQoY29udGFpbmVyTWFwLT5nZXQoZGVzY2VuZGFudCktPmNvbnRhaW5zKHRoaXMpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIGJvb2wgZGlkSW5zZXJ0RGVzY2VuZGFudCA9
IGZhbHNlOworCisgICAgLy8gVHJ5IHRvIGluc2VydCBwYXJlbnQgYmVmb3JlIGNoaWxkLCBhcyBs
YXlvdXRQb3NpdGlvbmVkT2JqZWN0cyByZWxpZXMgb24gJ3BhcmVudCBmaXJzdCcgb3JkZXJpbmcu
CisgICAgaWYgKGRlc2NlbmRhbnQtPmlzUmVuZGVyQmxvY2soKSkgeworICAgICAgICBUcmFja2Vk
UmVuZGVyZXJMaXN0SGFzaFNldDo6aXRlcmF0b3IgZW5kID0gZGVzY2VuZGFudFNldC0+ZW5kKCk7
CisgICAgICAgIGZvciAoVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0g
ZGVzY2VuZGFudFNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBS
ZW5kZXJCb3gqIGJveCA9ICppdDsKKyAgICAgICAgICAgIGlmIChib3gtPmlzRGVzY2VuZGFudE9m
KGRlc2NlbmRhbnQpKSB7CisgICAgICAgICAgICAgICAgZGlkSW5zZXJ0RGVzY2VuZGFudCA9IGRl
c2NlbmRhbnRTZXQtPmluc2VydEJlZm9yZShib3gsIGRlc2NlbmRhbnQpLmlzTmV3RW50cnk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGRpZEluc2VydERlc2NlbmRhbnQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFk
aWRJbnNlcnREZXNjZW5kYW50KQorICAgICAgICBkZXNjZW5kYW50U2V0LT5hZGQoZGVzY2VuZGFu
dCk7CisKICAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4qIGNvbnRhaW5lclNldCA9IGNvbnRhaW5l
ck1hcC0+Z2V0KGRlc2NlbmRhbnQpOwogICAgIGlmICghY29udGFpbmVyU2V0KSB7CiAgICAgICAg
IGNvbnRhaW5lclNldCA9IG5ldyBIYXNoU2V0PFJlbmRlckJsb2NrKj47CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMjg3MDYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMyBAQAorMjAxMi0wOS0xNiAgWmFsYW4gQnVqdGFzICA8emJ1anRhc0BnbWFpbC5j
b20+CisKKyAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogIWN1cnJCb3gtPm5lZWRzTGF5b3V0KCkg
bG9hZGluZyBiaW5nIG1hcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTkzODkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L2R5bmFtaWMvcG9zaXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1w
b3NpdGlvbmVkLWNoaWxkLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9keW5hbWljL3Bvc2l0aW9uLWZpeGVkLXRvLWFic29sdXRlLXdpdGgtcG9zaXRpb25lZC1jaGls
ZC1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAxMi0wOS0xNSAgTWlrZSBXZXN0ICA8bWt3c3RAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEJyZWFrIG9uIGlubGluZSBzY3JpcHRzIGJsb2NrZWQgYnkg
Q1NQLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9keW5hbWljL3Bvc2l0aW9uLWZpeGVkLXRvLWFi
c29sdXRlLXdpdGgtcG9zaXRpb25lZC1jaGlsZC1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9keW5hbWljL3Bvc2l0aW9uLWZpeGVkLXRvLWFic29sdXRl
LXdpdGgtcG9zaXRpb25lZC1jaGlsZC1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2R5bmFtaWMvcG9zaXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0
aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyIEBACitUaGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgdGhlIGNvbnRhaW5lcidzIHBvc2l0
aW9uIGZyb20gZml4ZWQgdG8gYWJzb2x1dGUgaXMgc2FmZSwgd2hlbiBjaGlsZCBjb250YWluZXIg
d2l0aCBmaXhlZCBwb3NpdGlvbiBpcyBwcmVzZW50LgorUEFTUywgaWYgbm8gY3Jhc2ggb3IgYXNz
ZXJ0IGluIGRlYnVnLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9keW5hbWljL3Bvc2l0aW9uLWZp
eGVkLXRvLWFic29sdXRlLXdpdGgtcG9zaXRpb25lZC1jaGlsZC1jcmFzaC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZHluYW1pYy9wb3NpdGlvbi1maXhlZC10by1hYnNvbHV0
ZS13aXRoLXBvc2l0aW9uZWQtY2hpbGQtY3Jhc2guaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZHluYW1pYy9wb3NpdGlvbi1maXhlZC10by1hYnNvbHV0ZS13aXRoLXBvc2l0
aW9uZWQtY2hpbGQtY3Jhc2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0
bWw+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0b2Fic29sdXRlIiBzdHlsZT0icG9zaXRpb246IGZp
eGVkOyI+CisgICAgICAgIDxkaXYgc3R5bGU9InBvc2l0aW9uOiBmaXhlZDsiPjwvZGl2PgorICAg
IDwvZGl2PgorICAgIDxwIGlkPSJmb28iPgorICAgICAgICBUaGlzIHRlc3RzIHRoYXQgY2hhbmdp
bmcgdGhlIGNvbnRhaW5lcidzIHBvc2l0aW9uIGZyb20gZml4ZWQgdG8gYWJzb2x1dGUgaXMgc2Fm
ZSwgd2hlbgorICAgICAgICBjaGlsZCBjb250YWluZXIgd2l0aCBmaXhlZCBwb3NpdGlvbiBpcyBw
cmVzZW50Ljxicj4KKyAgICAgICAgUEFTUywgaWYgbm8gY3Jhc2ggb3IgYXNzZXJ0IGluIGRlYnVn
LgorICAgIDwvcD4gICAgCisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICB2YXIg
bSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKTsKKyAgICAgICAgIHZhciBjID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRvYWJzb2x1dGUiKTsKKyAgICAgICAgIAorICAgICAgICAg
Yy5vZmZzZXRIZWlnaHQ7CisgICAgICAgICBjLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsK
KyAgICAgICAgIGMuc3R5bGUud2lkdGggPSBtLm9mZnNldFdpZHRoICsgInB4IjsKKyAgICAgICAg
IGMub2Zmc2V0SGVpZ2h0OworICAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="176057"
          type_id="1"
          status="-"
          setter="inferno"
    />
    <flag name="commit-queue"
          id="176072"
          type_id="3"
          status="-"
          setter="inferno"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257378</attachid>
            <date>2015-07-23 14:15:24 -0700</date>
            <delta_ts>2015-07-27 13:57:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>10309</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
MTg3MTA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI5Myw3MSArMTI5Myw3NSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2Nr
OjptYXJnaW5JbnRyaW5zaWNMCiAgICAgcmV0dXJuIG1hcmdpbjsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuLCBib29s
IGZpeGVkUG9zaXRpb25PYmplY3RzT25seSkKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0
aW9uZWRPYmplY3QoUmVuZGVyQm94JiByLCBib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGJvb2wgZml4
ZWRQb3NpdGlvbk9iamVjdHNPbmx5KQogewotICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0
KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVkT2JqZWN0cygpOwotICAgIGlmICgh
cG9zaXRpb25lZERlc2NlbmRhbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8g
aXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmJlZ2luKCksIGVuZCA9IHBvc2l0aW9uZWREZXNj
ZW5kYW50cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJCb3gmIHIg
PSAqKml0OwotICAgICAgICAKLSAgICAgICAgZXN0aW1hdGVSZWdpb25SYW5nZUZvckJveENoaWxk
KHIpOworICAgIGVzdGltYXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChyKTsKIAotICAgICAgICAv
LyBBIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgd2l0aCBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGFu
Y2VzdG9yIGhhcyBubyB3YXkgb2Yga25vd2luZyBpZiB0aGUgbGF0dGVyIGhhcyBjaGFuZ2VkIHBv
c2l0aW9uLiBTbwotICAgICAgICAvLyBpZiB0aGlzIGlzIGEgZml4ZWQgcG9zaXRpb24gZWxlbWVu
dCwgbWFyayBpdCBmb3IgbGF5b3V0IGlmIGl0IGhhcyBhbiBhYnNwb3MgYW5jZXN0b3IgYW5kIG5l
ZWRzIHRvIG1vdmUgd2l0aCB0aGF0IGFuY2VzdG9yLCBpLmUuIAotICAgICAgICAvLyBpdCBoYXMg
c3RhdGljIHBvc2l0aW9uLgotICAgICAgICBtYXJrRml4ZWRQb3NpdGlvbk9iamVjdEZvckxheW91
dElmTmVlZGVkKHIpOwotICAgICAgICBpZiAoZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KSB7Ci0g
ICAgICAgICAgICByLmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQorICAgIC8vIEEgZml4ZWQgcG9zaXRpb24gZWxlbWVudCB3aXRoIGFuIGFic29sdXRl
IHBvc2l0aW9uZWQgYW5jZXN0b3IgaGFzIG5vIHdheSBvZiBrbm93aW5nIGlmIHRoZSBsYXR0ZXIg
aGFzIGNoYW5nZWQgcG9zaXRpb24uIFNvCisgICAgLy8gaWYgdGhpcyBpcyBhIGZpeGVkIHBvc2l0
aW9uIGVsZW1lbnQsIG1hcmsgaXQgZm9yIGxheW91dCBpZiBpdCBoYXMgYW4gYWJzcG9zIGFuY2Vz
dG9yIGFuZCBuZWVkcyB0byBtb3ZlIHdpdGggdGhhdCBhbmNlc3RvciwgaS5lLiAKKyAgICAvLyBp
dCBoYXMgc3RhdGljIHBvc2l0aW9uLgorICAgIG1hcmtGaXhlZFBvc2l0aW9uT2JqZWN0Rm9yTGF5
b3V0SWZOZWVkZWQocik7CisgICAgaWYgKGZpeGVkUG9zaXRpb25PYmplY3RzT25seSkgeworICAg
ICAgICByLmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAg
ICAgLy8gV2hlbiBhIG5vbi1wb3NpdGlvbmVkIGJsb2NrIGVsZW1lbnQgbW92ZXMsIGl0IG1heSBo
YXZlIHBvc2l0aW9uZWQgY2hpbGRyZW4gdGhhdCBhcmUgaW1wbGljaXRseSBwb3NpdGlvbmVkIHJl
bGF0aXZlIHRvIHRoZQotICAgICAgICAvLyBub24tcG9zaXRpb25lZCBibG9jay4gIFJhdGhlciB0
aGFuIHRyeWluZyB0byBkZXRlY3QgYWxsIG9mIHRoZXNlIG1vdmVtZW50IGNhc2VzLCB3ZSBqdXN0
IGFsd2F5cyBsYXkgb3V0IHBvc2l0aW9uZWQKLSAgICAgICAgLy8gb2JqZWN0cyB0aGF0IGFyZSBw
b3NpdGlvbmVkIGltcGxpY2l0bHkgbGlrZSB0aGlzLiAgU3VjaCBvYmplY3RzIGFyZSByYXJlLCBh
bmQgc28gaW4gdHlwaWNhbCBESFRNTCBtZW51IHVzYWdlICh3aGVyZSBldmVyeXRoaW5nIGlzCi0g
ICAgICAgIC8vIHBvc2l0aW9uZWQgZXhwbGljaXRseSkgdGhpcyBzaG91bGQgbm90IGluY3VyIGEg
cGVyZm9ybWFuY2UgcGVuYWx0eS4KLSAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgKHIu
c3R5bGUoKS5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9uKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
ICYmIHIucGFyZW50KCkgIT0gdGhpcykpCi0gICAgICAgICAgICByLnNldENoaWxkTmVlZHNMYXlv
dXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBJZiByZWxheW91dENo
aWxkcmVuIGlzIHNldCBhbmQgdGhlIGNoaWxkIGhhcyBwZXJjZW50YWdlIHBhZGRpbmcgb3IgYW4g
ZW1iZWRkZWQgY29udGVudCBib3gsIHdlIGFsc28gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBjaGls
ZHMgcHJlZiB3aWR0aHMuCi0gICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuICYmIHIubmVlZHNQ
cmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkpCi0gICAgICAgICAgICByLnNldFByZWZlcnJl
ZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlLCBNYXJrT25seVRoaXMpOworICAgIC8vIFdoZW4gYSBu
b24tcG9zaXRpb25lZCBibG9jayBlbGVtZW50IG1vdmVzLCBpdCBtYXkgaGF2ZSBwb3NpdGlvbmVk
IGNoaWxkcmVuIHRoYXQgYXJlIGltcGxpY2l0bHkgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGUK
KyAgICAvLyBub24tcG9zaXRpb25lZCBibG9jay4gIFJhdGhlciB0aGFuIHRyeWluZyB0byBkZXRl
Y3QgYWxsIG9mIHRoZXNlIG1vdmVtZW50IGNhc2VzLCB3ZSBqdXN0IGFsd2F5cyBsYXkgb3V0IHBv
c2l0aW9uZWQKKyAgICAvLyBvYmplY3RzIHRoYXQgYXJlIHBvc2l0aW9uZWQgaW1wbGljaXRseSBs
aWtlIHRoaXMuICBTdWNoIG9iamVjdHMgYXJlIHJhcmUsIGFuZCBzbyBpbiB0eXBpY2FsIERIVE1M
IG1lbnUgdXNhZ2UgKHdoZXJlIGV2ZXJ5dGhpbmcgaXMKKyAgICAvLyBwb3NpdGlvbmVkIGV4cGxp
Y2l0bHkpIHRoaXMgc2hvdWxkIG5vdCBpbmN1ciBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisgICAg
aWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgKHIuc3R5bGUoKS5oYXNTdGF0aWNCbG9ja1Bvc2l0aW9u
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICYmIHIucGFyZW50KCkgIT0gdGhpcykpCisgICAg
ICAgIHIuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAKLSAgICAg
ICAgci5tYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0SWZOZWVkZWQoKTsKKyAgICAvLyBJZiByZWxh
eW91dENoaWxkcmVuIGlzIHNldCBhbmQgdGhlIGNoaWxkIGhhcyBwZXJjZW50YWdlIHBhZGRpbmcg
b3IgYW4gZW1iZWRkZWQgY29udGVudCBib3gsIHdlIGFsc28gbmVlZCB0byBpbnZhbGlkYXRlIHRo
ZSBjaGlsZHMgcHJlZiB3aWR0aHMuCisgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gJiYgci5uZWVk
c1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSkKKyAgICAgICAgci5zZXRQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkodHJ1ZSwgTWFya09ubHlUaGlzKTsKKyAgICAKKyAgICByLm1hcmtG
b3JQYWdpbmF0aW9uUmVsYXlvdXRJZk5lZWRlZCgpOworICAgIAorICAgIC8vIFdlIGRvbid0IGhh
dmUgdG8gZG8gYSBmdWxsIGxheW91dC4gIFdlIGp1c3QgaGF2ZSB0byB1cGRhdGUgb3VyIHBvc2l0
aW9uLiBUcnkgdGhhdCBmaXJzdC4gSWYgd2UgaGF2ZSBzaHJpbmstdG8tZml0IHdpZHRoCisgICAg
Ly8gYW5kIHdlIGhpdCB0aGUgYXZhaWxhYmxlIHdpZHRoIGNvbnN0cmFpbnQsIHRoZSBsYXlvdXRJ
Zk5lZWRlZCgpIHdpbGwgY2F0Y2ggaXQgYW5kIGRvIGEgZnVsbCBsYXlvdXQuCisgICAgaWYgKHIu
bmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5KCkgJiYgci50cnlMYXlvdXREb2luZ1Bv
c2l0aW9uZWRNb3ZlbWVudE9ubHkoKSkKKyAgICAgICAgci5jbGVhck5lZWRzTGF5b3V0KCk7CiAg
ICAgICAgIAotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGRvIGEgZnVsbCBsYXlvdXQuICBX
ZSBqdXN0IGhhdmUgdG8gdXBkYXRlIG91ciBwb3NpdGlvbi4gVHJ5IHRoYXQgZmlyc3QuIElmIHdl
IGhhdmUgc2hyaW5rLXRvLWZpdCB3aWR0aAotICAgICAgICAvLyBhbmQgd2UgaGl0IHRoZSBhdmFp
bGFibGUgd2lkdGggY29uc3RyYWludCwgdGhlIGxheW91dElmTmVlZGVkKCkgd2lsbCBjYXRjaCBp
dCBhbmQgZG8gYSBmdWxsIGxheW91dC4KLSAgICAgICAgaWYgKHIubmVlZHNQb3NpdGlvbmVkTW92
ZW1lbnRMYXlvdXRPbmx5KCkgJiYgci50cnlMYXlvdXREb2luZ1Bvc2l0aW9uZWRNb3ZlbWVudE9u
bHkoKSkKLSAgICAgICAgICAgIHIuY2xlYXJOZWVkc0xheW91dCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgIC8vIElmIHdlIGFyZSBwYWdpbmF0ZWQgb3IgaW4gYSBsaW5lIGdyaWQsIGNvbXB1dGUg
YSB2ZXJ0aWNhbCBwb3NpdGlvbiBmb3Igb3VyIG9iamVjdCBub3cuCi0gICAgICAgIC8vIElmIGl0
J3Mgd3Jvbmcgd2UnbGwgbGF5IG91dCBhZ2Fpbi4KLSAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dp
Y2FsVG9wID0gMDsKLSAgICAgICAgYm9vbCBuZWVkc0Jsb2NrRGlyZWN0aW9uTG9jYXRpb25TZXRC
ZWZvcmVMYXlvdXQgPSByLm5lZWRzTGF5b3V0KCkgJiYgdmlldygpLmxheW91dFN0YXRlKCktPm5l
ZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpOwotICAgICAgICBpZiAo
bmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0KSB7Ci0gICAgICAgICAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSByLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCi0gICAgICAgICAgICAgICAgci51cGRhdGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgci51cGRhdGVMb2dpY2FsV2lkdGgoKTsKLSAgICAg
ICAgICAgIG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yQ2hpbGQocik7Ci0gICAgICAgIH0K
KyAgICAvLyBJZiB3ZSBhcmUgcGFnaW5hdGVkIG9yIGluIGEgbGluZSBncmlkLCBjb21wdXRlIGEg
dmVydGljYWwgcG9zaXRpb24gZm9yIG91ciBvYmplY3Qgbm93LgorICAgIC8vIElmIGl0J3Mgd3Jv
bmcgd2UnbGwgbGF5IG91dCBhZ2Fpbi4KKyAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSAw
OworICAgIGJvb2wgbmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0ID0g
ci5uZWVkc0xheW91dCgpICYmIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5uZWVkc0Jsb2NrRGlyZWN0
aW9uTG9jYXRpb25TZXRCZWZvcmVMYXlvdXQoKTsKKyAgICBpZiAobmVlZHNCbG9ja0RpcmVjdGlv
bkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0KSB7CisgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID09IHIuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHIu
dXBkYXRlTG9naWNhbEhlaWdodCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByLnVwZGF0
ZUxvZ2ljYWxXaWR0aCgpOworICAgICAgICBvbGRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckNo
aWxkKHIpOworICAgIH0KIAotICAgICAgICByLmxheW91dElmTmVlZGVkKCk7CisgICAgci5sYXlv
dXRJZk5lZWRlZCgpOwogCi0gICAgICAgIC8vIExheSBvdXQgYWdhaW4gaWYgb3VyIGVzdGltYXRl
IHdhcyB3cm9uZy4KLSAgICAgICAgaWYgKG5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJl
Zm9yZUxheW91dCAmJiBsb2dpY2FsVG9wRm9yQ2hpbGQocikgIT0gb2xkTG9naWNhbFRvcCkgewot
ICAgICAgICAgICAgci5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAg
ICAgICByLmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIH0KKyAgICAvLyBMYXkgb3V0IGFnYWlu
IGlmIG91ciBlc3RpbWF0ZSB3YXMgd3JvbmcuCisgICAgaWYgKG5lZWRzQmxvY2tEaXJlY3Rpb25M
b2NhdGlvblNldEJlZm9yZUxheW91dCAmJiBsb2dpY2FsVG9wRm9yQ2hpbGQocikgIT0gb2xkTG9n
aWNhbFRvcCkgeworICAgICAgICByLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsK
KyAgICAgICAgci5sYXlvdXRJZk5lZWRlZCgpOworICAgIH0KIAotICAgICAgICBpZiAodXBkYXRl
UmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChyKSkgewotICAgICAgICAgICAgci5zZXROZWVkc0xheW91
dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgci5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAg
ICB9CisgICAgaWYgKHVwZGF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQocikpIHsKKyAgICAgICAg
ci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICByLmxheW91dElmTmVlZGVk
KCk7CiAgICAgfQogfQogCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0
cyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGJvb2wgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KQor
eworICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMg
PSBwb3NpdGlvbmVkT2JqZWN0cygpOworICAgIGlmICghcG9zaXRpb25lZERlc2NlbmRhbnRzKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRG8gbm90IGNhY2hlIHBvc2l0aW9uZWREZXNj
ZW5kYW50cy0+ZW5kKCkgaW4gYSBsb2NhbCB2YXJpYWJsZSwgc2luY2UgfHBvc2l0aW9uZWREZXNj
ZW5kYW50c3wgY2FuIGJlIG11dGF0ZWQKKyAgICAvLyBhcyBpdCBpcyB3YWxrZWQuIFdlIGFsd2F5
cyBuZWVkIHRvIGZldGNoIHRoZSBuZXcgZW5kKCkgdmFsdWUgZHluYW1pY2FsbHkuCisgICAgZm9y
IChhdXRvIGl0ID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5iZWdpbigpOyBpdCAhPSBwb3NpdGlv
bmVkRGVzY2VuZGFudHMtPmVuZCgpOyArK2l0KQorICAgICAgICBsYXlvdXRQb3NpdGlvbmVkT2Jq
ZWN0KCoqaXQsIHJlbGF5b3V0Q2hpbGRyZW4sIGZpeGVkUG9zaXRpb25PYmplY3RzT25seSk7Cit9
CisKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtQb3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCgpCiB7
CiAgICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWREZXNjZW5kYW50cyA9
IHBvc2l0aW9uZWRPYmplY3RzKCk7CkBAIC0yMDg2LDcgKzIwOTAsNyBAQCBSZW5kZXJCbG9jayog
UmVuZGVyQmxvY2s6OmJsb2NrQmVmb3JlV2l0CiAgICAgcmV0dXJuIGJlZm9yZUJsb2NrOwogfQog
Ci12b2lkIFJlbmRlckJsb2NrOjppbnNlcnRJbnRvVHJhY2tlZFJlbmRlcmVyTWFwcyhSZW5kZXJC
b3gmIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcComIGRlc2NlbmRhbnRzTWFwLCBU
cmFja2VkQ29udGFpbmVyTWFwKiYgY29udGFpbmVyTWFwKQordm9pZCBSZW5kZXJCbG9jazo6aW5z
ZXJ0SW50b1RyYWNrZWRSZW5kZXJlck1hcHMoUmVuZGVyQm94JiBkZXNjZW5kYW50LCBUcmFja2Vk
RGVzY2VuZGFudHNNYXAqJiBkZXNjZW5kYW50c01hcCwgVHJhY2tlZENvbnRhaW5lck1hcComIGNv
bnRhaW5lck1hcCwgYm9vbCBmb3JjZU5ld0VudHJ5KQogewogICAgIGlmICghZGVzY2VuZGFudHNN
YXApIHsKICAgICAgICAgZGVzY2VuZGFudHNNYXAgPSBuZXcgVHJhY2tlZERlc2NlbmRhbnRzTWFw
OwpAQCAtMjA5OCw2ICsyMTAyLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEludG9UcmFj
a2VkUmVuZGUKICAgICAgICAgZGVzY2VuZGFudFNldCA9IG5ldyBUcmFja2VkUmVuZGVyZXJMaXN0
SGFzaFNldDsKICAgICAgICAgZGVzY2VuZGFudHNNYXAtPnNldCh0aGlzLCBzdGQ6OnVuaXF1ZV9w
dHI8VHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ+KGRlc2NlbmRhbnRTZXQpKTsKICAgICB9Cisg
ICAgCisgICAgaWYgKGZvcmNlTmV3RW50cnkpIHsKKyAgICAgICAgZGVzY2VuZGFudFNldC0+cmVt
b3ZlKCZkZXNjZW5kYW50KTsKKyAgICAgICAgY29udGFpbmVyTWFwLT5yZW1vdmUoJmRlc2NlbmRh
bnQpOworICAgIH0KKyAgICAKICAgICBib29sIGFkZGVkID0gZGVzY2VuZGFudFNldC0+YWRkKCZk
ZXNjZW5kYW50KS5pc05ld0VudHJ5OwogICAgIGlmICghYWRkZWQpIHsKICAgICAgICAgQVNTRVJU
KGNvbnRhaW5lck1hcC0+Z2V0KCZkZXNjZW5kYW50KSk7CkBAIC0yMTA5LDcgKzIxMTksNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjppbnNlcnRJbnRvVHJhY2tlZFJlbmRlCiAgICAgaWYgKCFjb250YWlu
ZXJTZXQpIHsKICAgICAgICAgY29udGFpbmVyU2V0ID0gbmV3IEhhc2hTZXQ8UmVuZGVyQmxvY2sq
PjsKICAgICAgICAgY29udGFpbmVyTWFwLT5zZXQoJmRlc2NlbmRhbnQsIHN0ZDo6dW5pcXVlX3B0
cjxIYXNoU2V0PFJlbmRlckJsb2NrKj4+KGNvbnRhaW5lclNldCkpOwotICAgIH0KKyAgICB9ICAg
IAogICAgIEFTU0VSVCghY29udGFpbmVyU2V0LT5jb250YWlucyh0aGlzKSk7CiAgICAgY29udGFp
bmVyU2V0LT5hZGQodGhpcyk7CiB9CkBAIC0yMTU3LDcgKzIxNjcsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjppbnNlcnRQb3NpdGlvbmVkT2JqZWN0CiAgICAgaWYgKG8uaXNSZW5kZXJGbG93VGhyZWFk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbnNlcnRJbnRvVHJhY2tlZFJlbmRlcmVy
TWFwcyhvLCBnUG9zaXRpb25lZERlc2NlbmRhbnRzTWFwLCBnUG9zaXRpb25lZENvbnRhaW5lck1h
cCk7CisgICAgaW5zZXJ0SW50b1RyYWNrZWRSZW5kZXJlck1hcHMobywgZ1Bvc2l0aW9uZWREZXNj
ZW5kYW50c01hcCwgZ1Bvc2l0aW9uZWRDb250YWluZXJNYXAsIGlzUmVuZGVyVmlldygpKTsKIH0K
IAogdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmIG8p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTg3
MTA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxMyw2ICszMTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIGJvb2wgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5ID0gZmFsc2Up
OworICAgIHZvaWQgbGF5b3V0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmLCBib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIGJvb2wgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KTsKKyAgICAKICAgICB2
b2lkIG1hcmtGaXhlZFBvc2l0aW9uT2JqZWN0Rm9yTGF5b3V0SWZOZWVkZWQoUmVuZGVyT2JqZWN0
JiBjaGlsZCk7CiAKICAgICBMYXlvdXRVbml0IG1hcmdpbkludHJpbnNpY0xvZ2ljYWxXaWR0aEZv
ckNoaWxkKFJlbmRlckJveCYpIGNvbnN0OwpAQCAtNDE1LDcgKzQxNyw3IEBAIHByaXZhdGU6CiAg
ICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxs
ZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCBib29sIGhhc0xp
bmVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgaW5zZXJ0SW50b1RyYWNr
ZWRSZW5kZXJlck1hcHMoUmVuZGVyQm94JiBkZXNjZW5kYW50LCBUcmFja2VkRGVzY2VuZGFudHNN
YXAqJiwgVHJhY2tlZENvbnRhaW5lck1hcComKTsKKyAgICB2b2lkIGluc2VydEludG9UcmFja2Vk
UmVuZGVyZXJNYXBzKFJlbmRlckJveCYgZGVzY2VuZGFudCwgVHJhY2tlZERlc2NlbmRhbnRzTWFw
KiYsIFRyYWNrZWRDb250YWluZXJNYXAqJiwgYm9vbCBmb3JjZU5ld0VudHJ5ID0gZmFsc2UpOwog
ICAgIHN0YXRpYyB2b2lkIHJlbW92ZUZyb21UcmFja2VkUmVuZGVyZXJNYXBzKFJlbmRlckJveCYg
ZGVzY2VuZGFudCwgVHJhY2tlZERlc2NlbmRhbnRzTWFwKiYsIFRyYWNrZWRDb250YWluZXJNYXAq
Jik7CiAKICAgICB2b2lkIGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmVuZGVyRWxlbWVudCog
Zmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyVGV4dCogY3VycmVudFRleHRDaGlsZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257588</attachid>
            <date>2015-07-27 13:57:06 -0700</date>
            <delta_ts>2015-07-27 13:58:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14267</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE1LTA3LTI3ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiAhY3Vy
ckJveC0+bmVlZHNMYXlvdXQoKSBsb2FkaW5nIGJpbmcgbWFwcyAoYW5kIGFwcGxlLmNvbS9tdXNp
YyBhbmQgbnl0aW1lcykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTkzODkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgbmV3IHRlc3RzIGluIGZhc3QvZHluYW1pYy4KKworICAgICAgICBDaGFuZ2Ug
dHJhY2tpbmcgb2YgcG9zaXRpb25lZCBvYmplY3RzIHRvIGFsd2F5cyBpbnNlcnQgb2JqZWN0cyB0
aGF0IG5lZWQgYSBsYXlvdXQgaW4gdGhlCisgICAgICAgIGVuZCBvZiB0aGUgTGlzdEhhc2hNYXAg
Zm9yIFJlbmRlclZpZXdzLiBUaGlzIGVuc3VyZXMgdGhhdCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBu
ZXN0ZWQKKyAgICAgICAgcG9zaXRpb25lZCBvYmplY3RzIHRoYXQgYm90aCBuZWVkIGEgbGF5b3V0
IGJ5IHRoZSBSZW5kZXJWaWV3IGFyZSByZXNvbHZlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKwor
ICAgICAgICBEb24ndCBjYWNoZSB0aGUgZW5kIG9iamVjdCB3aGVuIHdhbGtpbmcgdGhlIExpc3RI
YXNoTWFwIHRvIGRvIGxheW91dHMgb2YgcG9zaXRpb25lZCBvYmplY3RzLAorICAgICAgICBzaW5j
ZSB0aGF0IGxpc3QgaXMgZ2V0dGluZyB1cGRhdGVkIGR5bmFtaWNhbGx5IGFzIGVhcmxpZXIgb2Jq
ZWN0cyBjYW4gbWFyayBhbmQgaW5zZXJ0IG5ldworICAgICAgICBvYmplY3RzIGludG8gdGhlIGxp
c3QgZHVyaW5nIHRoZWlyIGxheW91dHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRP
YmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRJbnRvVHJhY2tl
ZFJlbmRlcmVyTWFwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0UG9z
aXRpb25lZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlUG9z
aXRpb25lZE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisKIDIw
MTUtMDctMjcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgRW5oYW5jZSBBbmltYXRpb24gbG9nZ2luZyBzbGlnaHRseQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxODcxMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjkz
LDcxICsxMjkzLDc1IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Om1hcmdpbkludHJpbnNpY0wK
ICAgICByZXR1cm4gbWFyZ2luOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlv
bmVkT2JqZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGJvb2wgZml4ZWRQb3NpdGlvbk9iamVj
dHNPbmx5KQordm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdChSZW5kZXJC
b3gmIHIsIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBmaXhlZFBvc2l0aW9uT2JqZWN0c09u
bHkpCiB7Ci0gICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWREZXNjZW5k
YW50cyA9IHBvc2l0aW9uZWRPYmplY3RzKCk7Ci0gICAgaWYgKCFwb3NpdGlvbmVkRGVzY2VuZGFu
dHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byBpdCA9IHBvc2l0aW9uZWREZXNj
ZW5kYW50cy0+YmVnaW4oKSwgZW5kID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlbmRlckJveCYgciA9ICoqaXQ7Ci0gICAgICAgIAot
ICAgICAgICBlc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQocik7CisgICAgZXN0aW1hdGVS
ZWdpb25SYW5nZUZvckJveENoaWxkKHIpOwogCi0gICAgICAgIC8vIEEgZml4ZWQgcG9zaXRpb24g
ZWxlbWVudCB3aXRoIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgYW5jZXN0b3IgaGFzIG5vIHdheSBv
ZiBrbm93aW5nIGlmIHRoZSBsYXR0ZXIgaGFzIGNoYW5nZWQgcG9zaXRpb24uIFNvCi0gICAgICAg
IC8vIGlmIHRoaXMgaXMgYSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50LCBtYXJrIGl0IGZvciBsYXlv
dXQgaWYgaXQgaGFzIGFuIGFic3BvcyBhbmNlc3RvciBhbmQgbmVlZHMgdG8gbW92ZSB3aXRoIHRo
YXQgYW5jZXN0b3IsIGkuZS4gCi0gICAgICAgIC8vIGl0IGhhcyBzdGF0aWMgcG9zaXRpb24uCi0g
ICAgICAgIG1hcmtGaXhlZFBvc2l0aW9uT2JqZWN0Rm9yTGF5b3V0SWZOZWVkZWQocik7Ci0gICAg
ICAgIGlmIChmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpIHsKLSAgICAgICAgICAgIHIubGF5b3V0
SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgLy8gQSBm
aXhlZCBwb3NpdGlvbiBlbGVtZW50IHdpdGggYW4gYWJzb2x1dGUgcG9zaXRpb25lZCBhbmNlc3Rv
ciBoYXMgbm8gd2F5IG9mIGtub3dpbmcgaWYgdGhlIGxhdHRlciBoYXMgY2hhbmdlZCBwb3NpdGlv
bi4gU28KKyAgICAvLyBpZiB0aGlzIGlzIGEgZml4ZWQgcG9zaXRpb24gZWxlbWVudCwgbWFyayBp
dCBmb3IgbGF5b3V0IGlmIGl0IGhhcyBhbiBhYnNwb3MgYW5jZXN0b3IgYW5kIG5lZWRzIHRvIG1v
dmUgd2l0aCB0aGF0IGFuY2VzdG9yLCBpLmUuIAorICAgIC8vIGl0IGhhcyBzdGF0aWMgcG9zaXRp
b24uCisgICAgbWFya0ZpeGVkUG9zaXRpb25PYmplY3RGb3JMYXlvdXRJZk5lZWRlZChyKTsKKyAg
ICBpZiAoZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KSB7CisgICAgICAgIHIubGF5b3V0SWZOZWVk
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICAvLyBXaGVuIGEgbm9uLXBv
c2l0aW9uZWQgYmxvY2sgZWxlbWVudCBtb3ZlcywgaXQgbWF5IGhhdmUgcG9zaXRpb25lZCBjaGls
ZHJlbiB0aGF0IGFyZSBpbXBsaWNpdGx5IHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gdGhlCi0gICAg
ICAgIC8vIG5vbi1wb3NpdGlvbmVkIGJsb2NrLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGRldGVj
dCBhbGwgb2YgdGhlc2UgbW92ZW1lbnQgY2FzZXMsIHdlIGp1c3QgYWx3YXlzIGxheSBvdXQgcG9z
aXRpb25lZAotICAgICAgICAvLyBvYmplY3RzIHRoYXQgYXJlIHBvc2l0aW9uZWQgaW1wbGljaXRs
eSBsaWtlIHRoaXMuICBTdWNoIG9iamVjdHMgYXJlIHJhcmUsIGFuZCBzbyBpbiB0eXBpY2FsIERI
VE1MIG1lbnUgdXNhZ2UgKHdoZXJlIGV2ZXJ5dGhpbmcgaXMKLSAgICAgICAgLy8gcG9zaXRpb25l
ZCBleHBsaWNpdGx5KSB0aGlzIHNob3VsZCBub3QgaW5jdXIgYSBwZXJmb3JtYW5jZSBwZW5hbHR5
LgotICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCAoci5zdHlsZSgpLmhhc1N0YXRpY0Js
b2NrUG9zaXRpb24oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgJiYgci5wYXJlbnQoKSAhPSB0
aGlzKSkKLSAgICAgICAgICAgIHIuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwot
ICAgICAgICAgICAgCi0gICAgICAgIC8vIElmIHJlbGF5b3V0Q2hpbGRyZW4gaXMgc2V0IGFuZCB0
aGUgY2hpbGQgaGFzIHBlcmNlbnRhZ2UgcGFkZGluZyBvciBhbiBlbWJlZGRlZCBjb250ZW50IGJv
eCwgd2UgYWxzbyBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNoaWxkcyBwcmVmIHdpZHRocy4KLSAg
ICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gJiYgci5uZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2Fs
Y3VsYXRpb24oKSkKLSAgICAgICAgICAgIHIuc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KHRydWUsIE1hcmtPbmx5VGhpcyk7CisgICAgLy8gV2hlbiBhIG5vbi1wb3NpdGlvbmVkIGJsb2Nr
IGVsZW1lbnQgbW92ZXMsIGl0IG1heSBoYXZlIHBvc2l0aW9uZWQgY2hpbGRyZW4gdGhhdCBhcmUg
aW1wbGljaXRseSBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvIHRoZQorICAgIC8vIG5vbi1wb3NpdGlv
bmVkIGJsb2NrLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGRldGVjdCBhbGwgb2YgdGhlc2UgbW92
ZW1lbnQgY2FzZXMsIHdlIGp1c3QgYWx3YXlzIGxheSBvdXQgcG9zaXRpb25lZAorICAgIC8vIG9i
amVjdHMgdGhhdCBhcmUgcG9zaXRpb25lZCBpbXBsaWNpdGx5IGxpa2UgdGhpcy4gIFN1Y2ggb2Jq
ZWN0cyBhcmUgcmFyZSwgYW5kIHNvIGluIHR5cGljYWwgREhUTUwgbWVudSB1c2FnZSAod2hlcmUg
ZXZlcnl0aGluZyBpcworICAgIC8vIHBvc2l0aW9uZWQgZXhwbGljaXRseSkgdGhpcyBzaG91bGQg
bm90IGluY3VyIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKyAgICBpZiAocmVsYXlvdXRDaGlsZHJl
biB8fCAoci5zdHlsZSgpLmhhc1N0YXRpY0Jsb2NrUG9zaXRpb24oaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgJiYgci5wYXJlbnQoKSAhPSB0aGlzKSkKKyAgICAgICAgci5zZXRDaGlsZE5lZWRz
TGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIAotICAgICAgICByLm1hcmtGb3JQYWdpbmF0
aW9uUmVsYXlvdXRJZk5lZWRlZCgpOworICAgIC8vIElmIHJlbGF5b3V0Q2hpbGRyZW4gaXMgc2V0
IGFuZCB0aGUgY2hpbGQgaGFzIHBlcmNlbnRhZ2UgcGFkZGluZyBvciBhbiBlbWJlZGRlZCBjb250
ZW50IGJveCwgd2UgYWxzbyBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNoaWxkcyBwcmVmIHdpZHRo
cy4KKyAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiAmJiByLm5lZWRzUHJlZmVycmVkV2lkdGhzUmVj
YWxjdWxhdGlvbigpKQorICAgICAgICByLnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0
cnVlLCBNYXJrT25seVRoaXMpOworICAgIAorICAgIHIubWFya0ZvclBhZ2luYXRpb25SZWxheW91
dElmTmVlZGVkKCk7CisgICAgCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhIGZ1bGwgbGF5
b3V0LiAgV2UganVzdCBoYXZlIHRvIHVwZGF0ZSBvdXIgcG9zaXRpb24uIFRyeSB0aGF0IGZpcnN0
LiBJZiB3ZSBoYXZlIHNocmluay10by1maXQgd2lkdGgKKyAgICAvLyBhbmQgd2UgaGl0IHRoZSBh
dmFpbGFibGUgd2lkdGggY29uc3RyYWludCwgdGhlIGxheW91dElmTmVlZGVkKCkgd2lsbCBjYXRj
aCBpdCBhbmQgZG8gYSBmdWxsIGxheW91dC4KKyAgICBpZiAoci5uZWVkc1Bvc2l0aW9uZWRNb3Zl
bWVudExheW91dE9ubHkoKSAmJiByLnRyeUxheW91dERvaW5nUG9zaXRpb25lZE1vdmVtZW50T25s
eSgpKQorICAgICAgICByLmNsZWFyTmVlZHNMYXlvdXQoKTsKICAgICAgICAgCi0gICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gZG8gYSBmdWxsIGxheW91dC4gIFdlIGp1c3QgaGF2ZSB0byB1cGRh
dGUgb3VyIHBvc2l0aW9uLiBUcnkgdGhhdCBmaXJzdC4gSWYgd2UgaGF2ZSBzaHJpbmstdG8tZml0
IHdpZHRoCi0gICAgICAgIC8vIGFuZCB3ZSBoaXQgdGhlIGF2YWlsYWJsZSB3aWR0aCBjb25zdHJh
aW50LCB0aGUgbGF5b3V0SWZOZWVkZWQoKSB3aWxsIGNhdGNoIGl0IGFuZCBkbyBhIGZ1bGwgbGF5
b3V0LgotICAgICAgICBpZiAoci5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dE9ubHkoKSAm
JiByLnRyeUxheW91dERvaW5nUG9zaXRpb25lZE1vdmVtZW50T25seSgpKQotICAgICAgICAgICAg
ci5jbGVhck5lZWRzTGF5b3V0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UgYXJl
IHBhZ2luYXRlZCBvciBpbiBhIGxpbmUgZ3JpZCwgY29tcHV0ZSBhIHZlcnRpY2FsIHBvc2l0aW9u
IGZvciBvdXIgb2JqZWN0IG5vdy4KLSAgICAgICAgLy8gSWYgaXQncyB3cm9uZyB3ZSdsbCBsYXkg
b3V0IGFnYWluLgotICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSAwOwotICAgICAg
ICBib29sIG5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCA9IHIubmVl
ZHNMYXlvdXQoKSAmJiB2aWV3KCkubGF5b3V0U3RhdGUoKS0+bmVlZHNCbG9ja0RpcmVjdGlvbkxv
Y2F0aW9uU2V0QmVmb3JlTGF5b3V0KCk7Ci0gICAgICAgIGlmIChuZWVkc0Jsb2NrRGlyZWN0aW9u
TG9jYXRpb25TZXRCZWZvcmVMYXlvdXQpIHsKLSAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID09IHIuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAg
ICAgICByLnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICByLnVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgb2xkTG9naWNhbFRv
cCA9IGxvZ2ljYWxUb3BGb3JDaGlsZChyKTsKLSAgICAgICAgfQorICAgIC8vIElmIHdlIGFyZSBw
YWdpbmF0ZWQgb3IgaW4gYSBsaW5lIGdyaWQsIGNvbXB1dGUgYSB2ZXJ0aWNhbCBwb3NpdGlvbiBm
b3Igb3VyIG9iamVjdCBub3cuCisgICAgLy8gSWYgaXQncyB3cm9uZyB3ZSdsbCBsYXkgb3V0IGFn
YWluLgorICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IDA7CisgICAgYm9vbCBuZWVkc0Js
b2NrRGlyZWN0aW9uTG9jYXRpb25TZXRCZWZvcmVMYXlvdXQgPSByLm5lZWRzTGF5b3V0KCkgJiYg
dmlldygpLmxheW91dFN0YXRlKCktPm5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9y
ZUxheW91dCgpOworICAgIGlmIChuZWVkc0Jsb2NrRGlyZWN0aW9uTG9jYXRpb25TZXRCZWZvcmVM
YXlvdXQpIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gci5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgci51cGRhdGVMb2dpY2FsSGVpZ2h0
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHIudXBkYXRlTG9naWNhbFdpZHRoKCk7Cisg
ICAgICAgIG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yQ2hpbGQocik7CisgICAgfQogCi0g
ICAgICAgIHIubGF5b3V0SWZOZWVkZWQoKTsKKyAgICByLmxheW91dElmTmVlZGVkKCk7CiAKLSAg
ICAgICAgLy8gTGF5IG91dCBhZ2FpbiBpZiBvdXIgZXN0aW1hdGUgd2FzIHdyb25nLgotICAgICAg
ICBpZiAobmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0ICYmIGxvZ2lj
YWxUb3BGb3JDaGlsZChyKSAhPSBvbGRMb2dpY2FsVG9wKSB7Ci0gICAgICAgICAgICByLnNldENo
aWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIHIubGF5b3V0SWZOZWVk
ZWQoKTsKLSAgICAgICAgfQorICAgIC8vIExheSBvdXQgYWdhaW4gaWYgb3VyIGVzdGltYXRlIHdh
cyB3cm9uZy4KKyAgICBpZiAobmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5
b3V0ICYmIGxvZ2ljYWxUb3BGb3JDaGlsZChyKSAhPSBvbGRMb2dpY2FsVG9wKSB7CisgICAgICAg
IHIuc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICByLmxheW91dElm
TmVlZGVkKCk7CisgICAgfQogCi0gICAgICAgIGlmICh1cGRhdGVSZWdpb25SYW5nZUZvckJveENo
aWxkKHIpKSB7Ci0gICAgICAgICAgICByLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0g
ICAgICAgICAgICByLmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIH0KKyAgICBpZiAodXBkYXRl
UmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChyKSkgeworICAgICAgICByLnNldE5lZWRzTGF5b3V0KE1h
cmtPbmx5VGhpcyk7CisgICAgICAgIHIubGF5b3V0SWZOZWVkZWQoKTsKICAgICB9CiB9CiAKK3Zv
aWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgYm9vbCBmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpCit7CisgICAgVHJhY2tlZFJlbmRl
cmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWREZXNjZW5kYW50cyA9IHBvc2l0aW9uZWRPYmplY3Rz
KCk7CisgICAgaWYgKCFwb3NpdGlvbmVkRGVzY2VuZGFudHMpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBEbyBub3QgY2FjaGUgcG9zaXRpb25lZERlc2NlbmRhbnRzLT5lbmQoKSBpbiBh
IGxvY2FsIHZhcmlhYmxlLCBzaW5jZSB8cG9zaXRpb25lZERlc2NlbmRhbnRzfCBjYW4gYmUgbXV0
YXRlZAorICAgIC8vIGFzIGl0IGlzIHdhbGtlZC4gV2UgYWx3YXlzIG5lZWQgdG8gZmV0Y2ggdGhl
IG5ldyBlbmQoKSB2YWx1ZSBkeW5hbWljYWxseS4KKyAgICBmb3IgKGF1dG8gaXQgPSBwb3NpdGlv
bmVkRGVzY2VuZGFudHMtPmJlZ2luKCk7IGl0ICE9IHBvc2l0aW9uZWREZXNjZW5kYW50cy0+ZW5k
KCk7ICsraXQpCisgICAgICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3QoKippdCwgcmVsYXlvdXRD
aGlsZHJlbiwgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KTsKK30KKwogdm9pZCBSZW5kZXJCbG9j
azo6bWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCkKIHsKICAgICBUcmFja2VkUmVuZGVy
ZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRpb25lZE9iamVjdHMo
KTsKQEAgLTIwODYsNyArMjA5MCw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6YmxvY2tC
ZWZvcmVXaXQKICAgICByZXR1cm4gYmVmb3JlQmxvY2s7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6
Omluc2VydEludG9UcmFja2VkUmVuZGVyZXJNYXBzKFJlbmRlckJveCYgZGVzY2VuZGFudCwgVHJh
Y2tlZERlc2NlbmRhbnRzTWFwKiYgZGVzY2VuZGFudHNNYXAsIFRyYWNrZWRDb250YWluZXJNYXAq
JiBjb250YWluZXJNYXApCit2b2lkIFJlbmRlckJsb2NrOjppbnNlcnRJbnRvVHJhY2tlZFJlbmRl
cmVyTWFwcyhSZW5kZXJCb3gmIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcComIGRl
c2NlbmRhbnRzTWFwLCBUcmFja2VkQ29udGFpbmVyTWFwKiYgY29udGFpbmVyTWFwLCBib29sIGZv
cmNlTmV3RW50cnkpCiB7CiAgICAgaWYgKCFkZXNjZW5kYW50c01hcCkgewogICAgICAgICBkZXNj
ZW5kYW50c01hcCA9IG5ldyBUcmFja2VkRGVzY2VuZGFudHNNYXA7CkBAIC0yMDk4LDYgKzIxMDIs
MTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0SW50b1RyYWNrZWRSZW5kZQogICAgICAgICBk
ZXNjZW5kYW50U2V0ID0gbmV3IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0OwogICAgICAgICBk
ZXNjZW5kYW50c01hcC0+c2V0KHRoaXMsIHN0ZDo6dW5pcXVlX3B0cjxUcmFja2VkUmVuZGVyZXJM
aXN0SGFzaFNldD4oZGVzY2VuZGFudFNldCkpOwogICAgIH0KKyAgICAKKyAgICBpZiAoZm9yY2VO
ZXdFbnRyeSkgeworICAgICAgICBkZXNjZW5kYW50U2V0LT5yZW1vdmUoJmRlc2NlbmRhbnQpOwor
ICAgICAgICBjb250YWluZXJNYXAtPnJlbW92ZSgmZGVzY2VuZGFudCk7CisgICAgfQorICAgIAog
ICAgIGJvb2wgYWRkZWQgPSBkZXNjZW5kYW50U2V0LT5hZGQoJmRlc2NlbmRhbnQpLmlzTmV3RW50
cnk7CiAgICAgaWYgKCFhZGRlZCkgewogICAgICAgICBBU1NFUlQoY29udGFpbmVyTWFwLT5nZXQo
JmRlc2NlbmRhbnQpKTsKQEAgLTIxMDksNyArMjExOSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omlu
c2VydEludG9UcmFja2VkUmVuZGUKICAgICBpZiAoIWNvbnRhaW5lclNldCkgewogICAgICAgICBj
b250YWluZXJTZXQgPSBuZXcgSGFzaFNldDxSZW5kZXJCbG9jayo+OwogICAgICAgICBjb250YWlu
ZXJNYXAtPnNldCgmZGVzY2VuZGFudCwgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8UmVuZGVyQmxv
Y2sqPj4oY29udGFpbmVyU2V0KSk7Ci0gICAgfQorICAgIH0gICAgCiAgICAgQVNTRVJUKCFjb250
YWluZXJTZXQtPmNvbnRhaW5zKHRoaXMpKTsKICAgICBjb250YWluZXJTZXQtPmFkZCh0aGlzKTsK
IH0KQEAgLTIxNTcsNyArMjE2Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydFBvc2l0aW9u
ZWRPYmplY3QKICAgICBpZiAoby5pc1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGluc2VydEludG9UcmFja2VkUmVuZGVyZXJNYXBzKG8sIGdQb3NpdGlvbmVk
RGVzY2VuZGFudHNNYXAsIGdQb3NpdGlvbmVkQ29udGFpbmVyTWFwKTsKKyAgICBpbnNlcnRJbnRv
VHJhY2tlZFJlbmRlcmVyTWFwcyhvLCBnUG9zaXRpb25lZERlc2NlbmRhbnRzTWFwLCBnUG9zaXRp
b25lZENvbnRhaW5lck1hcCwgaXNSZW5kZXJWaWV3KCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYgbykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxODcxMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDYgKzMx
Myw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
Ym9vbCBmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkgPSBmYWxzZSk7CisgICAgdm9pZCBsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYsIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBm
aXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpOworICAgIAogICAgIHZvaWQgbWFya0ZpeGVkUG9zaXRp
b25PYmplY3RGb3JMYXlvdXRJZk5lZWRlZChSZW5kZXJPYmplY3QmIGNoaWxkKTsKIAogICAgIExh
eW91dFVuaXQgbWFyZ2luSW50cmluc2ljTG9naWNhbFdpZHRoRm9yQ2hpbGQoUmVuZGVyQm94Jikg
Y29uc3Q7CkBAIC00MTUsNyArNDE3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRS1CTE9DS0ZM
T1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBS
ZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGluZXMoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgdm9pZCBpbnNlcnRJbnRvVHJhY2tlZFJlbmRlcmVyTWFwcyhSZW5k
ZXJCb3gmIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcComLCBUcmFja2VkQ29udGFp
bmVyTWFwKiYpOworICAgIHZvaWQgaW5zZXJ0SW50b1RyYWNrZWRSZW5kZXJlck1hcHMoUmVuZGVy
Qm94JiBkZXNjZW5kYW50LCBUcmFja2VkRGVzY2VuZGFudHNNYXAqJiwgVHJhY2tlZENvbnRhaW5l
ck1hcComLCBib29sIGZvcmNlTmV3RW50cnkgPSBmYWxzZSk7CiAgICAgc3RhdGljIHZvaWQgcmVt
b3ZlRnJvbVRyYWNrZWRSZW5kZXJlck1hcHMoUmVuZGVyQm94JiBkZXNjZW5kYW50LCBUcmFja2Vk
RGVzY2VuZGFudHNNYXAqJiwgVHJhY2tlZENvbnRhaW5lck1hcComKTsKIAogICAgIHZvaWQgY3Jl
YXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBS
ZW5kZXJUZXh0KiBjdXJyZW50VGV4dENoaWxkKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzQ0NykK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDE1LTA3LTI3ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBB
U1NFUlRJT04gRkFJTEVEOiAhY3VyckJveC0+bmVlZHNMYXlvdXQoKSBsb2FkaW5nIGJpbmcgbWFw
cyAoYW5kIGFwcGxlLmNvbS9tdXNpYyBhbmQgbnl0aW1lcykKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzODkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2R5bmFtaWMvcG9zaXRpb24tZml4ZWQt
dG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9keW5hbWljL3Bvc2l0aW9uLWZpeGVkLXRvLWFic29sdXRlLXdp
dGgtcG9zaXRpb25lZC1jaGlsZC1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAxNS0wNy0yNyAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBUZXN0IHJlc3VsdCBn
YXJkZW5pbmcgZm9yIEVsIENhcGl0YW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2R5bmFtaWMv
cG9zaXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2R5bmFtaWMvcG9zaXRp
b24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZHluYW1pYy9wb3NpdGlvbi1m
aXhlZC10by1hYnNvbHV0ZS13aXRoLXBvc2l0aW9uZWQtY2hpbGQtY3Jhc2gtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorVGhpcyB0ZXN0cyB0aGF0IGNoYW5naW5n
IHRoZSBjb250YWluZXIncyBwb3NpdGlvbiBmcm9tIGZpeGVkIHRvIGFic29sdXRlIGlzIHNhZmUs
IHdoZW4gY2hpbGQgY29udGFpbmVyIHdpdGggZml4ZWQgcG9zaXRpb24gaXMgcHJlc2VudC4KK1BB
U1MsIGlmIG5vIGNyYXNoIG9yIGFzc2VydCBpbiBkZWJ1Zy4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZHluYW1pYy9wb3NpdGlvbi1maXhlZC10by1hYnNvbHV0ZS13aXRoLXBvc2l0aW9uZWQtY2hp
bGQtY3Jhc2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2R5bmFtaWMvcG9z
aXRpb24tZml4ZWQtdG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2R5bmFtaWMvcG9zaXRpb24tZml4ZWQt
dG8tYWJzb2x1dGUtd2l0aC1wb3NpdGlvbmVkLWNoaWxkLWNyYXNoLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMyBAQAor77u/PGh0bWw+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0b2Fi
c29sdXRlIiBzdHlsZT0icG9zaXRpb246IGZpeGVkOyI+CisgICAgICAgIDxkaXYgc3R5bGU9InBv
c2l0aW9uOiBmaXhlZDsiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxwIGlkPSJmb28iPgorICAg
ICAgICBUaGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgdGhlIGNvbnRhaW5lcidzIHBvc2l0aW9uIGZy
b20gZml4ZWQgdG8gYWJzb2x1dGUgaXMgc2FmZSwgd2hlbgorICAgICAgICBjaGlsZCBjb250YWlu
ZXIgd2l0aCBmaXhlZCBwb3NpdGlvbiBpcyBwcmVzZW50Ljxicj4KKyAgICAgICAgUEFTUywgaWYg
bm8gY3Jhc2ggb3IgYXNzZXJ0IGluIGRlYnVnLgorICAgIDwvcD4KKyAgICA8c2NyaXB0PgorICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgIHZhciBtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIp
OworICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9hYnNvbHV0ZSIp
OworICAgICAgICAgCisgICAgICAgICBjLm9mZnNldEhlaWdodDsKKyAgICAgICAgIGMuc3R5bGUu
cG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgICAgICAgYy5zdHlsZS53aWR0aCA9IG0ub2Zmc2V0
V2lkdGggKyAicHgiOworICAgICAgICAgYy5vZmZzZXRIZWlnaHQ7CisgICAgIDwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="282749"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>