<?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>84920</bug_id>
          
          <creation_ts>2012-04-25 18:18:25 -0700</creation_ts>
          <short_desc>Add ASSERTs to avoid querying dirtied z-index or normal flow lists on RenderLayer</short_desc>
          <delta_ts>2012-05-03 10:48:09 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>85512</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>achicu</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>610268</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-25 18:18:25 -0700</bug_when>
    <thetext>Currently some call sites are explicitly checking that none of the RenderLayer&apos;s lists (negative z-index, positive z-index and normal flow) are not dirtied. I can&apos;t think of a time where we would be fine getting a dirtied value on a stacking context so it would make sense to just push the ASSERT down to the getters for broader coverage.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610282</commentid>
    <comment_count>1</comment_count>
      <attachid>138920</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-25 18:39:41 -0700</bug_when>
    <thetext>Created attachment 138920
Proposed change 1: added the ad-hoc ASSERTs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611063</commentid>
    <comment_count>2</comment_count>
      <attachid>138920</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-26 16:22:31 -0700</bug_when>
    <thetext>Comment on attachment 138920
Proposed change 1: added the ad-hoc ASSERTs.

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

&gt; Source/WebCore/rendering/RenderLayer.h:391
&gt; +    // Those 2 lists only make sense for stacking contexts. Currently we don&apos;t update the dirtied lists on a
&gt; +    // non-stacking context (see e.g. updateZOrderLists) as they are cleared when dirtyZOrderLists is called.

Maybe we should? It seems a little fraught to have dirty lists sticking around, even if they&apos;re unused.  It almost seems like it&apos;d be cleaner from calling code to just iterate through all the lists that are non-empty rather than having to constantly check if we&apos;re allowed to see this list.

(As an aside, this seems like somewhat of a design wart in RenderLayer, in that RenderLayers that have stacking contexts have extra functionality that other RenderLayers don&apos;t.  Maybe this could be refactored out in the future somehow.)

&gt; Source/WebCore/rendering/RenderLayer.h:393
&gt; +    Vector&lt;RenderLayer*&gt;* posZOrderList() const { ASSERT(!m_zOrderListsDirty &amp;&amp; isStackingContext()); return m_posZOrderList; }
&gt; +    Vector&lt;RenderLayer*&gt;* negZOrderList() const { ASSERT(!m_zOrderListsDirty &amp;&amp; isStackingContext()); return m_negZOrderList; }

These should probably be separate asserts so it&apos;s clear which clause is failing when it triggers.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:809
&gt; +        layer-&gt;reflectionLayer()-&gt;updateLayerListsIfNeeded();

I am not an expert on reflection layers, but this seems like the wrong place to do this.  Maybe it should be happening in RenderLayer::updateLayerListsIfNeeded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611072</commentid>
    <comment_count>3</comment_count>
      <attachid>138920</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-04-26 16:35:44 -0700</bug_when>
    <thetext>Comment on attachment 138920
Proposed change 1: added the ad-hoc ASSERTs.

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:4176
&gt; +    if (layer-&gt;isStackingContext()) {
&gt; +        if (Vector&lt;RenderLayer*&gt;* negZOrderList = layer-&gt;negZOrderList()) {

I&apos;d prefer to not do this, and just ensure that non-stacking contexts have null lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613163</commentid>
    <comment_count>4</comment_count>
      <attachid>138920</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-30 18:50:14 -0700</bug_when>
    <thetext>Comment on attachment 138920
Proposed change 1: added the ad-hoc ASSERTs.

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

&gt;&gt; Source/WebCore/rendering/RenderLayer.h:391
&gt;&gt; +    // non-stacking context (see e.g. updateZOrderLists) as they are cleared when dirtyZOrderLists is called.
&gt; 
&gt; Maybe we should? It seems a little fraught to have dirty lists sticking around, even if they&apos;re unused.  It almost seems like it&apos;d be cleaner from calling code to just iterate through all the lists that are non-empty rather than having to constantly check if we&apos;re allowed to see this list.
&gt; 
&gt; (As an aside, this seems like somewhat of a design wart in RenderLayer, in that RenderLayers that have stacking contexts have extra functionality that other RenderLayers don&apos;t.  Maybe this could be refactored out in the future somehow.)

For non-stacking contexts, those lists are empty (maybe null if they never were allocated) as we clear them when dirtyZOrderLists() is called.

I agree on the design wart and had it on my radar, but currently I won&apos;t go around attacking it.

&gt;&gt; Source/WebCore/rendering/RenderLayer.h:393
&gt;&gt; +    Vector&lt;RenderLayer*&gt;* negZOrderList() const { ASSERT(!m_zOrderListsDirty &amp;&amp; isStackingContext()); return m_negZOrderList; }
&gt; 
&gt; These should probably be separate asserts so it&apos;s clear which clause is failing when it triggers.

Per consensus, it seems we would rather allow callers to call that on non-stacking context. That should satisfy your comment.

&gt;&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:809
&gt;&gt; +        layer-&gt;reflectionLayer()-&gt;updateLayerListsIfNeeded();
&gt; 
&gt; I am not an expert on reflection layers, but this seems like the wrong place to do this.  Maybe it should be happening in RenderLayer::updateLayerListsIfNeeded?

You are totally right, this was a shortsightedness on my side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613169</commentid>
    <comment_count>5</comment_count>
      <attachid>139571</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-30 19:01:09 -0700</bug_when>
    <thetext>Created attachment 139571
Proposed refactoring 2: taking comments into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613540</commentid>
    <comment_count>6</comment_count>
      <attachid>139571</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-01 11:09:20 -0700</bug_when>
    <thetext>Comment on attachment 139571
Proposed refactoring 2: taking comments into account.

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

&gt; Source/WebCore/rendering/RenderLayer.h:933
&gt; +        ASSERT(!m_negZOrderList || m_negZOrderList-&gt;isEmpty());
&gt; +        ASSERT(!m_posZOrderList || m_posZOrderList-&gt;isEmpty());

Can we actually null out m_negZOrderList for non-stacking contexts? I&apos;d prefer that to be an invariant.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1406
&gt; +    // FIXME: We disable AC for elements in RenderFlowThread as it doesn&apos;t work properly.

I don&apos;t like AC used as an abbreviation for accelerated compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614338</commentid>
    <comment_count>7</comment_count>
      <attachid>139571</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-02 09:03:51 -0700</bug_when>
    <thetext>Comment on attachment 139571
Proposed refactoring 2: taking comments into account.

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

&gt;&gt; Source/WebCore/rendering/RenderLayer.h:933
&gt;&gt; +        ASSERT(!m_posZOrderList || m_posZOrderList-&gt;isEmpty());
&gt; 
&gt; Can we actually null out m_negZOrderList for non-stacking contexts? I&apos;d prefer that to be an invariant.

It would be possible but that means we need to change the logic in RenderBoxModelObject::styleWillChange() to recognize when we are demoted from being a stacking context. Currently RenderLayer doesn&apos;t know when it switches from being a stacking context to not being one. I can put a FIXME about that as I would like to investigate moving this logic to RenderLayer::styleChanged(). If I can make that work, it could simplify the logic even more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614340</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-02 09:06:01 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 139571 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139571&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/RenderLayer.h:933
&gt; &gt;&gt; +        ASSERT(!m_posZOrderList || m_posZOrderList-&gt;isEmpty());
&gt; &gt; 
&gt; &gt; Can we actually null out m_negZOrderList for non-stacking contexts? I&apos;d prefer that to be an invariant.
&gt; 
&gt; It would be possible but that means we need to change the logic in RenderBoxModelObject::styleWillChange() to recognize when we are demoted from being a stacking context. Currently RenderLayer doesn&apos;t know when it switches from being a stacking context to not being one. I can put a FIXME about that as I would like to investigate moving this logic to RenderLayer::styleChanged(). If I can make that work, it could simplify the logic even more.

You could just always null out the pointers in updateZOrderLists().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614365</commentid>
    <comment_count>9</comment_count>
      <attachid>139571</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-02 09:45:01 -0700</bug_when>
    <thetext>Comment on attachment 139571
Proposed refactoring 2: taking comments into account.

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

&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderLayer.h:933
&gt;&gt;&gt;&gt; +        ASSERT(!m_posZOrderList || m_posZOrderList-&gt;isEmpty());
&gt;&gt;&gt; 
&gt;&gt;&gt; Can we actually null out m_negZOrderList for non-stacking contexts? I&apos;d prefer that to be an invariant.
&gt;&gt; 
&gt;&gt; It would be possible but that means we need to change the logic in RenderBoxModelObject::styleWillChange() to recognize when we are demoted from being a stacking context. Currently RenderLayer doesn&apos;t know when it switches from being a stacking context to not being one. I can put a FIXME about that as I would like to investigate moving this logic to RenderLayer::styleChanged(). If I can make that work, it could simplify the logic even more.
&gt; 
&gt; You could just always null out the pointers in updateZOrderLists().

I think this solution makes sense for the time being. We cannot check the invariant in updateZOrderLists though but could do it in the 2 list getters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614414</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-02 10:37:43 -0700</bug_when>
    <thetext>Fine by me if you want to do that in the current patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614474</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-02 11:29:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Fine by me if you want to do that in the current patch.

I will implement your idea as it makes a lot of sense and give us coverage for bad usage sooner rather than later.

I will file a bug about making that a real invariant that we enforce at stacking context change (the reason being that there may be a reason why we need to dirty our list on styleWillChange and not styleDidChange like most of the other operations so there is some investigation needed on my side).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614826</commentid>
    <comment_count>12</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-02 16:55:33 -0700</bug_when>
    <thetext>Committed r115913: &lt;http://trac.webkit.org/changeset/115913&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614844</commentid>
    <comment_count>13</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-05-02 17:18:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Fine by me if you want to do that in the current patch.
&gt; 
&gt; I will implement your idea as it makes a lot of sense and give us coverage for bad usage sooner rather than later.

Filed bug 85437 to follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615002</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-02 22:27:12 -0700</bug_when>
    <thetext>Hitting the new assertion under:


#0  0x0000000105634ed5 in WebCore::RenderLayer::negZOrderList (this=0x121d27018) at RenderLayer.h:398
#1  0x0000000105652249 in WebCore::RenderLayerCompositor::layerHas3DContent (this=0x121a1b070, layer=0x121d27018) at /Volumes/DataSSD/Development/apple/webkit/WebKit.git/Source/WebCore/rendering/RenderLayerCompositor.cpp:2237
#2  0x0000000105652334 in WebCore::RenderLayerCompositor::layerHas3DContent (this=0x121a1b070, layer=0x121a02a18) at /Volumes/DataSSD/Development/apple/webkit/WebKit.git/Source/WebCore/rendering/RenderLayerCompositor.cpp:2250
#3  0x0000000105652334 in WebCore::RenderLayerCompositor::layerHas3DContent (this=0x121a1b070, layer=0x121a04168) at /Volumes/DataSSD/Development/apple/webkit/WebKit.git/Source/WebCore/rendering/RenderLayerCompositor.cpp:2250
#4  0x0000000105652185 in WebCore::RenderLayerCompositor::has3DContent (this=0x121a1b070) at /Volumes/DataSSD/Development/apple/webkit/WebKit.git/Source/WebCore/rendering/RenderLayerCompositor.cpp:1324
#5  0x0000000104a09191 in WebCore::FrameView::isSoftwareRenderable (this=0x121a19ec0) at /Volumes/DataSSD/Development/apple/webkit/WebKit.git/Source/WebCore/page/FrameView.cpp:850
#6  0x0000000102787169 in -[WebView(WebPrivate) _isSoftwareRenderable] (self=0x10fb72320, _cmd=0x7fff8c2e64c6) at /Volumes/DataSSD/Development/apple/webkit/WebKit.git/Source/WebKit/mac/WebView/WebView.mm:2469
#7  0x000000010059012b in -[WebView(SafariSnapshotGeneration) createImageForRect:inSubview:] (self=0x10fb72320, _cmd=0x7fff8c2e63de, rectToCapture={origin = {x = 0, y = 0}, size = {width = 974, height = 887}}, subview=0x110915dd0) at /Volumes/WebKit/Internal/Safari/mac/SafariWebViewSnapshotGeneration.mm:65</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615034</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-02 23:14:44 -0700</bug_when>
    <thetext>Another one


&gt;  1 com.apple.WebCore              0x10b70291d WebCore::RenderLayer::negZOrderList() const + 0x5d (RenderLayer.h:398)
   2 com.apple.WebCore              0x10b712732 WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers() const + 0x122 (RenderLayerBacking.cpp:928)
   3 com.apple.WebCore              0x10b712ea5 WebCore::RenderLayerBacking::paintsChildren() const + 0x55 (RenderLayerBacking.cpp:841)
   4 com.apple.WebCore              0x10b713017 WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer() const + 0x67 (RenderLayerBacking.cpp:857)
   5 com.apple.WebCore              0x10b712b89 WebCore::RenderLayerBacking::containsPaintedContent() const + 0x19 (RenderLayerBacking.cpp:952)
   6 com.apple.WebCore              0x10b712ad9 WebCore::RenderLayerBacking::updateDrawsContent() + 0x19 (RenderLayerBacking.cpp:611)
   7 com.apple.WebCore              0x10b71fdda WebCore::RenderLayerCompositor::rootLayerAttachmentChanged() + 0x6a (RenderLayerCompositor.cpp:2199)
   8 com.apple.WebCore              0x10b71e2f7 WebCore::RenderLayerCompositor::detachRootLayer() + 0x1d7 (RenderLayerCompositor.cpp:2185)
   9 com.apple.WebCore              0x10b71e115 WebCore::RenderLayerCompositor::willMoveOffscreen() + 0x45 (RenderLayerCompositor.cpp:1269)
  10 com.apple.WebCore              0x10b8548db WebCore::RenderView::willMoveOffscreen() + 0x4b (RenderView.cpp:887)
  11 com.apple.WebCore              0x10abd6fe5 WebCore::FrameView::willMoveOffscreen() + 0x65 (FrameView.cpp:877)
  12 com.apple.WebCore              0x10b572776 WebCore::Page::willMoveOffscreen() + 0x56 (Page.cpp:704)
  13 com.apple.WebKit2              0x108cc9cd1 WebKit::WebPage::setIsInWindow(bool) + 0x71 (WebPage.cpp:1700)
  14 com.apple.WebKit2              0x108cc7f92 WebKit::WebPage::WebPage(unsigned long long, WebKit::WebPageCreationParameters const&amp;) + 0xa12 (WebPage.cpp:298)
  15 com.apple.WebKit2              0x108cc7575 WebKit::WebPage::WebPage(unsigned long long, WebKit::WebPageCreationParameters const&amp;) + 0x25 (WebPage.cpp:312)
  16 com.apple.WebKit2              0x108cc74a1 WebKit::WebPage::create(unsigned long long, WebKit::WebPageCreationParameters const&amp;) + 0x41 (WebPage.cpp:176)
  17 com.apple.WebKit2              0x108d7e54c WebKit::WebProcess::createWebPage(unsigned long long, WebKit::WebPageCreationParameters const&amp;) + 0xec (WebProcess.cpp:530)
  18 com.apple.WebKit2              0x108d96518 void CoreIPC::callMemberFunction&lt;WebKit::WebProcess, void (WebKit::WebProcess::*)(unsigned long long, WebKit::WebPageCreationParameters const&amp;), unsigned long long, WebKit::WebPageCreationParameters&gt;(CoreIPC::Arguments2&lt;unsigned long long, WebKit::WebPageCreationParameters&gt; const&amp;, WebKit::WebProcess*, void (WebKit::WebProcess::*)(unsigned long long, WebKit::WebPageCreationParameters const&amp;)) + 0x98 (HandleMessage.h:26)
  19 com.apple.WebKit2              0x108d94c91 void CoreIPC::handleMessage&lt;Messages::WebProcess::CreateWebPage, WebKit::WebProcess, void (WebKit::WebProcess::*)(unsigned long long, WebKit::WebPageCreationParameters const&amp;)&gt;(CoreIPC::ArgumentDecoder*, WebKit::WebProcess*, void (WebKit::WebProcess::*)(unsigned long long, WebKit::WebPageCreationParameters const&amp;)) + 0x91 (HandleMessage.h:303)
  20 com.apple.WebKit2              0x108d94322 WebKit::WebProcess::didReceiveWebProcessMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 0xb2 (WebProcessMessageReceiver.cpp:94)
  21 com.apple.WebKit2              0x108d7e9bb WebKit::WebProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 0x5b (WebProcess.cpp:604)
  22 com.apple.WebKit2              0x108c2c17e WebKit::WebConnectionToUIProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 0x15e (WebConnectionToUIProcess.cpp:88)
  23 com.apple.WebKit2              0x108c2c1cd non-virtual thunk to WebKit::WebConnectionToUIProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 0x3d
  24 com.apple.WebKit2              0x108ad655c CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message&lt;CoreIPC::ArgumentDecoder&gt;&amp;) + 0x15c (Connection.cpp:692)
  25 com.apple.WebKit2              0x108ad8ca8 CoreIPC::Connection::dispatchMessages() + 0xc8 (Connection.cpp:720)
  26 com.apple.WebKit2              0x108adf752 WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;::operator()(CoreIPC::Connection*) + 0x72 (Functional.h:173)
  27 com.apple.WebKit2              0x108adf6d5 WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;, void (CoreIPC::Connection*)&gt;::operator()() + 0x35 (Functional.h:405)
  28 com.apple.WebCore              0x10b89f155 WTF::Function&lt;void ()&gt;::operator()() const + 0x85 (Functional.h:613)
  29 com.apple.WebCore              0x10b89eee7 WebCore::RunLoop::performWork() + 0x87 (RunLoop.cpp:66)
  30 com.apple.WebCore              0x10b8a0270 WebCore::RunLoop::performWork(void*) + 0x60 (RunLoopMac.mm:65)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138920</attachid>
            <date>2012-04-25 18:39:41 -0700</date>
            <delta_ts>2012-04-30 19:01:05 -0700</delta_ts>
            <desc>Proposed change 1: added the ad-hoc ASSERTs.</desc>
            <filename>bug-84920-20120425183940.patch</filename>
            <type>text/plain</type>
            <size>14544</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk5NjE2ODQ2NmQwNjNk
NTNhYjBjM2U3ZWNmNjFhOTllNGZhZWU0Mi4uNGI4N2UzMzFlMzI1NGU3YTFmMzkzNzIwYjcxMmE2
MDI1YjJhZDE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA0LTI1ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBBU1NF
UlRzIHRvIGF2b2lkIHF1ZXJ5aW5nIGRpcnRpZWQgei1pbmRleCBvciBub3JtYWwgZmxvdyBsaXN0
cyBvbiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODQ5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIChhdCBsZWFzdCBzZXZlcmFsIHRpbWUh
KS4KKworICAgICAgICBUaGUgZ2lzdCBvZiB0aGUgY2hhbmdlIGlzIHRvIGFkZCB0aGUgQVNTRVJU
cyB0aGF0IG1hdGNoZXMgd2hhdCB0aGUgY3VycmVudCBjb2RlIGV4cGVjdHMuCisgICAgICAgIE9u
ZSBjaG9pY2UgdGhhdCBJIG1hZGUgaXMgdG8gbm93IEFTU0VSVCBpZiB3ZSBjYWxsIHBvc1pPcmRl
ckxpc3QgLyBuZWdaT3JkZXJMaXN0IG9uIGEKKyAgICAgICAgUmVuZGVyTGF5ZXIgdGhhdCBpcyBu
b3QgYSBzdGFja2luZyBjb250ZXh0LiBUaGUgY3VycmVudCBjb2RlIGRvZXMgYWxsb3cgYW5kIHNo
b3VsZG4ndCBoYXZlCisgICAgICAgIGFueSBwcm9ibGVtIHdpdGggdGhhdCBzaXR1YXRpb24uIEhv
d2V2ZXIgaXQgd2FzIHNsb3BweSBpZiB3ZSBjaGFuZ2UgdGhlIHdheSB3ZSBkaXJ0eSBvdXIKKyAg
ICAgICAgbGlzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVM
YXllckJvdW5kcyk6CisgICAgICAgIENoYW5nZWQgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIHRvIG5v
dCBxdWVyeSB0aGUgei1pbmRleCBsaXN0cyBvbiBub24tc3RhY2tpbmcKKyAgICAgICAgY29udGV4
dCBSZW5kZXJMYXllcnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eVpP
cmRlckxpc3RzKToKKyAgICAgICAgQWRkZWQgYSBjb21tZW50IGFzIHRvIHdoeSB3ZSBjYW4ndCBB
U1NFUlQgdGhhdCB3ZSBhcmUgaW4gYSBzdGFja2luZyBjb250ZXh0IGhlcmUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWJ1aWxkWk9yZGVyTGlzdHMpOgorICAgICAgICBBZGRl
ZCBhbiBBU1NFUlQgdGhhdCB3ZSBvbmx5IHJlYnVpbGQgei1pbmRleCBsaXN0cyBmb3IgZGlydGll
ZCBzdGFja2luZyBjb250ZXh0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBk
YXRlQ29tcG9zaXRpbmdBbmRMYXllckxpc3RzSWZOZWVkZWQpOgorICAgICAgICBVcGRhdGVkIHRv
IHVzZSB0aGUgbmV3IGlzRGlydHlTdGFja2luZ0NvbnRleHQgZnVuY3Rpb24uCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojppc0RpcnR5U3RhY2tpbmdDb250ZXh0KToKKyAgICAgICAgTmV3IGhlbHBlciBmdW5jdGlvbi4K
KworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBvc1pPcmRlckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om5lZ1pPcmRlckxpc3QpOgorICAgICAgICBBZGRlZCB0
aGUgQVNTRVJUcyB0aGF0IG1hZGUgc2Vuc2UgZm9yIHRoZSBleGlzdGluZyBkZXNpZ24uIENvbW1l
bnRlZCBhcyB0byB3aHkKKyAgICAgICAgdGhlIEFTU0VSVCBpcyBmaW5lLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6bm9ybWFsRmxvd0xpc3QpOgorICAgICAgICBBZGRlZCBhbiBB
U1NFUlQuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVaT3JkZXJMaXN0
cyk6CisgICAgICAgIFVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgaXNEaXJ0eVN0YWNraW5nQ29udGV4
dCBmdW5jdGlvbi4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJs
YXBNYXBSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeSk6CisgICAgICAgIFJlbW92
ZWQgdGhlIGV4cGxpY2l0IEFTU0VSVHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVkKToKKyAgICAgICAgRGlzYWJsZWQgY29tcG9zaXRp
bmcgb24gUmVuZGVyTGF5ZXIgaW4gZmxvdyB0aHJlYWQuIEJlY2F1c2UgZmxvdyB0aHJlYWQncwor
ICAgICAgICBSZW5kZXJMYXllciBhcmUgbm90IGNvbGxlY3RlZCBhcyBwYXJ0IG9mIFJlbmRlckxh
eWVyJ3MgbGlzdHMgYW5kIGNvdWxkIGJlIGNvbXBvc2l0ZWQsCisgICAgICAgIHRoaXMgd2FzIGNh
dXNpbmcgdGhlIG5ldyBBU1NFUlRzIHRvIHRyaWdnZXIgKGUuZy4gb24gZmFzdC9yZWdpb25zL3dl
YmtpdC1mbG93LXJlbmRlcmVyLWxheWVyLmh0bWwpLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyk6CisgICAg
ICAgIEFkZGVkIGEgY2FsbCB0byB1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQgb24gcmVmbGVjdGlv
biBsYXllci4gTm8gb25lIHdhcyBtYWtpbmcgc3VyZQorICAgICAgICBvdXIgcmVmbGVjdGlvbiBs
YXllcidzIGxpc3RzIHdlcmUgdXAtdG8tZGF0ZSwgd2hpY2ggd2FzIHRyaWdnZXJpbmcgdGhlIG5l
dyBBU1NFUlRzCisgICAgICAgIChlLmcuIG9uIGZhc3QvcnVuaW5zL3J1bi1pbi1sYXllci1ub3Qt
cmVtb3ZlZC1jcmFzaC5odG1sKS4KKwogMjAxMi0wNC0yNSAgS2VudGFybyBIYXJhICA8aGFyYWtl
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBNYWtlIHRoZSBJc29sYXRlKiBwYXJhbWV0
ZXIgbm9uLW9wdGlvbmFsIGluIHNldERPTUV4Y2VwdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA4Nzc1YzU3YjdhN2M5ZTM4YzA5NDI3MmFmNzE2Mzlj
NTQ5NjM1YmUwLi40NzEzNTdhMDMwMTYwMjYxNzdmOGYxYmE2Y2JmMTZjODVkZDk2ZWM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTQxNzIsMjQgKzQxNzIs
MjYgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVu
ZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSZW5kZXIKICAgICBMYXllckxpc3RNdXRhdGlvbkRldGVj
dG9yIG11dGF0aW9uQ2hlY2tlcihjb25zdF9jYXN0PFJlbmRlckxheWVyKj4obGF5ZXIpKTsKICNl
bmRpZgogCi0gICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gbGF5
ZXItPm5lZ1pPcmRlckxpc3QoKSkgewotICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBuZWdaT3Jk
ZXJMaXN0LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7
ICsraSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbmVnWk9yZGVyTGlz
dC0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoIWN1ckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgewot
ICAgICAgICAgICAgICAgIEludFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGNhbGN1bGF0ZUxheWVy
Qm91bmRzKGN1ckxheWVyLCBsYXllcik7Ci0gICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5p
dGUoY2hpbGRVbmlvbkJvdW5kcyk7CisgICAgaWYgKGxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgp
KSB7CisgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCA9IGxh
eWVyLT5uZWdaT3JkZXJMaXN0KCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5l
Z1pPcmRlckxpc3QtPnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGlzdFNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9
IG5lZ1pPcmRlckxpc3QtPmF0KGkpOworICAgICAgICAgICAgICAgIGlmICghY3VyTGF5ZXItPmlz
Q29tcG9zaXRlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEludFJlY3QgY2hpbGRVbmlvbkJv
dW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKGN1ckxheWVyLCBsYXllcik7CisgICAgICAgICAg
ICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChWZWN0
b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCA9IGxheWVyLT5wb3NaT3JkZXJMaXN0KCkp
IHsKLSAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAg
IFJlbmRlckxheWVyKiBjdXJMYXllciA9IHBvc1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAg
ICAgaWYgKCFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBJbnRS
ZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhjdXJMYXllciwgbGF5
ZXIpOwotICAgICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMp
OworICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QgPSBsYXll
ci0+cG9zWk9yZGVyTGlzdCgpKSB7CisgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBwb3Na
T3JkZXJMaXN0LT5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3RTaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBw
b3NaT3JkZXJMaXN0LT5hdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWN1ckxheWVyLT5pc0Nv
bXBvc2l0ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IGNoaWxkVW5pb25Cb3Vu
ZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhjdXJMYXllciwgbGF5ZXIpOworICAgICAgICAgICAg
ICAgICAgICB1bmlvbkJvdW5kcy51bml0ZShjaGlsZFVuaW9uQm91bmRzKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00NDUzLDYgKzQ0NTUs
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVpJbmRleChSZW5kZXJMYXllciogZmlyc3Qs
IFJlbmRlckxheWVyKiBzZWNvbmQpCiB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eVpPcmRlckxpc3Rz
KCkKIHsKICAgICBBU1NFUlQobV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQpOworICAgIC8vIFdl
IGNhbm5vdCBhc3N1bWUgdGhhdCB3ZSBhcmUgY2FsbGVkIG9uIGEgc3RhY2tpbmcgY29udGV4dCBh
cyBpdAorICAgIC8vIGlzIGNhbGxlZCB3aGVuIHdlIGp1c3QgZ290IGRlbW90ZWQgZnJvbSBiZWlu
ZyBhIHN0YWNraW5nIGNvbnRleHQuCiAKICAgICBpZiAobV9wb3NaT3JkZXJMaXN0KQogICAgICAg
ICBtX3Bvc1pPcmRlckxpc3QtPmNsZWFyKCk7CkBAIC00NDkwLDYgKzQ0OTQsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpkaXJ0eU5vcm1hbEZsb3dMaXN0KCkKIHZvaWQgUmVuZGVyTGF5ZXI6OnJlYnVp
bGRaT3JkZXJMaXN0cygpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2Vk
KTsKKyAgICBBU1NFUlQoaXNEaXJ0eVN0YWNraW5nQ29udGV4dCgpKTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICBib29sIGluY2x1ZGVIaWRkZW5MYXllcnMgPSBjb21w
b3NpdG9yKCktPmluQ29tcG9zaXRpbmdNb2RlKCk7CkBAIC00NTY4LDcgKzQ1NzMsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0FuZExheWVyTGlzdHNJZk5lZWRlZCgpCiB7
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChjb21wb3NpdG9yKCkt
PmluQ29tcG9zaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgaWYgKChpc1N0YWNraW5nQ29udGV4dCgp
ICYmIG1fek9yZGVyTGlzdHNEaXJ0eSkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5KQorICAgICAg
ICBpZiAoaXNEaXJ0eVN0YWNraW5nQ29udGV4dCgpIHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0eSkK
ICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS0+dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9z
aXRpbmdVcGRhdGVPbkhpdFRlc3QsIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAzZDdhNDVjNTI1NzhiZDhiZGRl
YWU3NWM5NTZjZGM1NDhlMzkxNDlkLi5mMmQ4MTdhOWU4YmQxZDI5ZmQyNDJiNDQyNWJiODE5ZGFh
OWRlOGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMzgxLDE2
ICszODEsMjAgQEAgcHVibGljOgogICAgIC8vIHRoYXQgaGFzIGEgbm9uLWF1dG8gei1pbmRleC4K
ICAgICBSZW5kZXJMYXllciogc3RhY2tpbmdDb250ZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBpc1N0
YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICFoYXNBdXRvWkluZGV4KCkgfHwgcmVuZGVy
ZXIoKS0+aXNSZW5kZXJWaWV3KCk7IH0KKyAgICBib29sIGlzRGlydHlTdGFja2luZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX3pPcmRlckxpc3RzRGlydHkgJiYgaXNTdGFja2luZ0NvbnRleHQo
KTsgfQogCiAgICAgdm9pZCBkaXJ0eVpPcmRlckxpc3RzKCk7CiAgICAgdm9pZCBkaXJ0eVN0YWNr
aW5nQ29udGV4dFpPcmRlckxpc3RzKCk7CiAgICAgdm9pZCB1cGRhdGVaT3JkZXJMaXN0cygpOwot
ICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBwb3NaT3JkZXJMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9wb3NaT3JkZXJMaXN0OyB9Ci0gICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxp
c3QoKSBjb25zdCB7IHJldHVybiBtX25lZ1pPcmRlckxpc3Q7IH0KKworICAgIC8vIFRob3NlIDIg
bGlzdHMgb25seSBtYWtlIHNlbnNlIGZvciBzdGFja2luZyBjb250ZXh0cy4gQ3VycmVudGx5IHdl
IGRvbid0IHVwZGF0ZSB0aGUgZGlydGllZCBsaXN0cyBvbiBhCisgICAgLy8gbm9uLXN0YWNraW5n
IGNvbnRleHQgKHNlZSBlLmcuIHVwZGF0ZVpPcmRlckxpc3RzKSBhcyB0aGV5IGFyZSBjbGVhcmVk
IHdoZW4gZGlydHlaT3JkZXJMaXN0cyBpcyBjYWxsZWQuCisgICAgVmVjdG9yPFJlbmRlckxheWVy
Kj4qIHBvc1pPcmRlckxpc3QoKSBjb25zdCB7IEFTU0VSVCghbV96T3JkZXJMaXN0c0RpcnR5ICYm
IGlzU3RhY2tpbmdDb250ZXh0KCkpOyByZXR1cm4gbV9wb3NaT3JkZXJMaXN0OyB9CisgICAgVmVj
dG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QoKSBjb25zdCB7IEFTU0VSVCghbV96T3Jk
ZXJMaXN0c0RpcnR5ICYmIGlzU3RhY2tpbmdDb250ZXh0KCkpOyByZXR1cm4gbV9uZWdaT3JkZXJM
aXN0OyB9CiAKICAgICB2b2lkIGRpcnR5Tm9ybWFsRmxvd0xpc3QoKTsKICAgICB2b2lkIHVwZGF0
ZU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dM
aXN0KCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxGbG93TGlzdDsgfQorICAgIFZlY3RvcjxSZW5k
ZXJMYXllcio+KiBub3JtYWxGbG93TGlzdCgpIGNvbnN0IHsgQVNTRVJUKCFtX25vcm1hbEZsb3dM
aXN0RGlydHkpOyByZXR1cm4gbV9ub3JtYWxGbG93TGlzdDsgfQogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBk
aXR0byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NwpAQCAtOTE2LDcgKzkyMCw3IEBAIHByaXZhdGU6CiAK
IGlubGluZSB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVaT3JkZXJMaXN0cygpCiB7Ci0gICAgaWYg
KCFtX3pPcmRlckxpc3RzRGlydHkgfHwgIWlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgaWYgKCFp
c0RpcnR5U3RhY2tpbmdDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKICAgICByZWJ1aWxkWk9y
ZGVyTGlzdHMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAKaW5kZXggMzY1MWU5ZWNlNDk3MjZiNjdjMWIxZDU1YTNkZmMzYTli
MGRmYWFmYS4uZThlYzNjMzBjN2NjZGViYzhmNjJhZjc3NGMxMjBiY2I0NTlkMjE5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAK
QEAgLTY1Myw3ICs2NTMsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVy
bGFwTWFwUmVjdXJzaXZlKE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIFJlbgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgQVNTRVJUKCFsYXllci0+bV9ub3JtYWxGbG93TGlzdERpcnR5KTsKICAgICBp
ZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gbGF5ZXItPm5vcm1hbEZs
b3dMaXN0KCkpIHsKICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbm9ybWFsRmxvd0xpc3QtPnNp
emUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CkBA
IC03MzksNyArNzM4LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21w
b3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogbGF5ZXIsIE8KICNlbmRpZgogCiAgICAg
aWYgKGxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKSB7Ci0gICAgICAgIEFTU0VSVCghbGF5ZXIt
Pm1fek9yZGVyTGlzdHNEaXJ0eSk7CiAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiog
bmVnWk9yZGVyTGlzdCA9IGxheWVyLT5uZWdaT3JkZXJMaXN0KCkpIHsKICAgICAgICAgICAgIHNp
emVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewpAQCAtNzYwLDcgKzc1OCw2IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMo
UmVuZGVyTGF5ZXIqIGxheWVyLCBPCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQVNTRVJU
KCFsYXllci0+bV9ub3JtYWxGbG93TGlzdERpcnR5KTsKICAgICBpZiAoVmVjdG9yPFJlbmRlckxh
eWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gbGF5ZXItPm5vcm1hbEZsb3dMaXN0KCkpIHsKICAgICAg
ICAgc2l6ZV90IGxpc3RTaXplID0gbm9ybWFsRmxvd0xpc3QtPnNpemUoKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CkBAIC04MDcsOCArODA0LDExIEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVu
dHMoUmVuZGVyTGF5ZXIqIGxheWVyLCBPCiAgICAgfQogCiAgICAgQVNTRVJUKHdpbGxCZUNvbXBv
c2l0ZWQgPT0gbmVlZHNUb0JlQ29tcG9zaXRlZChsYXllcikpOwotICAgIGlmIChsYXllci0+cmVm
bGVjdGlvbkxheWVyKCkpCisgICAgaWYgKGxheWVyLT5yZWZsZWN0aW9uTGF5ZXIoKSkgeworICAg
ICAgICAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgYmUgYSBjYWxsIHRvIGNvbXB1dGVDb21wb3Np
dGluZ1JlcXVpcmVtZW50cyB0byBoYW5kbGUgYSByZWZsZWN0aW9uIG92ZXJsYXBwaW5nIHdpdGgg
YW5vdGhlciByZW5kZXJlcj8KKyAgICAgICAgbGF5ZXItPnJlZmxlY3Rpb25MYXllcigpLT51cGRh
dGVMYXllckxpc3RzSWZOZWVkZWQoKTsKICAgICAgICAgbGF5ZXItPnJlZmxlY3Rpb25MYXllcigp
LT5zZXRNdXN0T3ZlcmxhcENvbXBvc2l0ZWRMYXllcnMod2lsbEJlQ29tcG9zaXRlZCk7CisgICAg
fQogCiAgICAgLy8gU3Vic2VxdWVudCBsYXllcnMgaW4gdGhlIHBhcmVudCBzdGFja2luZyBjb250
ZXh0IGFsc28gbmVlZCB0byBjb21wb3NpdGUuCiAgICAgaWYgKGNoaWxkU3RhdGUubV9zdWJ0cmVl
SXNDb21wb3NpdGluZykKQEAgLTkyOCw4ICs5MjgsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyKiBsYXllciwgVmVj
dAogI2VuZGlmCiAKICAgICBpZiAobGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpIHsKLSAgICAg
ICAgQVNTRVJUKCFsYXllci0+bV96T3JkZXJMaXN0c0RpcnR5KTsKLQogICAgICAgICBpZiAoVmVj
dG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QgPSBsYXllci0+bmVnWk9yZGVyTGlzdCgp
KSB7CiAgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKQEAg
LTk0Myw3ICs5NDEsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBv
c2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyKiBsYXllciwgVmVjdAogICAgICAgICAgICAgY2hp
bGRMaXN0LmFwcGVuZChsYXllckJhY2tpbmctPmZvcmVncm91bmRMYXllcigpKTsKICAgICB9CiAK
LSAgICBBU1NFUlQoIWxheWVyLT5tX25vcm1hbEZsb3dMaXN0RGlydHkpOwogICAgIGlmIChWZWN0
b3I8UmVuZGVyTGF5ZXIqPiogbm9ybWFsRmxvd0xpc3QgPSBsYXllci0+bm9ybWFsRmxvd0xpc3Qo
KSkgewogICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBub3JtYWxGbG93TGlzdC0+c2l6ZSgpOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKQEAgLTExMTAs
OCArMTEwNyw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVH
ZW9tZXRyeShSZW5kZXJMYXllciogbGF5ZXIpCiAjZW5kaWYKIAogICAgIGlmIChsYXllci0+aXNT
dGFja2luZ0NvbnRleHQoKSkgewotICAgICAgICBBU1NFUlQoIWxheWVyLT5tX3pPcmRlckxpc3Rz
RGlydHkpOwotCiAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlz
dCA9IGxheWVyLT5uZWdaT3JkZXJMaXN0KCkpIHsKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6
ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdFNpemU7ICsraSkKQEAgLTExMTksNyArMTExNCw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciogbGF5ZXIp
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQoIWxheWVyLT5tX25vcm1hbEZsb3dMaXN0
RGlydHkpOwogICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbm9ybWFsRmxvd0xpc3QgPSBs
YXllci0+bm9ybWFsRmxvd0xpc3QoKSkgewogICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBub3Jt
YWxGbG93TGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RT
aXplOyArK2kpCkBAIC0xNDAzLDcgKzEzOTcsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgYwog
CiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVkKGNvbnN0IFJlbmRl
ckxheWVyKiBsYXllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oYXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nICYmIGxheWVyLT5pc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgLy8gRklYTUU6IFdl
IGRpc2FibGUgQUMgZm9yIGVsZW1lbnRzIGluIFJlbmRlckZsb3dUaHJlYWQgYXMgaXQgZG9lc24n
dCB3b3JrIHByb3Blcmx5LgorICAgIC8vIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzg0OTAwIHRv
IHJlLWVuYWJsZSBpdC4KKyAgICByZXR1cm4gbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nICYm
IGxheWVyLT5pc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWxheWVyLT5yZW5kZXJlcigpLT5pblJl
bmRlckZsb3dUaHJlYWQoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzT3duQmFja2luZ1N0b3JlKGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3JMYXllcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA1NWQ2OGVkNWIzOTBhNGRkOWQw
MmFkZTMzYTZiNzE4YWU2ODg4MDkxLi41NmY4ZGIwMzA5OTg2MGFhNzkwYjA4ZmI2OTMwY2NkMGMy
OThmNjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC03MTIsNyArNzEyLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWUKICAgICBsLT51
cGRhdGVOb3JtYWxGbG93TGlzdCgpOwogCiAgICAgYm9vbCBzaG91bGRQYWludCA9IChiZWhhdmlv
ciAmIFJlbmRlckFzVGV4dFNob3dBbGxMYXllcnMpID8gdHJ1ZSA6IGwtPmludGVyc2VjdHNEYW1h
Z2VSZWN0KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgcm9vdExheWVyKTsKLSAgICBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnTGlzdCA9IGwtPm5lZ1pPcmRlckxpc3QoKTsKKyAgICBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnTGlzdCA9IGwtPmlzU3RhY2tpbmdDb250ZXh0KCkgPyBs
LT5uZWdaT3JkZXJMaXN0KCkgOiAwOwogICAgIGJvb2wgcGFpbnRzQmFja2dyb3VuZFNlcGFyYXRl
bHkgPSBuZWdMaXN0ICYmIG5lZ0xpc3QtPnNpemUoKSA+IDA7CiAgICAgaWYgKHNob3VsZFBhaW50
ICYmIHBhaW50c0JhY2tncm91bmRTZXBhcmF0ZWx5KQogICAgICAgICB3cml0ZSh0cywgKmwsIGxh
eWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgY2xpcFJlY3RUb0FwcGx5LnJlY3QoKSwgb3V0
bGluZVJlY3QucmVjdCgpLCBMYXllclBhaW50UGhhc2VCYWNrZ3JvdW5kLCBpbmRlbnQsIGJlaGF2
aW9yKTsKQEAgLTc0MSw4ICs3NDEsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZQogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IG5vcm1hbEZsb3dMaXN0LT5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRzLCByb290TGF5ZXIsIG5vcm1hbEZsb3dMaXN0LT5h
dChpKSwgcGFpbnREaXJ0eVJlY3QsIGN1cnJJbmRlbnQsIGJlaGF2aW9yKTsKICAgICB9Ci0KLSAg
ICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc0xpc3QgPSBsLT5wb3NaT3JkZXJMaXN0KCkp
IHsKKyAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zTGlzdCA9IGwtPmlzU3RhY2tpbmdDb250
ZXh0KCkgPyBsLT5wb3NaT3JkZXJMaXN0KCkgOiAwOworICAgIGlmIChwb3NMaXN0KSB7CiAgICAg
ICAgIGludCBjdXJySW5kZW50ID0gaW5kZW50OwogICAgICAgICBpZiAoYmVoYXZpb3IgJiBSZW5k
ZXJBc1RleHRTaG93TGF5ZXJOZXN0aW5nKSB7CiAgICAgICAgICAgICB3cml0ZUluZGVudCh0cywg
aW5kZW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139571</attachid>
            <date>2012-04-30 19:01:09 -0700</date>
            <delta_ts>2012-05-02 09:45:01 -0700</delta_ts>
            <desc>Proposed refactoring 2: taking comments into account.</desc>
            <filename>bug-84920-20120430190108.patch</filename>
            <type>text/plain</type>
            <size>12931</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1Njk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTA4MmNlMjdiODgyYjIw
ZWYzYTE4NWViMDYxNDgzMTAzN2M4YzNjZi4uZGVkMjcwZTBlZTAzNjc4YmRmZTdhOTlmMzJiNjYz
NTBiYTI2ODQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTA0LTMwICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBBU1NF
UlRzIHRvIGF2b2lkIHF1ZXJ5aW5nIGRpcnRpZWQgei1pbmRleCBvciBub3JtYWwgZmxvdyBsaXN0
cyBvbiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODQ5MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIGluIERlYnVnIChhdCBsZWFzdCBzZXZl
cmFsIHRpbWUhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhZGRzIHNvbWUgQVNTRVJUcyBvbiBS
ZW5kZXJMYXllciB0aGF0IHByZXZlbnQgYW55IHVzZSBvZiBpdHMgbGlzdHMgaWYgdGhleQorICAg
ICAgICBhcmUgZGlydGllZC4KKworICAgICAgICBXZSBkaWRuJ3QgY2hhbmdlIGhvdyBub24tc3Rh
Y2tpbmcgY29udGV4dCBiZWhhdmVzIChjbGVhcmluZyB0aGUgei1pbmRleCBsaXN0cyB3aGVuIGRp
cnR5aW5nKQorICAgICAgICBhcyBpdCBpcyBtb3JlIHNlY3VyZSB0aGFuIGxhemlseSBjbGVhcmlu
ZyB0aGVtIHdoZW4gdXBkYXRlWk9yZGVyTGlzdHMgaXMgY2FsbGVkLgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpk
aXJ0eVpPcmRlckxpc3RzKToKKyAgICAgICAgQWRkZWQgYSBjb21tZW50IGFzIHRvIHdoeSB3ZSBj
YW4ndCBBU1NFUlQgdGhhdCB3ZSBhcmUgaW4gYSBzdGFja2luZyBjb250ZXh0IGhlcmUuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWJ1aWxkWk9yZGVyTGlzdHMpOgorICAgICAg
ICBBZGRlZCBhbiBBU1NFUlQgdGhhdCB3ZSBvbmx5IHJlYnVpbGQgei1pbmRleCBsaXN0cyBmb3Ig
ZGlydGllZCBzdGFja2luZyBjb250ZXh0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKToKKyAgICAgICAgVXBkYXRlZCB0byBlbnN1cmUg
dGhhdCB0aGUgcmVmbGVjdGlvbiBsYXllciBoYXMgaXRzIGxheWVycyB1cGRhdGVkIHRvby4gVGhp
cyB3YXMgdHJpZ2dlcmluZworICAgICAgICB0aGUgbmV3IEFTU0VSVHMgb24gZmFzdC9ydW5pbnMv
cnVuLWluLWxheWVyLW5vdC1yZW1vdmVkLWNyYXNoLmh0bWwuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0FuZExheWVyTGlzdHNJZk5lZWRlZCk6Cisg
ICAgICAgIFVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgaXNEaXJ0eVN0YWNraW5nQ29udGV4dCBmdW5j
dGlvbi4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmlzRGlydHlTdGFja2luZ0NvbnRleHQpOgorICAgICAgICBOZXcg
aGVscGVyIGZ1bmN0aW9uLiBBbHNvIG1hZGUgdXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCkgdGhl
IG9ubHkgd2F5CisgICAgICAgIHRvIHVwZGF0ZSBsYXllci4gVGhhdCBzaG91bGQgcHJldmVudCBh
bnkgbWlzdXNlLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cG9zWk9yZGVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bmVnWk9yZGVyTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bm9ybWFsRmxvd0xpc3QpOgorICAgICAgICBBU1NF
UlQgdGhhdCB3ZSBkb24ndCBxdWVyeSBhbnkgb2YgdGhlIHByZXZpb3VzIGxpc3RzIGlmIHRoZXkg
YXJlIGRpcnR5LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlWk9yZGVy
TGlzdHMpOgorICAgICAgICBVcGRhdGVkIHRvIGNsZWFyIHRoZSBkaXJ0eSBmbGFnIGZvciBkaXJ0
eSBub24tc3RhY2tpbmcgY29udGV4dCBhcyB3ZSBwcm9wZXJseQorICAgICAgICBjbGVhciB0aGVt
IHdoZW4gZGlydHlaT3JkZXJMaXN0cygpIGlzIGNhbGxlZC4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG9z
aXRpbmdMYXllclRyZWUpOgorICAgICAgICBSZW1vdmVkIHRoZSBleHBsaWNpdCBBU1NFUlRzLgor
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyVHJl
ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2Fu
QmVDb21wb3NpdGVkKToKKyAgICAgICAgRGlzYWJsZWQgY29tcG9zaXRpbmcgb24gUmVuZGVyTGF5
ZXIgaW4gZmxvdyB0aHJlYWQuIEJlY2F1c2UgZmxvdyB0aHJlYWQncworICAgICAgICBSZW5kZXJM
YXllciBhcmUgbm90IGNvbGxlY3RlZCBhcyBwYXJ0IG9mIFJlbmRlckxheWVyJ3MgbGlzdHMgYW5k
IGNvdWxkIGJlIGNvbXBvc2l0ZWQsCisgICAgICAgIHRoaXMgd2FzIGNhdXNpbmcgdGhlIG5ldyBB
U1NFUlRzIHRvIHRyaWdnZXIgKGUuZy4gb24gZmFzdC9yZWdpb25zL3dlYmtpdC1mbG93LXJlbmRl
cmVyLWxheWVyLmh0bWwpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAgICAgICBVcGRhdGVkIHRv
IHVzZSB1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKS4KKwogMjAxMi0wNC0zMCAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEhhcmRlbiBhcml0aG1ldGljIGluIElt
YWdlQnVmZmVyRGF0YUNHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCBjYmY1MjQxNjk5NTY5OTA1ODg3ZTM1NmQwZjk0MjUxNzBjOWQ3MDk4Li5mNDIxNDczMjFi
ZjRjZGEzNWZlNDcxYTk3YWM1NjYxZGIxYWY4ZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTQ0NTYsNiArNDQ1Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBjb21wYXJlWkluZGV4KFJlbmRlckxheWVyKiBmaXJzdCwgUmVuZGVyTGF5ZXIqIHNlY29uZCkK
IHZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5Wk9yZGVyTGlzdHMoKQogewogICAgIEFTU0VSVChtX2xh
eWVyTGlzdE11dGF0aW9uQWxsb3dlZCk7CisgICAgLy8gV2UgY2Fubm90IGFzc3VtZSB0aGF0IHdl
IGFyZSBjYWxsZWQgb24gYSBzdGFja2luZyBjb250ZXh0IGFzIGl0CisgICAgLy8gaXMgY2FsbGVk
IHdoZW4gd2UganVzdCBnb3QgZGVtb3RlZCBmcm9tIGJlaW5nIGEgc3RhY2tpbmcgY29udGV4dC4K
IAogICAgIGlmIChtX3Bvc1pPcmRlckxpc3QpCiAgICAgICAgIG1fcG9zWk9yZGVyTGlzdC0+Y2xl
YXIoKTsKQEAgLTQ0OTMsNiArNDQ5NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5Tm9ybWFs
Rmxvd0xpc3QoKQogdm9pZCBSZW5kZXJMYXllcjo6cmVidWlsZFpPcmRlckxpc3RzKCkKIHsKICAg
ICBBU1NFUlQobV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQpOworICAgIEFTU0VSVChpc0RpcnR5
U3RhY2tpbmdDb250ZXh0KCkpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
ICAgIGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycyA9IGNvbXBvc2l0b3IoKS0+aW5Db21wb3NpdGlu
Z01vZGUoKTsKQEAgLTQ1NjUsMTMgKzQ1NjgsMTggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJMaXN0c0lmTmVlZGVkKCkKIHsKICAgICB1cGRhdGVaT3JkZXJMaXN0cygpOwogICAgIHVw
ZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CisKKyAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlZmxlY3Rpb25M
YXllciA9IHRoaXMtPnJlZmxlY3Rpb25MYXllcigpKSB7CisgICAgICAgIHJlZmxlY3Rpb25MYXll
ci0+dXBkYXRlWk9yZGVyTGlzdHMoKTsKKyAgICAgICAgcmVmbGVjdGlvbkxheWVyLT51cGRhdGVO
b3JtYWxGbG93TGlzdCgpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29t
cG9zaXRpbmdBbmRMYXllckxpc3RzSWZOZWVkZWQoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICBpZiAoY29tcG9zaXRvcigpLT5pbkNvbXBvc2l0aW5nTW9kZSgpKSB7
Ci0gICAgICAgIGlmICgoaXNTdGFja2luZ0NvbnRleHQoKSAmJiBtX3pPcmRlckxpc3RzRGlydHkp
IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0eSkKKyAgICAgICAgaWYgKGlzRGlydHlTdGFja2luZ0Nv
bnRleHQoKSB8fCBtX25vcm1hbEZsb3dMaXN0RGlydHkpCiAgICAgICAgICAgICBjb21wb3NpdG9y
KCktPnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlT25IaXRUZXN0LCB0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKaW5kZXggMWMyOWIwODBkOGViZTA5MmE2ZGQzYjlmZGE4ZWRmNmI2YzZjY2JiMi4u
MTliNWZkYjEyYjIyMmZkYTU1N2Q1ZmZkZDgyNzUzOTBmMDNjYjQyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTM4NSwxMyArMzg1LDE1IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZGlydHlaT3JkZXJMaXN0cygpOwogICAgIHZvaWQgZGlydHlTdGFja2luZ0NvbnRl
eHRaT3JkZXJMaXN0cygpOwotICAgIHZvaWQgdXBkYXRlWk9yZGVyTGlzdHMoKTsKLSAgICBWZWN0
b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zWk9y
ZGVyTGlzdDsgfQotICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9uZWdaT3JkZXJMaXN0OyB9CisKKyAgICBWZWN0b3I8UmVuZGVyTGF5ZXIq
PiogcG9zWk9yZGVyTGlzdCgpIGNvbnN0IHsgQVNTRVJUKCFtX3pPcmRlckxpc3RzRGlydHkpOyBy
ZXR1cm4gbV9wb3NaT3JkZXJMaXN0OyB9CisgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pP
cmRlckxpc3QoKSBjb25zdCB7IEFTU0VSVCghbV96T3JkZXJMaXN0c0RpcnR5KTsgcmV0dXJuIG1f
bmVnWk9yZGVyTGlzdDsgfQogCiAgICAgdm9pZCBkaXJ0eU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAg
dm9pZCB1cGRhdGVOb3JtYWxGbG93TGlzdCgpOwotICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBu
b3JtYWxGbG93TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsRmxvd0xpc3Q7IH0KKyAgICBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiogbm9ybWFsRmxvd0xpc3QoKSBjb25zdCB7IEFTU0VSVCghbV9u
b3JtYWxGbG93TGlzdERpcnR5KTsgcmV0dXJuIG1fbm9ybWFsRmxvd0xpc3Q7IH0KKworICAgIC8v
IFVwZGF0ZSBvdXIgbm9ybWFsIGFuZCB6LWluZGV4IGxpc3RzLgorICAgIHZvaWQgdXBkYXRlTGF5
ZXJMaXN0c0lmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghbV92
aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KSBoZXJlLCBidXQgc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA0NAogICAgIC8vIGRpdHRvIGZvciBoYXNWaXNpYmxl
RGVzY2VuZGFudCgpLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcxMjc3CkBAIC01OTgsOCArNjAwLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgor
ICAgIHZvaWQgdXBkYXRlWk9yZGVyTGlzdHMoKTsKICAgICB2b2lkIHJlYnVpbGRaT3JkZXJMaXN0
cygpOwogCisgICAgdm9pZCB1cGRhdGVOb3JtYWxGbG93TGlzdCgpOworCisgICAgYm9vbCBpc0Rp
cnR5U3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV96T3JkZXJMaXN0c0RpcnR5ICYm
IGlzU3RhY2tpbmdDb250ZXh0KCk7IH0KKwogICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhM
YXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwKTsKICAgICB2b2lkIGNsZWFyUmVwYWludFJl
Y3RzKCk7CiAKQEAgLTYzMCw3ICs2MzcsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0
TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgVmVjdG9yPFJlbmRlckxheWVyKj4qJiwg
VmVjdG9yPFJlbmRlckxheWVyKj4qJik7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyTGlzdHNJZk5l
ZWRlZCgpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdBbmRMYXllckxpc3RzSWZOZWVkZWQo
KTsKIAogICAgIHZvaWQgcGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwKQEAgLTkxNyw4ICs5
MjMsMTggQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVpPcmRl
ckxpc3RzKCkKIHsKLSAgICBpZiAoIW1fek9yZGVyTGlzdHNEaXJ0eSB8fCAhaXNTdGFja2luZ0Nv
bnRleHQoKSkKKyAgICBpZiAoIW1fek9yZGVyTGlzdHNEaXJ0eSkKICAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFpc1N0YWNraW5nQ29udGV4dCgpKSB7CisgICAgICAgIC8vIERpcnRpZWQgbm9u
LXN0YWNraW5nIGNvbnRleHRzIHNob3VsZCBoYXZlIGhhZCB0aGVpciBsaXN0CisgICAgICAgIC8v
IGNsZWFyZWQgd2hlbiBnZXR0aW5nIGRpcnRpZWQuCisgICAgICAgIEFTU0VSVCghbV9uZWdaT3Jk
ZXJMaXN0IHx8IG1fbmVnWk9yZGVyTGlzdC0+aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFt
X3Bvc1pPcmRlckxpc3QgfHwgbV9wb3NaT3JkZXJMaXN0LT5pc0VtcHR5KCkpOworICAgICAgICBt
X3pPcmRlckxpc3RzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IHJlYnVpbGRaT3JkZXJMaXN0cygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDAyZjUxNjkwNjBmOWE2ZWFiOTVh
NDU5N2EyZTVjYzRlZjE1ZjI3NzIuLjdlMzM1ODQyMTdiOWY0OTEzMzgyYWMxYjQ5OWZiYjhkNDFh
ZDY2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCkBAIC02NTcsNyArNjU3LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShPdmVybGFwTWFwJiBvdmVybGFwTWFwLCBSZW4K
ICAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVCghbGF5ZXItPm1fbm9ybWFsRmxvd0xpc3RE
aXJ0eSk7CiAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBub3JtYWxGbG93TGlzdCA9IGxh
eWVyLT5ub3JtYWxGbG93TGlzdCgpKSB7CiAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5vcm1h
bEZsb3dMaXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNp
emU7ICsraSkgewpAQCAtNjg5LDkgKzY4OCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjphZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuCiB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRz
KFJlbmRlckxheWVyKiBsYXllciwgT3ZlcmxhcE1hcCogb3ZlcmxhcE1hcCwgc3RydWN0IENvbXBv
c2l0aW5nU3RhdGUmIGNvbXBvc2l0aW5nU3RhdGUsIGJvb2wmIGxheWVyc0NoYW5nZWQpCiB7CiAg
ICAgbGF5ZXItPnVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLSAgICBsYXllci0+dXBkYXRlWk9yZGVy
TGlzdHMoKTsKLSAgICBsYXllci0+dXBkYXRlTm9ybWFsRmxvd0xpc3QoKTsKLSAgICAKKyAgICBs
YXllci0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CisKICAgICAvLyBDbGVhciB0aGUgZmxh
ZwogICAgIGxheWVyLT5zZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoZmFsc2UpOwogICAgIApA
QCAtNzQzLDcgKzc0MSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29t
cG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGxheWVyLCBPCiAjZW5kaWYKIAogICAg
IGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkgewotICAgICAgICBBU1NFUlQoIWxheWVy
LT5tX3pPcmRlckxpc3RzRGlydHkpOwogICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4q
IG5lZ1pPcmRlckxpc3QgPSBsYXllci0+bmVnWk9yZGVyTGlzdCgpKSB7CiAgICAgICAgICAgICBz
aXplX3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKQEAgLTc2NCw3ICs3NjEsNiBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRz
KFJlbmRlckxheWVyKiBsYXllciwgTwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFTU0VS
VCghbGF5ZXItPm1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7CiAgICAgaWYgKFZlY3RvcjxSZW5kZXJM
YXllcio+KiBub3JtYWxGbG93TGlzdCA9IGxheWVyLT5ub3JtYWxGbG93TGlzdCgpKSB7CiAgICAg
ICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5vcm1hbEZsb3dMaXN0LT5zaXplKCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewpAQCAtODExLDggKzgwNywxMCBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1l
bnRzKFJlbmRlckxheWVyKiBsYXllciwgTwogICAgIH0KIAogICAgIEFTU0VSVCh3aWxsQmVDb21w
b3NpdGVkID09IG5lZWRzVG9CZUNvbXBvc2l0ZWQobGF5ZXIpKTsKLSAgICBpZiAobGF5ZXItPnJl
ZmxlY3Rpb25MYXllcigpKQorICAgIGlmIChsYXllci0+cmVmbGVjdGlvbkxheWVyKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZG4ndCB3ZSBjYWxsIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVp
cmVtZW50cyB0byBoYW5kbGUgYSByZWZsZWN0aW9uIG92ZXJsYXBwaW5nIHdpdGggYW5vdGhlciBy
ZW5kZXJlcj8KICAgICAgICAgbGF5ZXItPnJlZmxlY3Rpb25MYXllcigpLT5zZXRNdXN0T3Zlcmxh
cENvbXBvc2l0ZWRMYXllcnMod2lsbEJlQ29tcG9zaXRlZCk7CisgICAgfQogCiAgICAgLy8gU3Vi
c2VxdWVudCBsYXllcnMgaW4gdGhlIHBhcmVudCBzdGFja2luZyBjb250ZXh0IGFsc28gbmVlZCB0
byBjb21wb3NpdGUuCiAgICAgaWYgKGNoaWxkU3RhdGUubV9zdWJ0cmVlSXNDb21wb3NpdGluZykK
QEAgLTkzNCw4ICs5MzIsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENv
bXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyKiBsYXllciwgVmVjdAogI2VuZGlmCiAKICAg
ICBpZiAobGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgQVNTRVJUKCFsYXll
ci0+bV96T3JkZXJMaXN0c0RpcnR5KTsKLQogICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVy
Kj4qIG5lZ1pPcmRlckxpc3QgPSBsYXllci0+bmVnWk9yZGVyTGlzdCgpKSB7CiAgICAgICAgICAg
ICBzaXplX3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKQEAgLTk0OSw3ICs5NDUsNiBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVl
KFJlbmRlckxheWVyKiBsYXllciwgVmVjdAogICAgICAgICAgICAgY2hpbGRMaXN0LmFwcGVuZChs
YXllckJhY2tpbmctPmZvcmVncm91bmRMYXllcigpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWxh
eWVyLT5tX25vcm1hbEZsb3dMaXN0RGlydHkpOwogICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIq
Piogbm9ybWFsRmxvd0xpc3QgPSBsYXllci0+bm9ybWFsRmxvd0xpc3QoKSkgewogICAgICAgICBz
aXplX3QgbGlzdFNpemUgPSBub3JtYWxGbG93TGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKQEAgLTExMTgsOCArMTExMyw2IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJM
YXllciogbGF5ZXIsIGludCBkZXB0CiAjZW5kaWYKIAogICAgIGlmIChsYXllci0+aXNTdGFja2lu
Z0NvbnRleHQoKSkgewotICAgICAgICBBU1NFUlQoIWxheWVyLT5tX3pPcmRlckxpc3RzRGlydHkp
OwotCiAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCA9IGxh
eWVyLT5uZWdaT3JkZXJMaXN0KCkpIHsKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5l
Z1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGlzdFNpemU7ICsraSkKQEAgLTExMjcsNyArMTEyMCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciogbGF5ZXIsIGludCBk
ZXB0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQoIWxheWVyLT5tX25vcm1hbEZsb3dM
aXN0RGlydHkpOwogICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbm9ybWFsRmxvd0xpc3Qg
PSBsYXllci0+bm9ybWFsRmxvd0xpc3QoKSkgewogICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBu
b3JtYWxGbG93TGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3RTaXplOyArK2kpCkBAIC0xNDExLDcgKzE0MDMsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikg
YwogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVkKGNvbnN0IFJl
bmRlckxheWVyKiBsYXllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oYXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nICYmIGxheWVyLT5pc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgLy8gRklYTUU6
IFdlIGRpc2FibGUgQUMgZm9yIGVsZW1lbnRzIGluIFJlbmRlckZsb3dUaHJlYWQgYXMgaXQgZG9l
c24ndCB3b3JrIHByb3Blcmx5LgorICAgIC8vIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzg0OTAw
IHRvIHJlLWVuYWJsZSBpdC4KKyAgICByZXR1cm4gbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
ICYmIGxheWVyLT5pc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWxheWVyLT5yZW5kZXJlcigpLT5p
blJlbmRlckZsb3dUaHJlYWQoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzT3duQmFja2luZ1N0b3JlKGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgUmVu
ZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3JMYXllcikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA1NWQ2OGVkNWIzOTBhNGRk
OWQwMmFkZTMzYTZiNzE4YWU2ODg4MDkxLi4zMjBkNGU3MDZhM2Q2OTYxYzc3N2E4Y2E3ZGEzNGE1
N2EwZTg0NGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCkBAIC03MDgsOCArNzA4LDcgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWUKICAgICBs
LT5jYWxjdWxhdGVSZWN0cyhyb290TGF5ZXIsIDAsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5k
cywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgdHJ1ZSk7CiAKICAg
ICAvLyBFbnN1cmUgb3VyIGxpc3RzIGFyZSB1cC10by1kYXRlLgotICAgIGwtPnVwZGF0ZVpPcmRl
ckxpc3RzKCk7Ci0gICAgbC0+dXBkYXRlTm9ybWFsRmxvd0xpc3QoKTsKKyAgICBsLT51cGRhdGVM
YXllckxpc3RzSWZOZWVkZWQoKTsKIAogICAgIGJvb2wgc2hvdWxkUGFpbnQgPSAoYmVoYXZpb3Ig
JiBSZW5kZXJBc1RleHRTaG93QWxsTGF5ZXJzKSA/IHRydWUgOiBsLT5pbnRlcnNlY3RzRGFtYWdl
UmVjdChsYXllckJvdW5kcywgZGFtYWdlUmVjdC5yZWN0KCksIHJvb3RMYXllcik7CiAgICAgVmVj
dG9yPFJlbmRlckxheWVyKj4qIG5lZ0xpc3QgPSBsLT5uZWdaT3JkZXJMaXN0KCk7Cg==
</data>
<flag name="review"
          id="145221"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>