<?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>81786</bug_id>
          
          <creation_ts>2012-03-21 08:40:57 -0700</creation_ts>
          <short_desc>Initial support fixed position elements in Qt WebKit2</short_desc>
          <delta_ts>2012-04-10 17:44:35 -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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>anilsson</cc>
    
    <cc>benjamin</cc>
    
    <cc>efidler</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>584160</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-03-21 08:40:57 -0700</bug_when>
    <thetext>Currently, fixed position elements scroll with the page and get adjusted when scrolling is finished.
Their layout does not take the scale into account, resulting in wrong positioning.
A patch is coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584207</commentid>
    <comment_count>1</comment_count>
      <attachid>133057</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-03-21 09:17:58 -0700</bug_when>
    <thetext>Created attachment 133057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584208</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-21 09:19:39 -0700</bug_when>
    <thetext>Attachment 133057 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/GraphicsLayer.h:423:  Extra space between PositionInformationMap&amp; and fixedPositionInformation  [whitespace/declaration] [3]
Total errors found: 1 in 21 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>584210</commentid>
    <comment_count>3</comment_count>
      <attachid>133058</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-03-21 09:21:17 -0700</bug_when>
    <thetext>Created attachment 133058
Patch

Remove extra space (style error).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584221</commentid>
    <comment_count>4</comment_count>
      <attachid>133058</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-21 09:31:06 -0700</bug_when>
    <thetext>Comment on attachment 133058
Patch

Attachment 133058 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12034534</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584242</commentid>
    <comment_count>5</comment_count>
      <attachid>133058</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-21 09:51:53 -0700</bug_when>
    <thetext>Comment on attachment 133058
Patch

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

Any good tests? even manual ones?

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:421
&gt; +    void setFixedPosition(bool fixed) { m_fixedPosition = fixed; }
&gt; +    bool fixedPosition() const { return m_fixedPosition; }

setUseFixedPosition? setIsFixedPositioned() ?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:433
&gt; +    PositionInformationMap::iterator end = graphicsLayer-&gt;fixedPositionInformation().end();
&gt; +    for (PositionInformationMap::iterator it = graphicsLayer-&gt;fixedPositionInformation().begin(); it != end; ++it)
&gt; +        m_state.m_fixedPositionInformation.add(it-&gt;first, it-&gt;second);

hmmmm, why do you need to copy this?

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:186
&gt;  
&gt; +void WebLayerTreeRenderer::adjustPositionForFixedPositionLayer(WebCore::GraphicsLayer* layer)
&gt; +{
&gt; +    ASSERT(layer-&gt;fixedPosition());

This should not need to be called unless we are doing overflow

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:197
&gt; +            adjustedX = visibleEdgeLeft + left-&gt;second.getFloatValue() * m_visibleContentsRect.width() / 100;
&gt; +        else // it-&gt;second.isFixed()
&gt; +            adjustedX = visibleEdgeLeft + left-&gt;second.getFloatValue() * m_contentsScale;

IF you are zooming in the fixed elements will take over teh whole screen. iOS has a limit for this (say 2.0).

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:205
&gt; +        if (right!= map.end()) {
&gt; +            if  (right-&gt;second.isPercent())
&gt; +                adjustedX = visibleEdgeRight - right-&gt;second.getFloatValue() * m_visibleContentsRect.width() / 100 - layer-&gt;size().width();
&gt; +            else // it-&gt;second.isFixed()
&gt; +                adjustedX = visibleEdgeRight - right-&gt;second.getFloatValue() * m_contentsScale - layer-&gt;size().width();

This should be using valueForLength (LengthFunctions.h), I believe

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:213
&gt; +            adjustedY = visibleEdgeTop + top-&gt;second.getFloatValue() * m_visibleContentsRect.height() / 100;

top-&gt;second is pretty unreadable.

&gt; Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h:80
&gt;  // Defaults to false.
&gt; +WK_EXPORT void WKPreferencesSetAcceleratedCompositingForFixedPositionEnabled(WKPreferencesRef, bool);
&gt; +WK_EXPORT bool WKPreferencesGetAcceleratedCompositingForFixedPositionEnabled(WKPreferencesRef);

Why are we exposing this to C? Are Apple guys interesting in using it? I would leave this out of this patch

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:124
&gt; +    webPageProxy-&gt;pageGroup()-&gt;preferences()-&gt;setAcceleratedCompositingForFixedPositionEnabled(true);

Cant we just tie this to the resizeToContents and avoid the preference?

&gt; Source/WebKit2/ChangeLog:10
&gt; +        This is not done for pinching. Only when the pinch gesture is finished, the position is adjusted.

huh? why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584293</commentid>
    <comment_count>6</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-03-21 10:24:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
Thank you for your review :)

&gt; (From update of attachment 133058 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133058&amp;action=review
&gt; 
&gt; Any good tests? even manual ones?
I will add my test page as a manual test.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayer.h:421
&gt; &gt; +    void setFixedPosition(bool fixed) { m_fixedPosition = fixed; }
&gt; &gt; +    bool fixedPosition() const { return m_fixedPosition; }
&gt; 
&gt; setUseFixedPosition? setIsFixedPositioned() ?
&gt; 
setUseFixedPosition() sound good to me :)

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:433
&gt; &gt; +    PositionInformationMap::iterator end = graphicsLayer-&gt;fixedPositionInformation().end();
&gt; &gt; +    for (PositionInformationMap::iterator it = graphicsLayer-&gt;fixedPositionInformation().begin(); it != end; ++it)
&gt; &gt; +        m_state.m_fixedPositionInformation.add(it-&gt;first, it-&gt;second);
&gt; 
&gt; hmmmm, why do you need to copy this?
At the moment, it is not really used. I&apos;ll remove that.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:186
&gt; &gt;  
&gt; &gt; +void WebLayerTreeRenderer::adjustPositionForFixedPositionLayer(WebCore::GraphicsLayer* layer)
&gt; &gt; +{
&gt; &gt; +    ASSERT(layer-&gt;fixedPosition());
&gt; 
&gt; This should not need to be called unless we are doing overflow
We need to make sure we are in sync during flick scroll too. 

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:197
&gt; &gt; +            adjustedX = visibleEdgeLeft + left-&gt;second.getFloatValue() * m_visibleContentsRect.width() / 100;
&gt; &gt; +        else // it-&gt;second.isFixed()
&gt; &gt; +            adjustedX = visibleEdgeLeft + left-&gt;second.getFloatValue() * m_contentsScale;
&gt; 
&gt; IF you are zooming in the fixed elements will take over teh whole screen. iOS has a limit for this (say 2.0).
I did not observe a limit with ios 5.1 and my test page. We can add a limit later, if we think it is needed, though :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:205
&gt; &gt; +        if (right!= map.end()) {
&gt; &gt; +            if  (right-&gt;second.isPercent())
&gt; &gt; +                adjustedX = visibleEdgeRight - right-&gt;second.getFloatValue() * m_visibleContentsRect.width() / 100 - layer-&gt;size().width();
&gt; &gt; +            else // it-&gt;second.isFixed()
&gt; &gt; +                adjustedX = visibleEdgeRight - right-&gt;second.getFloatValue() * m_contentsScale - layer-&gt;size().width();
&gt; 
&gt; This should be using valueForLength (LengthFunctions.h), I believe
&gt; 
ok

&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:213
&gt; &gt; +            adjustedY = visibleEdgeTop + top-&gt;second.getFloatValue() * m_visibleContentsRect.height() / 100;
&gt; 
&gt; top-&gt;second is pretty unreadable.
&gt; 
I will assign it to a temporary variable with a better name.

&gt; &gt; Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h:80
&gt; &gt;  // Defaults to false.
&gt; &gt; +WK_EXPORT void WKPreferencesSetAcceleratedCompositingForFixedPositionEnabled(WKPreferencesRef, bool);
&gt; &gt; +WK_EXPORT bool WKPreferencesGetAcceleratedCompositingForFixedPositionEnabled(WKPreferencesRef);
&gt; 
&gt; Why are we exposing this to C? Are Apple guys interesting in using it? I would leave this out of this patch
&gt; 
ok

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:124
&gt; &gt; +    webPageProxy-&gt;pageGroup()-&gt;preferences()-&gt;setAcceleratedCompositingForFixedPositionEnabled(true);
&gt; 
&gt; Cant we just tie this to the resizeToContents and avoid the preference?
&gt; 
ok

&gt; &gt; Source/WebKit2/ChangeLog:10
&gt; &gt; +        This is not done for pinching. Only when the pinch gesture is finished, the position is adjusted.
&gt; 
&gt; huh? why?
I tested chrome beta on ICS and ios 5.1. Both do the same. During the pinch, the position is not updates, only after the pinch is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584552</commentid>
    <comment_count>7</comment_count>
      <attachid>133058</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-03-21 13:18:28 -0700</bug_when>
    <thetext>Comment on attachment 133058
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:421
&gt;&gt;&gt; +    bool fixedPosition() const { return m_fixedPosition; }
&gt;&gt; 
&gt;&gt; setUseFixedPosition? setIsFixedPositioned() ?
&gt; 
&gt; setUseFixedPosition() sound good to me :)

GraphicsLayer should not know about any CSS concepts like fixed position. This does not belong here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584553</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-03-21 13:18:34 -0700</bug_when>
    <thetext>As this change GraphicsLayer pretty fundamentally, Simon Fraser needs to review this before it goes in.  Putting a CSS concept on on GraphicsLayer is probably the wrong way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584555</commentid>
    <comment_count>9</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-21 13:20:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 133058 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133058&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:421
&gt; &gt;&gt;&gt; +    bool fixedPosition() const { return m_fixedPosition; }
&gt; &gt;&gt; 
&gt; &gt;&gt; setUseFixedPosition? setIsFixedPositioned() ?
&gt; &gt; 
&gt; &gt; setUseFixedPosition() sound good to me :)
&gt; 
&gt; GraphicsLayer should not know about any CSS concepts like fixed position. This does not belong here.

Any other suggestion on how the same effect could be achieved? Or is this just a semantic issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584557</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-03-21 13:22:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 133058 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133058&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:421
&gt; &gt; &gt;&gt;&gt; +    bool fixedPosition() const { return m_fixedPosition; }
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; setUseFixedPosition? setIsFixedPositioned() ?
&gt; &gt; &gt; 
&gt; &gt; &gt; setUseFixedPosition() sound good to me :)
&gt; &gt; 
&gt; &gt; GraphicsLayer should not know about any CSS concepts like fixed position. This does not belong here.
&gt; 
&gt; Any other suggestion on how the same effect could be achieved? Or is this just a semantic issue.

It&apos;s not semantic. We don&apos;t want GraphicsLayer becoming a RenderLayer look-alike. GraphicsLayer is about backing stores, not what you do with them. 

You should communicate the information about which layers have special scrolling behavior via some other mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584576</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-03-21 13:37:27 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (From update of attachment 133058 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133058&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:421
&gt; &gt; &gt; &gt;&gt;&gt; +    bool fixedPosition() const { return m_fixedPosition; }
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; setUseFixedPosition? setIsFixedPositioned() ?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; setUseFixedPosition() sound good to me :)
&gt; &gt; &gt; 
&gt; &gt; &gt; GraphicsLayer should not know about any CSS concepts like fixed position. This does not belong here.
&gt; &gt; 
&gt; &gt; Any other suggestion on how the same effect could be achieved? Or is this just a semantic issue.
&gt; 
&gt; It&apos;s not semantic. We don&apos;t want GraphicsLayer becoming a RenderLayer look-alike. GraphicsLayer is about backing stores, not what you do with them. 
&gt; 
&gt; You should communicate the information about which layers have special scrolling behavior via some other mechanism.

It is the long term goal for the ScrollingCoordinator and ScrollingTree to contain this information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584587</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-21 13:44:00 -0700</bug_when>
    <thetext>&gt; It is the long term goal for the ScrollingCoordinator and ScrollingTree to contain this information.

OK, understood. Yael, please make sure we&apos;re architecturally aligned with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584590</commentid>
    <comment_count>13</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-03-21 13:46:41 -0700</bug_when>
    <thetext>Thanks for your comments.
I&apos;ll look into using ScrollingCoordinator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586003</commentid>
    <comment_count>14</comment_count>
      <attachid>133414</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-03-22 19:29:47 -0700</bug_when>
    <thetext>Created attachment 133414
Patch

Adjusted the previous patch in response to Kenneth&apos;s comments.
Also removed all changes from GraphicsLayer.h .

The approach now is that in LayerTreeHostQt, just before syncing the layer tree, we walk the RenderLayers and collect the information needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586005</commentid>
    <comment_count>15</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-03-22 19:31:34 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I&apos;ll look into using ScrollingCoordinator.

I think it is a bit pre-mature to start using ScrollingCoordinator. I will come back to it later, if that&apos;s ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586033</commentid>
    <comment_count>16</comment_count>
      <attachid>133414</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-03-22 20:05:11 -0700</bug_when>
    <thetext>Comment on attachment 133414
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:265
&gt; +            if (renderLayer-&gt;renderer()-&gt;isPositioned() &amp;&amp; renderLayer-&gt;renderer()-&gt;style()-&gt;position() == FixedPosition) {

Checking the style&apos;s position isn&apos;t sufficient to know if it&apos;s really fixed position, because transformed elements act as fixed position containers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586268</commentid>
    <comment_count>17</comment_count>
      <attachid>133414</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-23 06:18:22 -0700</bug_when>
    <thetext>Comment on attachment 133414
Patch

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

Discussed this on IRC;
I&apos;d rather we don&apos;t pass around all this fixed-position information, and instead do something more aligned with how GraphicsLayer are offseted in WebCore, by setting a scrollOffset on all of them.

&gt; Source/WebCore/page/FrameView.cpp:1717
&gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled()) {
&gt; +            updateFixedElementsAfterScrolling();
&gt; +            repaintFixedElementsAfterScrolling();
&gt; +        }

This probably needs a comment.

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h:109
&gt; +    HashMap&lt;int, WebCore::Length&gt; m_fixedPositionInformation;

I don&apos;t like using a map for 4 items. Please see previous comment.

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:126
&gt; +    if (m_fixedLayers.size()) {
&gt; +        LayerMap::iterator end = m_fixedLayers.end();
&gt; +        for (LayerMap::iterator it = m_fixedLayers.begin(); it != end; ++it)
&gt; +            it-&gt;second-&gt;syncCompositingStateForThisLayerOnly();
&gt; +    }

Why do you need to sync these again?

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:167
&gt; +    m_contentsSize = contentsSize;

how is this different from DrawingArea::contentsRect()?

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:196
&gt; +            adjustedX = visibleEdgeLeft + left.getFloatValue() * m_visibleContentsRect.width() / 100;

You&apos;re doing manually what WebCore::Length can do automatically.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.h:120
&gt; +    WebKit::PositionInformationMap&amp; fixedPositionInformation() { return m_fixedPositionInformation; }
&gt; +    bool hasFixedPosition() const { return m_hasFixedPosition; }
&gt; +    void setHasFixedPosition(bool isFixed) { m_hasFixedPosition = isFixed; }
&gt; +

I&apos;d rather call this
fixedToViewport
and offsetFromViewport</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586709</commentid>
    <comment_count>18</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-03-23 14:03:16 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 133414 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133414&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:265
&gt; &gt; +            if (renderLayer-&gt;renderer()-&gt;isPositioned() &amp;&amp; renderLayer-&gt;renderer()-&gt;style()-&gt;position() == FixedPosition) {
&gt; 
&gt; Checking the style&apos;s position isn&apos;t sufficient to know if it&apos;s really fixed position, because transformed elements act as fixed position containers.

Thanks for pointing this out. I&apos;ll add a check that renderer()-&gt;container() is a RenderView, like in RenderLayerCompositor. Would that be sufficient?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586717</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-03-23 14:09:23 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Thanks for pointing this out. I&apos;ll add a check that renderer()-&gt;container() is a RenderView, like in RenderLayerCompositor. Would that be sufficient?

Yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586999</commentid>
    <comment_count>20</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-03-23 20:44:14 -0700</bug_when>
    <thetext>(In reply to comment #17)
thanks for the review,
&gt; (From update of attachment 133414 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133414&amp;action=review
&gt; 
&gt; Discussed this on IRC;
&gt; I&apos;d rather we don&apos;t pass around all this fixed-position information, and instead do something more aligned with how GraphicsLayer are offseted in WebCore, by setting a scrollOffset on all of them.

Please keep in mind that not all fixed position layers are moved by the same offset. If the position is specified in pixels, and the page is zoomed, that affects the offset differently than percentage.

&gt; &gt; Source/WebCore/page/FrameView.cpp:1717
&gt; &gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled()) {
&gt; &gt; +            updateFixedElementsAfterScrolling();
&gt; &gt; +            repaintFixedElementsAfterScrolling();
&gt; &gt; +        }
&gt; 
&gt; This probably needs a comment.
I might not need this change after all

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h:109
&gt; &gt; +    HashMap&lt;int, WebCore::Length&gt; m_fixedPositionInformation;
&gt; 
&gt; I don&apos;t like using a map for 4 items. Please see previous comment.
ok, I&apos;ll change that as we talked on irc
 
&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:126
&gt; &gt; +    if (m_fixedLayers.size()) {
&gt; &gt; +        LayerMap::iterator end = m_fixedLayers.end();
&gt; &gt; +        for (LayerMap::iterator it = m_fixedLayers.begin(); it != end; ++it)
&gt; &gt; +            it-&gt;second-&gt;syncCompositingStateForThisLayerOnly();
&gt; &gt; +    }
&gt; 
&gt; Why do you need to sync these again?
We need to sync during scrolling. Otherwise, the fixed layer scrolls and jumps back when scrolling is finished. I&apos;ll see if I can avoid the jumps in a different way.

&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:167
&gt; &gt; +    m_contentsSize = contentsSize;
&gt; 
&gt; how is this different from DrawingArea::contentsRect()?
WebLayerTreeRenderer does not have access to DrawingArea and I did not want to change that. We already have WebLayerTreeRenderer::setVisibleContentsRect .

&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:196
&gt; &gt; +            adjustedX = visibleEdgeLeft + left.getFloatValue() * m_visibleContentsRect.width() / 100;
&gt; 
&gt; You&apos;re doing manually what WebCore::Length can do automatically.
Not sure how much I can reuse LengthFunctions. Length does not know about the scale, and I need to take that into account too.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.h:120
&gt; &gt; +    WebKit::PositionInformationMap&amp; fixedPositionInformation() { return m_fixedPositionInformation; }
&gt; &gt; +    bool hasFixedPosition() const { return m_hasFixedPosition; }
&gt; &gt; +    void setHasFixedPosition(bool isFixed) { m_hasFixedPosition = isFixed; }
&gt; &gt; +
&gt; 
&gt; I&apos;d rather call this
&gt; fixedToViewport
&gt; and offsetFromViewport</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587218</commentid>
    <comment_count>21</comment_count>
      <attachid>133667</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-03-24 18:32:36 -0700</bug_when>
    <thetext>Created attachment 133667
Patch

Address previous comments, and add a manual test.
Fixed a bug related to scale. Apparently, we should not multiply the offset by the scale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587244</commentid>
    <comment_count>22</comment_count>
      <attachid>133667</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-24 22:28:35 -0700</bug_when>
    <thetext>Comment on attachment 133667
Patch

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

See comments.

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerOffsetFromViewport.h:49
&gt; +    typedef int LayerSides;
&gt; +    bool hasTop() { return layerSide &amp; TopSide; }
&gt; +    bool hasBottom() { return layerSide &amp; BottomSide; }
&gt; +    bool hasLeft() { return layerSide &amp; LeftSide; }
&gt; +    bool hasRight() { return layerSide &amp; RightSide; }
&gt; +
&gt; +    LayerSides layerSide;
&gt; +    Length horizontalOffset;
&gt; +    Length verticalOffset;

This is still kind of awkward :)
Instead, we could just have 4 Lengths, and check if they have a value when we adjust. It would make half the code in this patch redundant :)
Also, if all we have is 4 Lengths, we don&apos;t need this extra class that doesn&apos;t really do much.
We can simply have:
TextureMapperLayer::setViewportOffsets(top, right, bottom, left);
TextureMapperLayer::clearViewportOffsets();
TextureMapperLayer::hasViewportOffsets();

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:418
&gt; +        int visibleEdgeRight = std::min(visibleContentsRect.maxX(), (int)(contentsSize.width()));

No c-style casts please :)

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h:26
&gt; +#include &quot;GraphicsLayerOffsetFromViewport.h&quot;

This doesn&apos;t feel right here. It should be in TextureMapperLayer. GraphicsLayerTextureMapper is a glue between GraphicsLayer and TextureMapperLayer, we shouldn&apos;t put calculations in there.

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:261
&gt; +    return length.isPercent() || length.isFixed();

you should just call length.isSpecified(), you don&apos;t need this function.
Also, we should add a comment that our solution doesn&apos;t work with calculated values. I&apos;m not sure whether calc() and fixed are

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:270
&gt; +    RenderLayerBacking* backing = renderLayer-&gt;backing();
&gt; +    if (backing) {
&gt; +        RenderStyle* style = renderLayer-&gt;renderer()-&gt;style();
&gt; +        if (style) {
&gt; +            if (renderLayer-&gt;renderer()-&gt;isPositioned() &amp;&amp; renderLayer-&gt;renderer()-&gt;style()-&gt;position() == FixedPosition &amp;&amp; renderLayer-&gt;renderer()-&gt;container()-&gt;isRenderView()) {

Use multiple functions with early returns instead of this indentation inflation

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:271
&gt; +                WebGraphicsLayer* graphicsLayer = static_cast&lt;WebGraphicsLayer*&gt;(backing-&gt;graphicsLayer());

There&apos;s a toWebGraphicsLayer function.

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:307
&gt; +void LayerTreeHostQt::syncFixedLayers()
&gt; +{

You should return early if frameView returns false from hasFixedObjects(), and cancel all existing layers.

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:308
&gt; +    RenderLayer* rootRenderLayer = m_webPage-&gt;mainFrame()-&gt;contentRenderer()-&gt;compositor()-&gt;rootRenderLayer();

Can any element in this chain be null?
Maybe adding some asserts would be prudent, that way we can detect that in debug mode.

&gt; Tools/MiniBrowser/qt/qml/FilePicker.qml:26
&gt; +/*
&gt; +import Qt.labs.folderlistmodel 1.0

Unrelated leftover :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593020</commentid>
    <comment_count>23</comment_count>
      <attachid>134995</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-01 05:41:11 -0700</bug_when>
    <thetext>Created attachment 134995
Patch

This patch has a somewhat different approach. It does not pass Length information to the UI, and relies on the web process to calculate the position. This patch still passes information about which edges have fixed position.

TextureMapperLayer::adjustedScrollOffset does 2 things now:
1. During scroll overshoot, we want the fixed layer to move with the edge only if it is fixed to that edge. so it checks and adjusts for that.(Same behavior as iOS5).
2. Due to async nature of the messages, during scrolling, the UI and the web process might use different scroll offsets, so it checks and compensates for that too.

Currently, when we zoom, fixed position elements are not positioned correctly, and this patch does _not_ address that behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594094</commentid>
    <comment_count>24</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-02 17:53:35 -0700</bug_when>
    <thetext>Agreed with Noam on IRC that the initial patch will not handle overshoot, I&apos;ll upload an update soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594144</commentid>
    <comment_count>25</comment_count>
      <attachid>135260</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-02 19:27:38 -0700</bug_when>
    <thetext>Created attachment 135260
Patch.

Removed special handling for overshoot, will add it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594160</commentid>
    <comment_count>26</comment_count>
      <attachid>135263</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-02 20:10:26 -0700</bug_when>
    <thetext>Created attachment 135263
Patch.

Reduce the amount of offset calculation for each paint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594166</commentid>
    <comment_count>27</comment_count>
      <attachid>135263</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-02 20:28:02 -0700</bug_when>
    <thetext>Comment on attachment 135263
Patch.

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

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h:105
&gt; +    IntPoint scrollOffset() const { return m_scrollOffset; }
&gt; +    void setScrollOffset(const IntPoint&amp; offset) { m_scrollOffset = offset; }
&gt; +
&gt; +    IntRect visibleContentsRect() const { return m_visibleContentsRect; }
&gt; +    void setVisibleContentsRect(const IntRect&amp; rect) { m_visibleContentsRect = rect; }
&gt; +
&gt; +    FloatSize contentsSize() const { return m_contentsSize; }
&gt; +    void setContentsSize(const FloatSize&amp; size) { m_contentsSize = size; }
&gt; +

Do you really need all of this for all the fixed layers?
Sounds like you need all those variables once for the whole tree, and add it to the layer position when you calculate the transform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594363</commentid>
    <comment_count>28</comment_count>
      <attachid>135263</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-03 04:11:13 -0700</bug_when>
    <thetext>Comment on attachment 135263
Patch.

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        When the setting acceleratedCompositingForFixedPositionEnabled is true, we need to upadte

update

Couldn&apos;t the method be called something like userLayersForFixedElements or similar.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:517
&gt; +FloatPoint TextureMapperLayer::normalizedScrollOffset(const IntPoint&amp; webScrollOffset)

web? This doesn&apos;t tell me whethre this is in CSS coords or not.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:520
&gt; +    float webScrollPositionX = std::max(webScrollOffset.x(), 0);
&gt; +    webScrollPositionX = std::min(webScrollPositionX, m_contentsSize.width() - m_visibleContentsRect.width());

isn&apos;t there something like qBound?

This is offset from what? current position? because if so, then it should be possible to be negative. Or is this just scroll position?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:538
&gt; +    float uiScrollPositionX = std::max(m_visibleContentsRect.x(), 0);

What value does ui add here?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:539
&gt; +    uiScrollPositionX = std::min(uiScrollPositionX, m_contentsSize.width() - m_visibleContentsRect.width());

I have seen similar code elsewhere

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.cpp:38
&gt; +    encoder-&gt;encode(CoreIPC::In(scrollOffset));

scrollPosition?

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:115
&gt; +    WebCore::IntPoint scrollOffset;

an offset would be IntSize where as a position would be IntPoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594397</commentid>
    <comment_count>29</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-03 05:13:20 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 135263 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135263&amp;action=review
&gt; 
Thank you for the review :)
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        When the setting acceleratedCompositingForFixedPositionEnabled is true, we need to upadte
&gt; 
&gt; update
&gt; 
oops :)

&gt; Couldn&apos;t the method be called something like userLayersForFixedElements or similar.
&gt; 
acceleratedCompositingForFixedPositionEnabled is consistent with other settings for accelerated composition. If we choose to rename it, it probably should not go with this patch.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:517
&gt; &gt; +FloatPoint TextureMapperLayer::normalizedScrollOffset(const IntPoint&amp; webScrollOffset)
&gt; 
&gt; web? This doesn&apos;t tell me whethre this is in CSS coords or not.
&gt; 
I a not passing CSS information anymore. This is strictly about the scroll offset that the web process uses. You are right, position is better than offset here.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:520
&gt; &gt; +    float webScrollPositionX = std::max(webScrollOffset.x(), 0);
&gt; &gt; +    webScrollPositionX = std::min(webScrollPositionX, m_contentsSize.width() - m_visibleContentsRect.width());
&gt; 
&gt; isn&apos;t there something like qBound?
&gt; 
This file is used by GTK folks too.

&gt; This is offset from what? current position? because if so, then it should be possible to be negative. Or is this just scroll position?
&gt; 
yes, this should be called position, not offset.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:538
&gt; &gt; +    float uiScrollPositionX = std::max(m_visibleContentsRect.x(), 0);
&gt; 
&gt; What value does ui add here?
&gt; 
The purpose of this method is to compensate for the difference in scroll position between the UI process and the web process. The difference is due to the async nature of the IPC messages. I need to distinguish between the position in the UI side, and the position in the web side.

&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:539
&gt; &gt; +    uiScrollPositionX = std::min(uiScrollPositionX, m_contentsSize.width() - m_visibleContentsRect.width());
&gt; 
&gt; I have seen similar code elsewhere
&gt; 
&gt; &gt; Source/WebKit2/Shared/WebLayerTreeInfo.cpp:38
&gt; &gt; +    encoder-&gt;encode(CoreIPC::In(scrollOffset));
&gt; 
&gt; scrollPosition?
&gt; 
ok
&gt; &gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:115
&gt; &gt; +    WebCore::IntPoint scrollOffset;
&gt; 
&gt; an offset would be IntSize where as a position would be IntPoint
ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594454</commentid>
    <comment_count>30</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-04-03 07:10:53 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 135263 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135263&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h:105
&gt; &gt; +    IntPoint scrollOffset() const { return m_scrollOffset; }
&gt; &gt; +    void setScrollOffset(const IntPoint&amp; offset) { m_scrollOffset = offset; }
&gt; &gt; +
&gt; &gt; +    IntRect visibleContentsRect() const { return m_visibleContentsRect; }
&gt; &gt; +    void setVisibleContentsRect(const IntRect&amp; rect) { m_visibleContentsRect = rect; }
&gt; &gt; +
&gt; &gt; +    FloatSize contentsSize() const { return m_contentsSize; }
&gt; &gt; +    void setContentsSize(const FloatSize&amp; size) { m_contentsSize = size; }
&gt; &gt; +
&gt; 
&gt; Do you really need all of this for all the fixed layers?
&gt; Sounds like you need all those variables once for the whole tree, and add it to the layer position when you calculate the transform.

Agreed. This is how we do on the blackberry port. See http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp#L512 , and @ppk and friends say it is the &quot;best&quot; fixed position handling in mobile webkit-based browsers (don&apos;t get me wrong, just for you to try on different devices :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595113</commentid>
    <comment_count>31</comment_count>
      <attachid>135479</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-03 18:37:26 -0700</bug_when>
    <thetext>Created attachment 135479
Patch.

Let WebLayerTreeRenderer do the scrollPosition calculation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595114</commentid>
    <comment_count>32</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-03 18:38:18 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #27)

&gt; Agreed. This is how we do on the blackberry port. See http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp#L512 , and @ppk and friends say it is the &quot;best&quot; fixed position handling in mobile webkit-based browsers (don&apos;t get me wrong, just for you to try on different devices :)

I just tested http://waplabdc.nokia-boston.com/browser/users/yaharon/pos.html on my husband&apos;s blackberry torch. As I started scrolling, the fixed layers were thrown off and then came back to place. The reason I want to account for the delta between web process and ui process is to avoid that side effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595180</commentid>
    <comment_count>33</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-04-03 20:13:07 -0700</bug_when>
    <thetext>
&gt; I just tested http://waplabdc.nokia-boston.com/browser/users/yaharon/pos.html on my husband&apos;s blackberry torch. As I started scrolling, the fixed layers were thrown off and then came back to place. The reason I want to account for the delta between web process and ui process is to avoid that side effect.

Depending on what torch we are talking here, it does not have fixed position handled at all. Will test tomorrow and let you know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595199</commentid>
    <comment_count>34</comment_count>
      <attachid>135479</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-03 20:30:58 -0700</bug_when>
    <thetext>Comment on attachment 135479
Patch.

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

OK, it&apos;s going in the right direction, but still too much going on per-layer.
The only thing needed to be serialized per-layer is a flag saying whether or not it&apos;s fixed to the viewport. In addition, TextureMapperLayer should have a scrollOffset which is calculated once for all fixed layers.

I feel like you&apos;re making some of the choices here based on not wanting to add new IPC messages... That doesn&apos;t feel right; We should add an IPC message for when the scroll offset changes, and keep the layer-specific info to the data that&apos;s actually layer-specific.

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:115
&gt; +    WebCore::IntPoint scrollPosition;

I don&apos;t see why you need to pass this for each layer. Pass it once in its own message (something like didChangeFixedObjectScrollOffset), and use the same offset for all layers.

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:78
&gt; +    float scrollPositionX = std::max(scrollPosition.x(), 0.0f);

0.0f -&gt; 0

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:81
&gt; +    float scrollPositionY = std::max(scrollPosition.y(), 0.0f);

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595559</commentid>
    <comment_count>35</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-04-04 08:29:47 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #30)
&gt; &gt; (In reply to comment #27)
&gt; 
&gt; &gt; Agreed. This is how we do on the blackberry port. See http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp#L512 , and @ppk and friends say it is the &quot;best&quot; fixed position handling in mobile webkit-based browsers (don&apos;t get me wrong, just for you to try on different devices :)
&gt; 
&gt; I just tested http://waplabdc.nokia-boston.com/browser/users/yaharon/pos.html on my husband&apos;s blackberry torch. As I started scrolling, the fixed layers were thrown off and then came back to place. The reason I want to account for the delta between web process and ui process is to avoid that side effect.

Ok, just tested on a Torch 2 device I have. It does not work perfect, as it does not run the latest code. Playbook does instead, and works perfectly. This runs the code that is upstreamed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596233</commentid>
    <comment_count>36</comment_count>
      <attachid>135747</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-04 19:30:23 -0700</bug_when>
    <thetext>Created attachment 135747
Patch.

Address comment #34.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596559</commentid>
    <comment_count>37</comment_count>
      <attachid>135747</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-05 07:49:19 -0700</bug_when>
    <thetext>Comment on attachment 135747
Patch.

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

This looks much better, but it doesn&apos;t cover cases where a fixed layer changes style and becomes un-fixed. I think the test should cover that as well.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:514
&gt; +void TextureMapperLayer::setScrollPositionDelta(const IntPoint&amp; delta)

Delta -&gt; Offset

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:518
&gt; +    m_transform.setPosition(m_state.pos + m_scrollPositionDelta);

Add a scrollOffset to LayerTransform instead of making this calculation here.
This would break when the position changes without the delta changing.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h:130
&gt; +    bool fixedToViewport() const { return m_state.fixedToViewport; }
&gt; +    void setFixedToViewport(bool isFixed) { m_state.fixedToViewport = isFixed; }

You&apos;re not using this for anything.

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.cpp:141
&gt; +    m_renderer-&gt;didUpdateScrollPosition(position);

This doesn&apos;t look thread safe. It should go through
dispatchUpdate(bind(...))

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:78
&gt; +    IntSize size(static_cast&lt;int&gt;(contentSize.width()), static_cast&lt;int&gt;(contentSize.height()));

You don&apos;t need the static_casts.

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:187
&gt; +void WebLayerTreeRenderer::adjustPositionForAllFixedLayers()

adjustPositionForFixedLayers

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:189
&gt; +    IntPoint scrollPosition = normalizedScrollPosition(m_visibleContentsRect.location(), m_visibleContentsRect, m_contentsSize);

Return early if m_fixedLayers is empty

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:228
&gt; +        m_fixedLayers.remove(layerInfo.id);

Here you should also reset the delta/offset... I&apos;m not sure you&apos;re testing this with a layer that&apos;s fixed and becoming un-fixed.

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.h:120
&gt; +    WebCore::IntPoint m_webScrollPosition;
&gt; +    WebCore::IntPoint m_pendingWebScrollPosition;

m_renderedContentsScrollPosition
m_pendingRenderedContentsScrollPosition

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:305
&gt; +    if (!m_webPage-&gt;mainFrame()-&gt;view()-&gt;hasFixedObjects())
&gt; +        return;

You can only return here if this was true in the previous sync; otherwise if you&apos;ve had one layer that was fixed, and then it became unfixed, you wouldn&apos;t sync that change.

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:507
&gt; +        m_scrollPositionOfLastUpdateWasSent = false;

m_shouldSendScrollPositionUpdate = true

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h:116
&gt; +    bool m_scrollPositionOfLastUpdateWasSent;

m_shouldSendScrollPositionUpdate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596790</commentid>
    <comment_count>38</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-05 12:20:34 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 135747 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135747&amp;action=review
&gt; 
&gt; This looks much better, but it doesn&apos;t cover cases where a fixed layer changes style and becomes un-fixed. I think the test should cover that as well.
&gt; 
As soon as a fixed layer becomes un-fixed it is deleted. I don&apos;t think I need to handle that case other than removing it from m_fixedLayers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596822</commentid>
    <comment_count>39</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-05 12:58:13 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; &gt; (From update of attachment 135747 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135747&amp;action=review
&gt; &gt; 
&gt; &gt; This looks much better, but it doesn&apos;t cover cases where a fixed layer changes style and becomes un-fixed. I think the test should cover that as well.
&gt; &gt; 
&gt; As soon as a fixed layer becomes un-fixed it is deleted. I don&apos;t think I need to handle that case other than removing it from m_fixedLayers.

OK. This deserves a comment :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596957</commentid>
    <comment_count>40</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-05 15:11:11 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 135747 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135747&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:514
&gt; &gt; +void TextureMapperLayer::setScrollPositionDelta(const IntPoint&amp; delta)
&gt; 
&gt; Delta -&gt; Offset
This is actually a delta and not an offset. Since you asked me to do the calculation only once, and set to all layers, I calculated the delta between scroll offset of the web process and scroll offset of the ui process and add that to the position of the transform.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:518
&gt; &gt; +    m_transform.setPosition(m_state.pos + m_scrollPositionDelta);
&gt; 
&gt; Add a scrollOffset to LayerTransform instead of making this calculation here.
&gt; This would break when the position changes without the delta changing.
&gt; 
If the position changes, we will sync the layers again and will re-calculate. I will add a test that changes the position dynamically, to show that this is not breaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596977</commentid>
    <comment_count>41</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-05 15:55:29 -0700</bug_when>
    <thetext>&gt; &gt; Delta -&gt; Offset
&gt; This is actually a delta and not an offset. Since you asked me to do the calculation only once, and set to all layers, I calculated the delta between scroll offset of the web process and scroll offset of the ui process and add that to the position of the transform.

Fair enough. Let&apos;s keep as is.


&gt; If the position changes, we will sync the layers again and will re-calculate. I will add a test that changes the position dynamically, to show that this is not breaking.
You&apos;re right :)

Let&apos;s see how this look likes with my other comments, I think this is looking better and better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597166</commentid>
    <comment_count>42</comment_count>
      <attachid>135972</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-05 20:13:24 -0700</bug_when>
    <thetext>Created attachment 135972
Patch.

Changing variable names and using bind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597310</commentid>
    <comment_count>43</comment_count>
      <attachid>135972</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-06 05:46:53 -0700</bug_when>
    <thetext>Comment on attachment 135972
Patch.

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

&gt; ChangeLog:3
&gt; +        Initial support for fixed position elements in Qt WebKit2

As you call it initial you should state what is supported and what is pending.

&gt; Source/WebCore/page/FrameView.cpp:1707
&gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled())
&gt; +            updateFixedElementsAfterScrolling();

Maybe we should do the check inside the method instead?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:516
&gt; +void TextureMapperLayer::setScrollPositionDelta(const IntPoint&amp; delta)
&gt; +{
&gt; +    m_scrollPositionDelta = delta;

Maybe this method deserves a comment?

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.messages.in:31
&gt; +    DidUpdateScrollPosition(WebCore::IntPoint position)

I believe WK2 mostly uses Change... like DidChangeScrollPosition

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:76
&gt; +static IntPoint normalizedScrollPosition(const IntPoint&amp; scrollPosition, const IntRect&amp; visibleContentRect, const FloatSize&amp; contentSize)

boundedScrollPosition?

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:267
&gt; +    // These conditions must match the condisions in RenderLayerCompositor::requiresCompositingForPosition.

conditions*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598058</commentid>
    <comment_count>44</comment_count>
      <attachid>136157</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-08 13:34:31 -0700</bug_when>
    <thetext>Created attachment 136157
Patch

Address comment #43, except for the change in FrameView.cpp.

&gt; &gt; Source/WebCore/page/FrameView.cpp:1707
&gt; &gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled())
&gt; &gt; +            updateFixedElementsAfterScrolling();
&gt; 
&gt; Maybe we should do the check inside the method instead?

The default in chromium is to not create a graphics layer for fixed elements and moving the check will effectively revert http://trac.webkit.org/changeset/111139 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598077</commentid>
    <comment_count>45</comment_count>
      <attachid>136157</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-08 17:21:08 -0700</bug_when>
    <thetext>Comment on attachment 136157
Patch

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

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:112
&gt; +    adjustPositionForFixedLayers();
&gt;      syncRemoteContent();

syncRemoteContent might change the position of layers, and also the renderedContentsScrollPosition, both of which adjustPositionForFixedLayers relies on. Sounds like things can go out of sync there.
Shouldn&apos;t the order be swapped?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598098</commentid>
    <comment_count>46</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-08 19:03:19 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 136157 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136157&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:112
&gt; &gt; +    adjustPositionForFixedLayers();
&gt; &gt;      syncRemoteContent();
&gt; 
&gt; syncRemoteContent might change the position of layers, and also the renderedContentsScrollPosition, both of which adjustPositionForFixedLayers relies on. Sounds like things can go out of sync there.
&gt; Shouldn&apos;t the order be swapped?

syncRemoteContent is also called from updatePaintNode, so I did not observe this issue :) I will make the change in the next version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598114</commentid>
    <comment_count>47</comment_count>
      <attachid>136157</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-08 20:58:57 -0700</bug_when>
    <thetext>Comment on attachment 136157
Patch

Apart from my comment, this patch looks good to me. Kenneth, would you look at it as well to make sure I didn&apos;t miss something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598218</commentid>
    <comment_count>48</comment_count>
      <attachid>136157</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-04-09 03:39:35 -0700</bug_when>
    <thetext>Comment on attachment 136157
Patch

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

&gt; Source/WebCore/page/FrameView.cpp:1707
&gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled())
&gt; +            updateFixedElementsAfterScrolling();

Is this setting really necessary? If we always enable it when using fixed-layout, it seems redundant. Would it be possible to instead check if accelerated compositing is enabled and the frameview has delegates-scrolling and fixed layout size set?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598235</commentid>
    <comment_count>49</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-09 05:23:52 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 136157 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136157&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:1707
&gt; &gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled())
&gt; &gt; +            updateFixedElementsAfterScrolling();
&gt; 
&gt; Is this setting really necessary? If we always enable it when using fixed-layout, it seems redundant. Would it be possible to instead check if accelerated compositing is enabled and the frameview has delegates-scrolling and fixed layout size set?

Sure, I can do that. Can you please explain the benefits of the change you are proposing? IMO, it is clearer as it is now, and if someone downstream decides at some point to not enable the setting, there is only one place that they need to change (in WebPage.cpp).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598246</commentid>
    <comment_count>50</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 05:54:02 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/page/FrameView.cpp:1707
&gt; &gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled())
&gt; &gt; +            updateFixedElementsAfterScrolling();
&gt; 
&gt; Is this setting really necessary? If we always enable it when using fixed-layout, it seems redundant. Would it be possible to instead check if accelerated compositing is enabled and the frameview has delegates-scrolling and fixed layout size set?

Not for this patch, please. We can do this at a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598249</commentid>
    <comment_count>51</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-04-09 06:05:43 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #48)
&gt; &gt; (From update of attachment 136157 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136157&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/FrameView.cpp:1707
&gt; &gt; &gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled())
&gt; &gt; &gt; +            updateFixedElementsAfterScrolling();
&gt; &gt; 
&gt; &gt; Is this setting really necessary? If we always enable it when using fixed-layout, it seems redundant. Would it be possible to instead check if accelerated compositing is enabled and the frameview has delegates-scrolling and fixed layout size set?
&gt; 
&gt; Sure, I can do that. Can you please explain the benefits of the change you are proposing? IMO, it is clearer as it is now, and if someone downstream decides at some point to not enable the setting, there is only one place that they need to change (in WebPage.cpp).

It is only because I know from recent experience of trying to make sense of all the settings in frameview, that there are too many that all indicates the same thing (fixed layout, resize-to-content, delegates scrolling). This is not only redundant but very confusing to new comers. But feel free to keep it for now and remove it later when the feature is more stable and better tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598261</commentid>
    <comment_count>52</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-09 06:59:15 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #48)
&gt; &gt; (From update of attachment 136157 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136157&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/FrameView.cpp:1707
&gt; &gt; &gt; +        if (m_frame-&gt;page()-&gt;settings()-&gt;acceleratedCompositingForFixedPositionEnabled())
&gt; &gt; &gt; +            updateFixedElementsAfterScrolling();
&gt; &gt; 
&gt; &gt; Is this setting really necessary? If we always enable it when using fixed-layout, it seems redundant. Would it be possible to instead check if accelerated compositing is enabled and the frameview has delegates-scrolling and fixed layout size set?
&gt; 
&gt; Sure, I can do that. Can you please explain the benefits of the change you are proposing? IMO, it is clearer as it is now, and if someone downstream decides at some point to not enable the setting, there is only one place that they need to change (in WebPage.cpp).

I believe that Chrome for Android uses fixed layouting but does not delegate scrolling. This mostly relates to the delegation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598262</commentid>
    <comment_count>53</comment_count>
      <attachid>136157</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-09 07:03:41 -0700</bug_when>
    <thetext>Comment on attachment 136157
Patch

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

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.h:120
&gt; +    WebCore::IntPoint m_pendingRenderedContentsScrollPosition;

how can it be pending and rendered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598269</commentid>
    <comment_count>54</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 07:26:44 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (From update of attachment 136157 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136157&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.h:120
&gt; &gt; +    WebCore::IntPoint m_pendingRenderedContentsScrollPosition;
&gt; 
&gt; how can it be pending and rendered?

It applies to the content rendered in the web process, and is pending flush in the ui  process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598273</commentid>
    <comment_count>55</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-09 07:29:29 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #53)
&gt; &gt; (From update of attachment 136157 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136157&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.h:120
&gt; &gt; &gt; +    WebCore::IntPoint m_pendingRenderedContentsScrollPosition;
&gt; &gt; 
&gt; &gt; how can it be pending and rendered?
&gt; 
&gt; It applies to the content rendered in the web process, and is pending flush in the ui  process.

Yeah I guessed that, but wanted to point out that the names are not that clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598784</commentid>
    <comment_count>56</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-09 17:22:36 -0700</bug_when>
    <thetext>hey, can we agree to keep the variable name as Noam suggested and if Kenneth finds a more suitable name, he can propose that in a separate patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598787</commentid>
    <comment_count>57</comment_count>
      <attachid>136157</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-04-09 17:26:30 -0700</bug_when>
    <thetext>Comment on attachment 136157
Patch

This is fine with me for now. If we have additional improvement, we can make them on top of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598843</commentid>
    <comment_count>58</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-04-09 18:35:18 -0700</bug_when>
    <thetext>
&gt; I believe that Chrome for Android uses fixed layouting but does not delegate scrolling. This mostly relates to the delegation.

Same for blackberry port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599200</commentid>
    <comment_count>59</comment_count>
      <attachid>136441</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-04-10 05:56:29 -0700</bug_when>
    <thetext>Created attachment 136441
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599535</commentid>
    <comment_count>60</comment_count>
      <attachid>136441</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-10 12:47:26 -0700</bug_when>
    <thetext>Comment on attachment 136441
Patch for landing.

Rejecting attachment 136441 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ne).
Hunk #4 succeeded at 260 (offset 1 line).
Hunk #5 succeeded at 499 (offset 1 line).
1 out of 5 hunks FAILED -- saving rejects to file Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp.rej
patching file Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.h
Hunk #1 succeeded at 76 with fuzz 2 (offset 1 line).
Hunk #2 succeeded at 120 (offset 6 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/12379597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599854</commentid>
    <comment_count>61</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-04-10 17:44:35 -0700</bug_when>
    <thetext>Committed r113791: &lt;http://trac.webkit.org/changeset/113791&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133057</attachid>
            <date>2012-03-21 09:17:58 -0700</date>
            <delta_ts>2012-03-21 09:21:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>26919</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTIxICBZYWVsIEFo
YXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZpeGVkIHBv
c2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2hlbiB0aGUgc2V0dGluZyBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgaXMgdHJ1ZSwKKyAgICAgICAgcGFzcyB0aGUgZml4
ZWQgcG9zaXRpb24gaW5mb3JtYXRpb24gdXAgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIHRoYXQgaXQg
Y2FuIHJlLXBvc2l0aW9uCisgICAgICAgIHRoZSBmaXhlZCBwb3NpdGlvbiBsYXllciBhcyBuZWVk
ZWQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6c2V0Rml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjpmaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVT
ZWxmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmg6CisgICAgICAgIChTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
TGF5ZXI6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdy
YXBoaWNzTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDMtMjEgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEhlYXBTbmFwc2hv
dDogbW92ZSBhbGwgYnVpbGRlcnMgYW5kIGNhbGN1bGF0aW9uIGNhbGxzIHRvIEhlYXBTbmFwc2hv
dC5faW5pdCBmdW5jdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlz
aW9uIDExMTUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcwMSw4ICsxNzAxLDEzIEBACiB7CiAgICAgSW50U2l6ZSBvZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKICAgICBTY3JvbGxWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVj
dCh2aXNpYmxlQ29udGVudFJlY3QpOwotICAgIGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkp
CisgICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkgeworICAgICAgICBpZiAobV9mcmFt
ZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3Np
dGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgdXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Ny
b2xsaW5nKCk7CisgICAgICAgICAgICByZXBhaW50Rml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5n
KCk7CisgICAgICAgIH0KICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgfQog
ICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNiAr
ODMsNyBAQAogICAgICwgbV9hY2NlbGVyYXRlc0RyYXdpbmcoZmFsc2UpCiAgICAgLCBtX21haW50
YWluc1BpeGVsQWxpZ25tZW50KGZhbHNlKQogICAgICwgbV9hcHBsaWVzUGFnZVNjYWxlKGZhbHNl
KQorICAgICwgbV9maXhlZFBvc2l0aW9uKGZhbHNlKQogICAgICwgbV9wYWludGluZ1BoYXNlKEdy
YXBoaWNzTGF5ZXJQYWludEFsbCkKICAgICAsIG1fY29udGVudHNPcmllbnRhdGlvbihDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzVG9wRG93bikKICAgICAsIG1fcGFyZW50KDApCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lv
biAxMTE1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtMjIxLDggKzIyMiw4
IEBACiAgICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIG1fcHJvcGVydHk7CiB9OwogCit0eXBlZGVmIEhh
c2hNYXA8aW50LCBMZW5ndGg+IFBvc2l0aW9uSW5mb3JtYXRpb25NYXA7CiAKLQogLy8gR3JhcGhp
Y3NMYXllciBpcyBhbiBhYnN0cmFjdGlvbiBmb3IgYSByZW5kZXJpbmcgc3VyZmFjZSB3aXRoIGJh
Y2tpbmcgc3RvcmUsCiAvLyB3aGljaCBtYXkgaGF2ZSBhc3NvY2lhdGVkIHRyYW5zZm9ybWF0aW9u
IGFuZCBhbmltYXRpb25zLgogCkBAIC00MTYsNiArNDE3LDEwIEBACiAgICAgdmlydHVhbCB2b2lk
IGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIHsgfQogICAgIHZvaWQgbm90ZURldmlj
ZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAKKyAgICB2
b2lkIHNldEZpeGVkUG9zaXRpb24oYm9vbCBmaXhlZCkgeyBtX2ZpeGVkUG9zaXRpb24gPSBmaXhl
ZDsgfQorICAgIGJvb2wgZml4ZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRQb3Np
dGlvbjsgfQorCisgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcCYgIGZpeGVkUG9zaXRpb25JbmZv
cm1hdGlvbigpIHsgcmV0dXJuIG1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uOyB9CiAgICAgLy8g
U29tZSBjb21wb3NpdGluZyBzeXN0ZW1zIG1heSBkbyBpbnRlcm5hbCBiYXRjaGluZyB0byBzeW5j
aHJvbml6ZSBjb21wb3NpdGluZyB1cGRhdGVzCiAgICAgLy8gd2l0aCB1cGRhdGVzIGRyYXduIGlu
dG8gdGhlIHdpbmRvdy4gVGhlc2UgbWV0aG9kcyBmbHVzaCBpbnRlcm5hbCBiYXRjaGVkIHN0YXRl
IG9uIHRoaXMgbGF5ZXIKICAgICAvLyBhbmQgZGVzY2VuZGFudCBsYXllcnMsIGFuZCB0aGlzIGxh
eWVyIG9ubHkuCkBAIC00OTksNiArNTA0LDcgQEAKICAgICBib29sIG1fYWNjZWxlcmF0ZXNEcmF3
aW5nIDogMTsKICAgICBib29sIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQgOiAxOwogICAgIGJv
b2wgbV9hcHBsaWVzUGFnZVNjYWxlIDogMTsgLy8gU2V0IGZvciB0aGUgbGF5ZXIgd2hpY2ggaGFz
IHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQgdG8gaXQuCisgICAgYm9vbCBtX2ZpeGVkUG9zaXRpb24g
OiAxOwogCiAgICAgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgbV9wYWludGluZ1BoYXNlOwog
ICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBtX2NvbnRlbnRzT3JpZW50YXRp
b247IC8vIGFmZmVjdHMgb3JpZW50YXRpb24gb2YgbGF5ZXIgY29udGVudHMKQEAgLTUxNyw2ICs1
MjMsOCBAQAogCiAgICAgaW50IG1fcmVwYWludENvdW50OwogCisgICAgUG9zaXRpb25JbmZvcm1h
dGlvbk1hcCBtX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbjsKKwogI2lmIFBMQVRGT1JNKFFUKSB8
fCBQTEFURk9STShHVEspCiAgICAgc3RhdGljIEdyYXBoaWNzTGF5ZXI6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5KiBzX2dyYXBoaWNzTGF5ZXJGYWN0b3J5OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmNwcAkocmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyOCw5ICs0MjgsMTQgQEAKICAgICBtX3N0YXRlLmZpbHRlcnMgPSBncmFwaGljc0xh
eWVyLT5maWx0ZXJzKCk7CiAjZW5kaWYKIAorICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6Oml0
ZXJhdG9yIGVuZCA9IGdyYXBoaWNzTGF5ZXItPmZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbigpLmVu
ZCgpOworICAgIGZvciAoUG9zaXRpb25JbmZvcm1hdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBncmFw
aGljc0xheWVyLT5maXhlZFBvc2l0aW9uSW5mb3JtYXRpb24oKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIG1fc3RhdGUubV9maXhlZFBvc2l0aW9uSW5mb3JtYXRpb24uYWRkKGl0
LT5maXJzdCwgaXQtPnNlY29uZCk7CisKICAgICBtX3N0YXRlLm5lZWRzRGlzcGxheSA9IG1fc3Rh
dGUubmVlZHNEaXNwbGF5IHx8IGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlzcGxheSgpOwogICAgIGlm
ICghbV9zdGF0ZS5uZWVkc0Rpc3BsYXkpCiAgICAgICAgIG1fc3RhdGUubmVlZHNEaXNwbGF5UmVj
dC51bml0ZShncmFwaGljc0xheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCkpOworICAgIG1fc3RhdGUu
Zml4ZWRQb3NpdGlvbiA9IGdyYXBoaWNzTGF5ZXItPmZpeGVkUG9zaXRpb24oKTsKICAgICBtX2Nv
bnRlbnRzTGF5ZXIgPSBncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCk7CiAKICAgICBtX3Ry
YW5zZm9ybS5zZXRQb3NpdGlvbihtX3N0YXRlLnBvcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5oCShyZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2
ICsxODcsNyBAQAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAgIEZpbHRlck9wZXJh
dGlvbnMgZmlsdGVyczsKICNlbmRpZgorICAgICAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFwIG1f
Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uOwogCiAgICAgICAgIGJvb2wgcHJlc2VydmVzM0QgOiAx
OwogICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwpAQCAtMTk3LDYgKzE5OCw3IEBACiAg
ICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OiAxOwogICAgICAgICBib29sIG1pZ2h0SGF2ZU92ZXJs
YXBzIDogMTsKICAgICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7CisgICAgICAgIGJvb2wgZml4ZWRQ
b3NpdGlvbiA6IDE7CiAgICAgICAgIFN0YXRlKCkKICAgICAgICAgICAgIDogb3BhY2l0eSgxLmYp
CiAgICAgICAgICAgICAsIG1hc2tMYXllcigwKQpAQCAtMjEwLDYgKzIxMiw3IEBACiAgICAgICAg
ICAgICAsIG5lZWRzRGlzcGxheSh0cnVlKQogICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFw
cyhmYWxzZSkKICAgICAgICAgICAgICwgbmVlZHNSZXBhaW50KGZhbHNlKQorICAgICAgICAgICAg
LCBmaXhlZFBvc2l0aW9uKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJ
KHJldmlzaW9uIDExMTUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDUsNiArNDA1LDcgQEAKICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0UHJlc2VydmVzM0Qoc3R5bGUtPnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1T
dHlsZTNEUHJlc2VydmUzRCAmJiAhcmVuZGVyZXIoKS0+aGFzUmVmbGVjdGlvbigpKTsKICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShzdHlsZS0+YmFja2ZhY2VWaXNp
YmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5VmlzaWJsZSk7CisgICAgbV9ncmFwaGljc0xh
eWVyLT5zZXRGaXhlZFBvc2l0aW9uKHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHN0eWxl
LT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pOwogCiAgICAgUmVuZGVyTGF5ZXIqIGNvbXBB
bmNlc3RvciA9IG1fb3duaW5nTGF5ZXItPmFuY2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOwogICAg
IApAQCAtNTQyLDYgKzU0MywxOSBAQAogICAgIH0KIAogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
Q29udGVudHNSZWN0KGNvbnRlbnRzQm94KCkpOworCisgICAgaWYgKG1fZ3JhcGhpY3NMYXllci0+
Zml4ZWRQb3NpdGlvbigpKSB7CisgICAgICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXAmIG1hcCA9
IG1fZ3JhcGhpY3NMYXllci0+Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKCk7CisgICAgICAgIGlm
IChzdHlsZS0+dG9wKCkuaXNQZXJjZW50KCkgfHwgc3R5bGUtPnRvcCgpLmlzRml4ZWQoKSkKKyAg
ICAgICAgICAgIG1hcC5hZGQoQ1NTUHJvcGVydHlUb3AsIHN0eWxlLT50b3AoKSk7CisgICAgICAg
IGlmIChzdHlsZS0+cmlnaHQoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZS0+cmlnaHQoKS5pc0ZpeGVk
KCkpCisgICAgICAgICAgICBtYXAuYWRkKENTU1Byb3BlcnR5UmlnaHQsIHN0eWxlLT5yaWdodCgp
KTsKKyAgICAgICAgaWYgKHN0eWxlLT5ib3R0b20oKS5pc1BlcmNlbnQoKSB8fCBzdHlsZS0+Ym90
dG9tKCkuaXNGaXhlZCgpKQorICAgICAgICAgICAgbWFwLmFkZChDU1NQcm9wZXJ0eUJvdHRvbSwg
c3R5bGUtPmJvdHRvbSgpKTsKKyAgICAgICAgaWYgKHN0eWxlLT5sZWZ0KCkuaXNQZXJjZW50KCkg
fHwgc3R5bGUtPmxlZnQoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBtYXAuYWRkKENTU1Byb3Bl
cnR5TGVmdCwgc3R5bGUtPmxlZnQoKSk7CisgICAgfQorCiAgICAgdXBkYXRlRHJhd3NDb250ZW50
KCk7CiAgICAgdXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAkocmV2aXNpb24g
MTExNTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiV2ViTGF5
ZXJUcmVlUmVuZGVyZXIuaCIKIAorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIkxheWVyQmFja2lu
Z1N0b3JlLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCkBAIC0xMTgsNiArMTE5
LDEyIEBACiAgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOwogICAgIH0KIAorICAgIGlmIChtX2ZpeGVkUG9zaXRpb25MYXllcnMu
c2l6ZSgpKSB7CisgICAgICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkUG9zaXRp
b25MYXllcnMuZW5kKCk7CisgICAgICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9m
aXhlZFBvc2l0aW9uTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IGl0LT5zZWNvbmQtPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAg
IH0KKwogICAgIGxheWVyLT5wYWludCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgp
OwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKQEAgLTE1NSwxMCArMTYyLDE3
IEBACiAgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoMCk7CiB9CiAKK3Zv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRz
U2l6ZTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvckFsbEZpeGVkUG9zaXRpb25MYXllcnMoKTsKK30K
Kwogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKIHsKICAgICBtX3Zpc2libGVDb250ZW50c1Jl
Y3QgPSByZWN0OwogICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOworICAgIGFkanVzdFBvc2l0
aW9uRm9yQWxsRml4ZWRQb3NpdGlvbkxheWVycygpOwogfQogCiB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjp1cGRhdGVWaWV3cG9ydCgpCkBAIC0xNjcsNiArMTgxLDU5IEBACiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdFByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCit2b2lkIFdlYkxheWVy
VHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBBU1NFUlQobGF5ZXItPmZpeGVkUG9zaXRp
b24oKSk7CisKKyAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFwJiBtYXAgPSBsYXllci0+Zml4ZWRQ
b3NpdGlvbkluZm9ybWF0aW9uKCk7CisgICAgZmxvYXQgYWRqdXN0ZWRYID0gbGF5ZXItPnBvc2l0
aW9uKCkueCgpOworICAgIGZsb2F0IGFkanVzdGVkWSA9IGxheWVyLT5wb3NpdGlvbigpLnkoKTsK
KyAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFwOjppdGVyYXRvciBsZWZ0ID0gbWFwLmZpbmQoQ1NT
UHJvcGVydHlMZWZ0KTsKKyAgICBpZiAobGVmdCAhPSBtYXAuZW5kKCkpIHsKKyAgICAgICAgaW50
IHZpc2libGVFZGdlTGVmdCA9IHN0ZDo6bWF4KG1fdmlzaWJsZUNvbnRlbnRzUmVjdC54KCksIDAp
OworICAgICAgICBpZiAobGVmdC0+c2Vjb25kLmlzUGVyY2VudCgpKQorICAgICAgICAgICAgYWRq
dXN0ZWRYID0gdmlzaWJsZUVkZ2VMZWZ0ICsgbGVmdC0+c2Vjb25kLmdldEZsb2F0VmFsdWUoKSAq
IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC53aWR0aCgpIC8gMTAwOworICAgICAgICBlbHNlIC8vIGl0
LT5zZWNvbmQuaXNGaXhlZCgpCisgICAgICAgICAgICBhZGp1c3RlZFggPSB2aXNpYmxlRWRnZUxl
ZnQgKyBsZWZ0LT5zZWNvbmQuZ2V0RmxvYXRWYWx1ZSgpICogbV9jb250ZW50c1NjYWxlOworICAg
IH0gZWxzZSB7CisgICAgICAgIGludCB2aXNpYmxlRWRnZVJpZ2h0ID0gc3RkOjptaW4obV92aXNp
YmxlQ29udGVudHNSZWN0Lm1heFgoKSwgKGludCkobV9jb250ZW50c1NpemUud2lkdGgoKSkpOwor
ICAgICAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFwOjppdGVyYXRvciByaWdodCA9IG1hcC5maW5k
KENTU1Byb3BlcnR5UmlnaHQpOworICAgICAgICBpZiAocmlnaHQhPSBtYXAuZW5kKCkpIHsKKyAg
ICAgICAgICAgIGlmICAocmlnaHQtPnNlY29uZC5pc1BlcmNlbnQoKSkKKyAgICAgICAgICAgICAg
ICBhZGp1c3RlZFggPSB2aXNpYmxlRWRnZVJpZ2h0IC0gcmlnaHQtPnNlY29uZC5nZXRGbG9hdFZh
bHVlKCkgKiBtX3Zpc2libGVDb250ZW50c1JlY3Qud2lkdGgoKSAvIDEwMCAtIGxheWVyLT5zaXpl
KCkud2lkdGgoKTsKKyAgICAgICAgICAgIGVsc2UgLy8gaXQtPnNlY29uZC5pc0ZpeGVkKCkKKyAg
ICAgICAgICAgICAgICBhZGp1c3RlZFggPSB2aXNpYmxlRWRnZVJpZ2h0IC0gcmlnaHQtPnNlY29u
ZC5nZXRGbG9hdFZhbHVlKCkgKiBtX2NvbnRlbnRzU2NhbGUgLSBsYXllci0+c2l6ZSgpLndpZHRo
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFwOjppdGVy
YXRvciB0b3AgPSBtYXAuZmluZChDU1NQcm9wZXJ0eVRvcCk7CisgICAgaWYgKHRvcCAhPSBtYXAu
ZW5kKCkpIHsKKyAgICAgICAgaW50IHZpc2libGVFZGdlVG9wID0gc3RkOjptYXgobV92aXNpYmxl
Q29udGVudHNSZWN0LnkoKSwgMCk7CisgICAgICAgIGlmICh0b3AtPnNlY29uZC5pc1BlcmNlbnQo
KSkKKyAgICAgICAgICAgIGFkanVzdGVkWSA9IHZpc2libGVFZGdlVG9wICsgdG9wLT5zZWNvbmQu
Z2V0RmxvYXRWYWx1ZSgpICogbV92aXNpYmxlQ29udGVudHNSZWN0LmhlaWdodCgpIC8gMTAwOwor
ICAgICAgICBlbHNlIC8vIGl0LT5zZWNvbmQuaXNGaXhlZCgpCisgICAgICAgICAgICBhZGp1c3Rl
ZFkgPSB2aXNpYmxlRWRnZVRvcCArIHRvcC0+c2Vjb25kLmdldEZsb2F0VmFsdWUoKSAqIG1fY29u
dGVudHNTY2FsZTsKKyAgICB9IGVsc2UgeworICAgICAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFw
OjppdGVyYXRvciBib3R0b20gPSBtYXAuZmluZChDU1NQcm9wZXJ0eUJvdHRvbSk7CisgICAgICAg
IGlmIChib3R0b20gIT0gbWFwLmVuZCgpKSB7CisgICAgICAgICAgICBpbnQgdmlzaWJsZUVkZ2VC
b3R0b20gPSBzdGQ6Om1pbihtX3Zpc2libGVDb250ZW50c1JlY3QubWF4WSgpLCAoaW50KShtX2Nv
bnRlbnRzU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgaWYgIChib3R0b20tPnNlY29uZC5p
c1BlcmNlbnQoKSkKKyAgICAgICAgICAgICAgICBhZGp1c3RlZFkgPSB2aXNpYmxlRWRnZUJvdHRv
bSAtIGJvdHRvbS0+c2Vjb25kLmdldEZsb2F0VmFsdWUoKSAqIG1fdmlzaWJsZUNvbnRlbnRzUmVj
dC5oZWlnaHQoKSAvIDEwMCAtIGxheWVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBl
bHNlIC8vIGl0LT5zZWNvbmQuaXNGaXhlZCgpCisgICAgICAgICAgICAgICAgYWRqdXN0ZWRZID0g
dmlzaWJsZUVkZ2VCb3R0b20gLSBib3R0b20tPnNlY29uZC5nZXRGbG9hdFZhbHVlKCkgKiBtX2Nv
bnRlbnRzU2NhbGUgLSBsYXllci0+c2l6ZSgpLmhlaWdodCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoYWRqdXN0ZWRYLCBhZGp1c3RlZFkp
KTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JBbGxG
aXhlZFBvc2l0aW9uTGF5ZXJzKCkKK3sKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9m
aXhlZFBvc2l0aW9uTGF5ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9maXhlZFBvc2l0aW9uTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uTGF5ZXIoaXQtPnNlY29uZCk7Cit9CisK
IHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2Vi
TGF5ZXJJbmZvJiBsYXllckluZm8pCiB7CiAgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5p
ZDsKQEAgLTE4OSw3ICsyNTYsMTkgQEAKICAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5
ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKICAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVy
SW5mby5jb250ZW50c1JlY3QpOwogICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZv
LmRyYXdzQ29udGVudCk7CisgICAgbGF5ZXItPnNldEZpeGVkUG9zaXRpb24obGF5ZXJJbmZvLmZp
eGVkUG9zaXRpb24pOwogCisgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcCYgbWFwID0gbGF5ZXIt
PmZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbigpOworICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxheWVySW5mby5tX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlv
bi5lbmQoKTsKKyAgICBmb3IgKFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbGF5ZXJJbmZvLm1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgbWFwLmFkZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworCisg
ICAgaWYgKGxheWVyLT5maXhlZFBvc2l0aW9uKCkpIHsKKyAgICAgICAgbV9maXhlZFBvc2l0aW9u
TGF5ZXJzLmFkZChsYXllckluZm8uaWQsIGxheWVyKTsKKyAgICAgICAgYWRqdXN0UG9zaXRpb25G
b3JGaXhlZFBvc2l0aW9uTGF5ZXIobGF5ZXIpOworICAgIH0gZWxzZQorICAgICAgICBtX2ZpeGVk
UG9zaXRpb25MYXllcnMucmVtb3ZlKGxheWVySW5mby5pZCk7CisKICAgICBpZiAobmVlZHNUb1Vw
ZGF0ZUltYWdlVGlsZXMpCiAgICAgICAgIGFzc2lnbkltYWdlVG9MYXllcihsYXllciwgbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwogCkBAIC0yNDEsNiArMzIwLDcgQEAKIAogICAgIGxh
eWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOwor
ICAgIG1fZml4ZWRQb3NpdGlvbkxheWVycy5yZW1vdmUobGF5ZXJJRCk7CiAgICAgZGVsZXRlIGxh
eWVyOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAkocmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDYgKzc2LDEwIEBACiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiAKIC8vIERlZmF1
bHRzIHRvIGZhbHNlLgorV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29s
KTsKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CisKKy8vIERlZmF1bHRz
IHRvIGZhbHNlLgogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldENvbXBvc2l0aW5nQm9y
ZGVyc1Zpc2libGUoV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCk7CiBXS19FWFBPUlQgYm9vbCBXS1By
ZWZlcmVuY2VzR2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShXS1ByZWZlcmVuY2VzUmVmKTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzLmNwcAkocmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDE2IEBA
CiAgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKCk7CiB9CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmLCBib29sIGZsYWcpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGZsYWcpOworfQorCitib29s
IFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRp
b25FbmFibGVkKCk7Cit9CisKIHZvaWQgV0tQcmVmZXJlbmNlc1NldENvbXBvc2l0aW5nQm9yZGVy
c1Zpc2libGUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewog
ICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUo
ZmxhZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAJKHJldmlzaW9uIDExMTUyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsx
MjEsNyBAQAogICAgIHdlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwogICAgIHdlYlBhZ2VQcm94eS0+
cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUp
OwogICAgIHdlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQodHJ1ZSk7CisgICAgd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+
cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25F
bmFibGVkKHRydWUpOwogCiAgICAgcGFnZUNsaWVudC5pbml0aWFsaXplKHFfcHRyLCBwYWdlVmll
d1ByaXZhdGUtPmV2ZW50SGFuZGxlci5kYXRhKCksICZ1bmRvQ29udHJvbGxlcik7CiAgICAgd2Vi
UGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCShyZXZpc2lvbiAxMTE1MjQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBACiAgICAgaWYgKCFkcmF3aW5nQXJlYSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUo
c2l6ZSksIFdlYkNvcmU6OkludFNpemUoKSk7CisgICAgaWYgKGRyYXdpbmdBcmVhLT5sYXllclRy
ZWVIb3N0UHJveHkoKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgp
LT5zZXRDb250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSkpOwogfQogCiB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludChRUGFpbnRl
ciogcGFpbnRlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
SG9zdFByb3h5LmgJKHJldmlzaW9uIDExMTUyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAog
ICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNs
aXApOwogICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KTsKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2
b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lk
IHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNj
YWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKICAgICB2b2lkIGRp
ZFJlbmRlckZyYW1lKCk7CiAgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgJKHJldmlzaW9uIDEx
MTUyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAgICAgdm9pZCBwYWludFRvQ3VycmVu
dEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRl
eHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiAgICAgdm9pZCBzeW5j
UmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKQEAgLTgw
LDggKzgxLDExIEBACiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lk
IHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CiAgICAgdm9pZCBjYWxsT25NYWluVHJlYWQoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZFBvc2l0
aW9uTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRqdXN0UG9zaXRp
b25Gb3JBbGxGaXhlZFBvc2l0aW9uTGF5ZXJzKCk7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8V2Vi
TGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFwOworICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdDsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CiAKQEAgLTExMCw2ICsx
MTQsNyBAQAogICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwogCiAgICAg
TGF5ZXJNYXAgbV9sYXllcnM7CisgICAgTGF5ZXJNYXAgbV9maXhlZFBvc2l0aW9uTGF5ZXJzOwog
ICAgIFdlYkxheWVySUQgbV9yb290TGF5ZXJJRDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCShyZXZpc2lvbiAxMTE1MjQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMSBAQAogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtl
eSkpOwogfQogCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fcmVuZGVyZXItPnNl
dENvbnRlbnRzU2l6ZShjb250ZW50c1NpemUpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2Fs
ZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICBtX3JlbmRlcmVy
LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcAkocmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU0LDcgKzQ1NCwxMiBAQAogICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9y
bSgpOwogICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgIG1fbGF5ZXJJbmZv
LmNoaWxkcmVuLmNsZWFyKCk7CisgICAgbV9sYXllckluZm8uZml4ZWRQb3NpdGlvbiA9IG1fZml4
ZWRQb3NpdGlvbjsKIAorICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uLmVuZCgpOworICAgIGZvciAoUG9zaXRpb25JbmZv
cm1hdGlvbk1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbi5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1fbGF5ZXJJbmZvLm1fZml4ZWRQb3NpdGlv
bkluZm9ybWF0aW9uLmFkZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVySW5m
by5jaGlsZHJlbi5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gMTExNTI0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTA0LDYgKzE5MDQsNyBAQAogICAgIHNldHRpbmdzLT5z
ZXRTaG93c1Rvb2xUaXBPdmVyVHJ1bmNhdGVkVGV4dChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXko
V2ViUHJlZmVyZW5jZXNLZXk6OnNob3dzVG9vbFRpcE92ZXJUcnVuY2F0ZWRUZXh0S2V5KCkpKTsK
IAogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkS2V5KCkpICYmIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKTsKKyAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNl
c0tleTo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkS2V5KCkp
ICYmIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKTsKICAg
ICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChzdG9yZS5nZXRCb29sVmFs
dWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWRLZXko
KSkgJiYgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOwog
ICAgIHNldHRpbmdzLT5zZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKHN0b3JlLmdldEJv
b2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6Y2FudmFzVXNlc0FjY2VsZXJhdGVkRHJh
d2luZ0tleSgpKSAmJiBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKSk7CiAgICAgc2V0dGluZ3MtPnNldFNob3dEZWJ1Z0JvcmRlcnMoc3RvcmUuZ2V0Qm9vbFZh
bHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpjb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlS2V5
KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTU0OCkKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAzLTIxICBZ
YWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZp
eGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBzZXR0aW5nIGZvciBzZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgYW5kIHR1cm5lZCBpdCBvbi4K
KyAgICAgICAgQXMgd2Ugc2Nyb2xsLCBhZGp1c3QgdGhlIHBvc2l0aW9uIG9mIGxheWVycyB3aXRo
IGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzLgorICAgICAgICBUaGlzIGlzIG5vdCBkb25lIGZvciBw
aW5jaGluZy4gT25seSB3aGVuIHRoZSBwaW5jaCBnZXN0dXJlIGlzIGZpbmlzaGVkLCB0aGUgcG9z
aXRpb24gaXMgYWRqdXN0ZWQuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJJbmZvOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRy
ZWVJbmZvLmg6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaDoKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3Bw
OgorICAgICAgICAoV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uRW5hYmxlZCk6CisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnNldERy
YXdpbmdBcmVhU2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChMYXll
clRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9u
TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9z
aXRpb25Gb3JBbGxGaXhlZFBvc2l0aW9uTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJMYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoV2ViTGF5ZXJUcmVlUmVuZGVyZXIpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOgorCiAy
MDEyLTAzLTIxICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBUaGUgYWN0aXZhdGlvbiBoaWdobGlnaHQgZG9lcyBub3QgYWx3YXlzIGhp
ZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAko
cmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQAogICAgIG1hY3JvKEh5cGVy
bGlua0F1ZGl0aW5nRW5hYmxlZCwgaHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkLCBCb29sLCBib29s
LCB0cnVlKSBcCiAgICAgbWFjcm8oTmVlZHNTaXRlU3BlY2lmaWNRdWlya3MsIG5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIG1hY3JvKEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdFbmFibGVkLCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgQm9vbCwg
Ym9vbCwgdHJ1ZSkgXAorICAgIG1hY3JvKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uRW5hYmxlZCwgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFi
bGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIG1hY3JvKEZvcmNlQ29tcG9zaXRpbmdNb2Rl
LCBmb3JjZUNvbXBvc2l0aW5nTW9kZSwgQm9vbCwgYm9vbCwgZmFsc2UpIFwKICAgICBtYWNybyhB
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkLCBhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkLCBCb29s
LCBib29sLCBmYWxzZSkgXAogICAgIG1hY3JvKENhbnZhc1VzZXNBY2NlbGVyYXRlZERyYXdpbmcs
IGNhbnZhc1VzZXNBY2NlbGVyYXRlZERyYXdpbmcsIEJvb2wsIGJvb2wsIHRydWUpIFwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAJKHJldmlzaW9uIDEx
MTUyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0
IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11
bSBvZiAxMCBhcmd1bWVudHMuCiAgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKGlkLCBu
YW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaywgaW1hZ2VCYWNraW5n
U3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRy
YW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50
c1JlY3QsIGFuaW1hdGlvbnMpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4obV9m
aXhlZFBvc2l0aW9uSW5mb3JtYXRpb24pKTsKIH0KIAogYm9vbCBXZWJMYXllckluZm86OmRlY29k
ZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkxheWVySW5mbyYgaW5mbykK
QEAgLTQ1LDYgKzQ2LDkgQEAKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQo
aW5mby5wb3MsIGluZm8uc2l6ZSwgaW5mby50cmFuc2Zvcm0sIGluZm8ub3BhY2l0eSwgaW5mby5h
bmNob3JQb2ludCwgaW5mby5jaGlsZHJlblRyYW5zZm9ybSwgaW5mby5jb250ZW50c1JlY3QsIGlu
Zm8uYW5pbWF0aW9ucykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5tX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbikp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCShyZXZpc2lvbiAxMTE1MjQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDksOSArMTA5LDExIEBACiAgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rp
c3BsYXkgOiAxOwogICAgICAgICAgICAgYm9vbCBpbWFnZUlzVXBkYXRlZDogMTsKICAgICAgICAg
ICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAgICAgICAgICBib29sIGZpeGVkUG9zaXRpb246
IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICB9OworICAg
IFdlYkNvcmU6OlBvc2l0aW9uSW5mb3JtYXRpb25NYXAgbV9maXhlZFBvc2l0aW9uSW5mb3JtYXRp
b247CiAgICAgVmVjdG9yPFdlYkxheWVySUQ+IGNoaWxkcmVuOwogICAgIFZlY3RvcjxXZWJMYXll
ckFuaW1hdGlvbj4gYW5pbWF0aW9uczsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBpbWFn
ZUJhY2tpbmdTdG9yZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133058</attachid>
            <date>2012-03-21 09:21:17 -0700</date>
            <delta_ts>2012-03-22 19:29:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>26918</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTIxICBZYWVsIEFo
YXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZpeGVkIHBv
c2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2hlbiB0aGUgc2V0dGluZyBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgaXMgdHJ1ZSwKKyAgICAgICAgcGFzcyB0aGUgZml4
ZWQgcG9zaXRpb24gaW5mb3JtYXRpb24gdXAgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIHRoYXQgaXQg
Y2FuIHJlLXBvc2l0aW9uCisgICAgICAgIHRoZSBmaXhlZCBwb3NpdGlvbiBsYXllciBhcyBuZWVk
ZWQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6c2V0Rml4ZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjpmaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVT
ZWxmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmg6CisgICAgICAgIChTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
TGF5ZXI6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdy
YXBoaWNzTGF5ZXJHZW9tZXRyeSk6CisKIDIwMTItMDMtMjEgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEhlYXBTbmFwc2hv
dDogbW92ZSBhbGwgYnVpbGRlcnMgYW5kIGNhbGN1bGF0aW9uIGNhbGxzIHRvIEhlYXBTbmFwc2hv
dC5faW5pdCBmdW5jdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlz
aW9uIDExMTUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcwMSw4ICsxNzAxLDEzIEBACiB7CiAgICAgSW50U2l6ZSBvZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKICAgICBTY3JvbGxWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVj
dCh2aXNpYmxlQ29udGVudFJlY3QpOwotICAgIGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkp
CisgICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkgeworICAgICAgICBpZiAobV9mcmFt
ZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3Np
dGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgdXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Ny
b2xsaW5nKCk7CisgICAgICAgICAgICByZXBhaW50Rml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5n
KCk7CisgICAgICAgIH0KICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgfQog
ICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNiAr
ODMsNyBAQAogICAgICwgbV9hY2NlbGVyYXRlc0RyYXdpbmcoZmFsc2UpCiAgICAgLCBtX21haW50
YWluc1BpeGVsQWxpZ25tZW50KGZhbHNlKQogICAgICwgbV9hcHBsaWVzUGFnZVNjYWxlKGZhbHNl
KQorICAgICwgbV9maXhlZFBvc2l0aW9uKGZhbHNlKQogICAgICwgbV9wYWludGluZ1BoYXNlKEdy
YXBoaWNzTGF5ZXJQYWludEFsbCkKICAgICAsIG1fY29udGVudHNPcmllbnRhdGlvbihDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzVG9wRG93bikKICAgICAsIG1fcGFyZW50KDApCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lv
biAxMTE1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtMjIxLDggKzIyMiw4
IEBACiAgICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIG1fcHJvcGVydHk7CiB9OwogCit0eXBlZGVmIEhh
c2hNYXA8aW50LCBMZW5ndGg+IFBvc2l0aW9uSW5mb3JtYXRpb25NYXA7CiAKLQogLy8gR3JhcGhp
Y3NMYXllciBpcyBhbiBhYnN0cmFjdGlvbiBmb3IgYSByZW5kZXJpbmcgc3VyZmFjZSB3aXRoIGJh
Y2tpbmcgc3RvcmUsCiAvLyB3aGljaCBtYXkgaGF2ZSBhc3NvY2lhdGVkIHRyYW5zZm9ybWF0aW9u
IGFuZCBhbmltYXRpb25zLgogCkBAIC00MTYsNiArNDE3LDEwIEBACiAgICAgdmlydHVhbCB2b2lk
IGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIHsgfQogICAgIHZvaWQgbm90ZURldmlj
ZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAKKyAgICB2
b2lkIHNldEZpeGVkUG9zaXRpb24oYm9vbCBmaXhlZCkgeyBtX2ZpeGVkUG9zaXRpb24gPSBmaXhl
ZDsgfQorICAgIGJvb2wgZml4ZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRQb3Np
dGlvbjsgfQorCisgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcCYgZml4ZWRQb3NpdGlvbkluZm9y
bWF0aW9uKCkgeyByZXR1cm4gbV9maXhlZFBvc2l0aW9uSW5mb3JtYXRpb247IH0KICAgICAvLyBT
b21lIGNvbXBvc2l0aW5nIHN5c3RlbXMgbWF5IGRvIGludGVybmFsIGJhdGNoaW5nIHRvIHN5bmNo
cm9uaXplIGNvbXBvc2l0aW5nIHVwZGF0ZXMKICAgICAvLyB3aXRoIHVwZGF0ZXMgZHJhd24gaW50
byB0aGUgd2luZG93LiBUaGVzZSBtZXRob2RzIGZsdXNoIGludGVybmFsIGJhdGNoZWQgc3RhdGUg
b24gdGhpcyBsYXllcgogICAgIC8vIGFuZCBkZXNjZW5kYW50IGxheWVycywgYW5kIHRoaXMgbGF5
ZXIgb25seS4KQEAgLTQ5OSw2ICs1MDQsNyBAQAogICAgIGJvb2wgbV9hY2NlbGVyYXRlc0RyYXdp
bmcgOiAxOwogICAgIGJvb2wgbV9tYWludGFpbnNQaXhlbEFsaWdubWVudCA6IDE7CiAgICAgYm9v
bCBtX2FwcGxpZXNQYWdlU2NhbGUgOiAxOyAvLyBTZXQgZm9yIHRoZSBsYXllciB3aGljaCBoYXMg
dGhlIHBhZ2Ugc2NhbGUgYXBwbGllZCB0byBpdC4KKyAgICBib29sIG1fZml4ZWRQb3NpdGlvbiA6
IDE7CiAKICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBtX3BhaW50aW5nUGhhc2U7CiAg
ICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG1fY29udGVudHNPcmllbnRhdGlv
bjsgLy8gYWZmZWN0cyBvcmllbnRhdGlvbiBvZiBsYXllciBjb250ZW50cwpAQCAtNTE3LDYgKzUy
Myw4IEBACiAKICAgICBpbnQgbV9yZXBhaW50Q291bnQ7CiAKKyAgICBQb3NpdGlvbkluZm9ybWF0
aW9uTWFwIG1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uOworCiAjaWYgUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBzdGF0aWMgR3JhcGhpY3NMYXllcjo6R3JhcGhpY3NMYXllckZh
Y3RvcnkqIHNfZ3JhcGhpY3NMYXllckZhY3Rvcnk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDI4LDkgKzQyOCwxNCBAQAogICAgIG1fc3RhdGUuZmlsdGVycyA9IGdyYXBoaWNzTGF5
ZXItPmZpbHRlcnMoKTsKICNlbmRpZgogCisgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcDo6aXRl
cmF0b3IgZW5kID0gZ3JhcGhpY3NMYXllci0+Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKCkuZW5k
KCk7CisgICAgZm9yIChQb3NpdGlvbkluZm9ybWF0aW9uTWFwOjppdGVyYXRvciBpdCA9IGdyYXBo
aWNzTGF5ZXItPmZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbigpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgbV9zdGF0ZS5tX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbi5hZGQoaXQt
PmZpcnN0LCBpdC0+c2Vjb25kKTsKKwogICAgIG1fc3RhdGUubmVlZHNEaXNwbGF5ID0gbV9zdGF0
ZS5uZWVkc0Rpc3BsYXkgfHwgZ3JhcGhpY3NMYXllci0+bmVlZHNEaXNwbGF5KCk7CiAgICAgaWYg
KCFtX3N0YXRlLm5lZWRzRGlzcGxheSkKICAgICAgICAgbV9zdGF0ZS5uZWVkc0Rpc3BsYXlSZWN0
LnVuaXRlKGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKSk7CisgICAgbV9zdGF0ZS5m
aXhlZFBvc2l0aW9uID0gZ3JhcGhpY3NMYXllci0+Zml4ZWRQb3NpdGlvbigpOwogICAgIG1fY29u
dGVudHNMYXllciA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKTsKIAogICAgIG1fdHJh
bnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmgJKHJldmlzaW9uIDExMTUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYg
KzE4Nyw3IEBACiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAgICAgRmlsdGVyT3BlcmF0
aW9ucyBmaWx0ZXJzOwogI2VuZGlmCisgICAgICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXAgbV9m
aXhlZFBvc2l0aW9uSW5mb3JtYXRpb247CiAKICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7
CiAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CkBAIC0xOTcsNiArMTk4LDcgQEAKICAg
ICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk6IDE7CiAgICAgICAgIGJvb2wgbWlnaHRIYXZlT3Zlcmxh
cHMgOiAxOwogICAgICAgICBib29sIG5lZWRzUmVwYWludDsKKyAgICAgICAgYm9vbCBmaXhlZFBv
c2l0aW9uIDogMTsKICAgICAgICAgU3RhdGUoKQogICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikK
ICAgICAgICAgICAgICwgbWFza0xheWVyKDApCkBAIC0yMTAsNiArMjEyLDcgQEAKICAgICAgICAg
ICAgICwgbmVlZHNEaXNwbGF5KHRydWUpCiAgICAgICAgICAgICAsIG1pZ2h0SGF2ZU92ZXJsYXBz
KGZhbHNlKQogICAgICAgICAgICAgLCBuZWVkc1JlcGFpbnQoZmFsc2UpCisgICAgICAgICAgICAs
IGZpeGVkUG9zaXRpb24oZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAko
cmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNSw2ICs0MDUsNyBAQAogICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgbV9ncmFwaGljc0xheWVy
LT5zZXRQcmVzZXJ2ZXMzRChzdHlsZS0+dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0
eWxlM0RQcmVzZXJ2ZTNEICYmICFyZW5kZXJlcigpLT5oYXNSZWZsZWN0aW9uKCkpOwogICAgIG1f
Z3JhcGhpY3NMYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHN0eWxlLT5iYWNrZmFjZVZpc2li
aWxpdHkoKSA9PSBCYWNrZmFjZVZpc2liaWxpdHlWaXNpYmxlKTsKKyAgICBtX2dyYXBoaWNzTGF5
ZXItPnNldEZpeGVkUG9zaXRpb24ocmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkgJiYgc3R5bGUt
PnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbik7CiAKICAgICBSZW5kZXJMYXllciogY29tcEFu
Y2VzdG9yID0gbV9vd25pbmdMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAgICAg
CkBAIC01NDIsNiArNTQzLDE5IEBACiAgICAgfQogCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRD
b250ZW50c1JlY3QoY29udGVudHNCb3goKSk7CisKKyAgICBpZiAobV9ncmFwaGljc0xheWVyLT5m
aXhlZFBvc2l0aW9uKCkpIHsKKyAgICAgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcCYgbWFwID0g
bV9ncmFwaGljc0xheWVyLT5maXhlZFBvc2l0aW9uSW5mb3JtYXRpb24oKTsKKyAgICAgICAgaWYg
KHN0eWxlLT50b3AoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZS0+dG9wKCkuaXNGaXhlZCgpKQorICAg
ICAgICAgICAgbWFwLmFkZChDU1NQcm9wZXJ0eVRvcCwgc3R5bGUtPnRvcCgpKTsKKyAgICAgICAg
aWYgKHN0eWxlLT5yaWdodCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlLT5yaWdodCgpLmlzRml4ZWQo
KSkKKyAgICAgICAgICAgIG1hcC5hZGQoQ1NTUHJvcGVydHlSaWdodCwgc3R5bGUtPnJpZ2h0KCkp
OworICAgICAgICBpZiAoc3R5bGUtPmJvdHRvbSgpLmlzUGVyY2VudCgpIHx8IHN0eWxlLT5ib3R0
b20oKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICBtYXAuYWRkKENTU1Byb3BlcnR5Qm90dG9tLCBz
dHlsZS0+Ym90dG9tKCkpOworICAgICAgICBpZiAoc3R5bGUtPmxlZnQoKS5pc1BlcmNlbnQoKSB8
fCBzdHlsZS0+bGVmdCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgIG1hcC5hZGQoQ1NTUHJvcGVy
dHlMZWZ0LCBzdHlsZS0+bGVmdCgpKTsKKyAgICB9CisKICAgICB1cGRhdGVEcmF3c0NvbnRlbnQo
KTsKICAgICB1cGRhdGVBZnRlcldpZGdldFJlc2l6ZSgpOwogfQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAx
MTE1MjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJXZWJMYXll
clRyZWVSZW5kZXJlci5oIgogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJCYWNraW5n
U3RvcmUuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKQEAgLTExOCw2ICsxMTks
MTIgQEAKICAgICAgICAgY3VycmVudFJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CiAgICAgfQogCisgICAgaWYgKG1fZml4ZWRQb3NpdGlvbkxheWVycy5z
aXplKCkpIHsKKyAgICAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZml4ZWRQb3NpdGlv
bkxheWVycy5lbmQoKTsKKyAgICAgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2Zp
eGVkUG9zaXRpb25MYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
aXQtPnNlY29uZC0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAg
fQorCiAgICAgbGF5ZXItPnBhaW50KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7
CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwpAQCAtMTU1LDEwICsxNjIsMTcg
QEAKICAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKIH0KIAordm9p
ZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fY29udGVudHNTaXplID0gY29udGVudHNT
aXplOworICAgIGFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRQb3NpdGlvbkxheWVycygpOworfQor
CiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQogewogICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVj
dCA9IHJlY3Q7CiAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgYWRqdXN0UG9zaXRp
b25Gb3JBbGxGaXhlZFBvc2l0aW9uTGF5ZXJzKCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KCkKQEAgLTE2Nyw2ICsxODEsNTkgQEAKICAgICAgICAgbV9s
YXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIEFTU0VSVChsYXllci0+Zml4ZWRQb3NpdGlv
bigpKTsKKworICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXAmIG1hcCA9IGxheWVyLT5maXhlZFBv
c2l0aW9uSW5mb3JtYXRpb24oKTsKKyAgICBmbG9hdCBhZGp1c3RlZFggPSBsYXllci0+cG9zaXRp
b24oKS54KCk7CisgICAgZmxvYXQgYWRqdXN0ZWRZID0gbGF5ZXItPnBvc2l0aW9uKCkueSgpOwor
ICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6Oml0ZXJhdG9yIGxlZnQgPSBtYXAuZmluZChDU1NQ
cm9wZXJ0eUxlZnQpOworICAgIGlmIChsZWZ0ICE9IG1hcC5lbmQoKSkgeworICAgICAgICBpbnQg
dmlzaWJsZUVkZ2VMZWZ0ID0gc3RkOjptYXgobV92aXNpYmxlQ29udGVudHNSZWN0LngoKSwgMCk7
CisgICAgICAgIGlmIChsZWZ0LT5zZWNvbmQuaXNQZXJjZW50KCkpCisgICAgICAgICAgICBhZGp1
c3RlZFggPSB2aXNpYmxlRWRnZUxlZnQgKyBsZWZ0LT5zZWNvbmQuZ2V0RmxvYXRWYWx1ZSgpICog
bV92aXNpYmxlQ29udGVudHNSZWN0LndpZHRoKCkgLyAxMDA7CisgICAgICAgIGVsc2UgLy8gaXQt
PnNlY29uZC5pc0ZpeGVkKCkKKyAgICAgICAgICAgIGFkanVzdGVkWCA9IHZpc2libGVFZGdlTGVm
dCArIGxlZnQtPnNlY29uZC5nZXRGbG9hdFZhbHVlKCkgKiBtX2NvbnRlbnRzU2NhbGU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaW50IHZpc2libGVFZGdlUmlnaHQgPSBzdGQ6Om1pbihtX3Zpc2li
bGVDb250ZW50c1JlY3QubWF4WCgpLCAoaW50KShtX2NvbnRlbnRzU2l6ZS53aWR0aCgpKSk7Cisg
ICAgICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6Oml0ZXJhdG9yIHJpZ2h0ID0gbWFwLmZpbmQo
Q1NTUHJvcGVydHlSaWdodCk7CisgICAgICAgIGlmIChyaWdodCE9IG1hcC5lbmQoKSkgeworICAg
ICAgICAgICAgaWYgIChyaWdodC0+c2Vjb25kLmlzUGVyY2VudCgpKQorICAgICAgICAgICAgICAg
IGFkanVzdGVkWCA9IHZpc2libGVFZGdlUmlnaHQgLSByaWdodC0+c2Vjb25kLmdldEZsb2F0VmFs
dWUoKSAqIG1fdmlzaWJsZUNvbnRlbnRzUmVjdC53aWR0aCgpIC8gMTAwIC0gbGF5ZXItPnNpemUo
KS53aWR0aCgpOworICAgICAgICAgICAgZWxzZSAvLyBpdC0+c2Vjb25kLmlzRml4ZWQoKQorICAg
ICAgICAgICAgICAgIGFkanVzdGVkWCA9IHZpc2libGVFZGdlUmlnaHQgLSByaWdodC0+c2Vjb25k
LmdldEZsb2F0VmFsdWUoKSAqIG1fY29udGVudHNTY2FsZSAtIGxheWVyLT5zaXplKCkud2lkdGgo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6Oml0ZXJh
dG9yIHRvcCA9IG1hcC5maW5kKENTU1Byb3BlcnR5VG9wKTsKKyAgICBpZiAodG9wICE9IG1hcC5l
bmQoKSkgeworICAgICAgICBpbnQgdmlzaWJsZUVkZ2VUb3AgPSBzdGQ6Om1heChtX3Zpc2libGVD
b250ZW50c1JlY3QueSgpLCAwKTsKKyAgICAgICAgaWYgKHRvcC0+c2Vjb25kLmlzUGVyY2VudCgp
KQorICAgICAgICAgICAgYWRqdXN0ZWRZID0gdmlzaWJsZUVkZ2VUb3AgKyB0b3AtPnNlY29uZC5n
ZXRGbG9hdFZhbHVlKCkgKiBtX3Zpc2libGVDb250ZW50c1JlY3QuaGVpZ2h0KCkgLyAxMDA7Cisg
ICAgICAgIGVsc2UgLy8gaXQtPnNlY29uZC5pc0ZpeGVkKCkKKyAgICAgICAgICAgIGFkanVzdGVk
WSA9IHZpc2libGVFZGdlVG9wICsgdG9wLT5zZWNvbmQuZ2V0RmxvYXRWYWx1ZSgpICogbV9jb250
ZW50c1NjYWxlOworICAgIH0gZWxzZSB7CisgICAgICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXA6
Oml0ZXJhdG9yIGJvdHRvbSA9IG1hcC5maW5kKENTU1Byb3BlcnR5Qm90dG9tKTsKKyAgICAgICAg
aWYgKGJvdHRvbSAhPSBtYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIGludCB2aXNpYmxlRWRnZUJv
dHRvbSA9IHN0ZDo6bWluKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5tYXhZKCksIChpbnQpKG1fY29u
dGVudHNTaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBpZiAgKGJvdHRvbS0+c2Vjb25kLmlz
UGVyY2VudCgpKQorICAgICAgICAgICAgICAgIGFkanVzdGVkWSA9IHZpc2libGVFZGdlQm90dG9t
IC0gYm90dG9tLT5zZWNvbmQuZ2V0RmxvYXRWYWx1ZSgpICogbV92aXNpYmxlQ29udGVudHNSZWN0
LmhlaWdodCgpIC8gMTAwIC0gbGF5ZXItPnNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGVs
c2UgLy8gaXQtPnNlY29uZC5pc0ZpeGVkKCkKKyAgICAgICAgICAgICAgICBhZGp1c3RlZFkgPSB2
aXNpYmxlRWRnZUJvdHRvbSAtIGJvdHRvbS0+c2Vjb25kLmdldEZsb2F0VmFsdWUoKSAqIG1fY29u
dGVudHNTY2FsZSAtIGxheWVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBsYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChhZGp1c3RlZFgsIGFkanVzdGVkWSkp
OworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckFsbEZp
eGVkUG9zaXRpb25MYXllcnMoKQoreworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2Zp
eGVkUG9zaXRpb25MYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX2ZpeGVkUG9zaXRpb25MYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBhZGp1c3RQb3NpdGlvbkZvckZpeGVkUG9zaXRpb25MYXllcihpdC0+c2Vjb25kKTsKK30KKwog
dm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJM
YXllckluZm8mIGxheWVySW5mbykKIHsKICAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlk
OwpAQCAtMTg5LDcgKzI1NiwxOSBAQAogICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXll
ckluZm8uY29udGVudHNPcGFxdWUpOwogICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJ
bmZvLmNvbnRlbnRzUmVjdCk7CiAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8u
ZHJhd3NDb250ZW50KTsKKyAgICBsYXllci0+c2V0Rml4ZWRQb3NpdGlvbihsYXllckluZm8uZml4
ZWRQb3NpdGlvbik7CiAKKyAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFwJiBtYXAgPSBsYXllci0+
Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKCk7CisgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5ZXJJbmZvLm1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9u
LmVuZCgpOworICAgIGZvciAoUG9zaXRpb25JbmZvcm1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBsYXllckluZm8ubV9maXhlZFBvc2l0aW9uSW5mb3JtYXRpb24uYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICBtYXAuYWRkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisKKyAg
ICBpZiAobGF5ZXItPmZpeGVkUG9zaXRpb24oKSkgeworICAgICAgICBtX2ZpeGVkUG9zaXRpb25M
YXllcnMuYWRkKGxheWVySW5mby5pZCwgbGF5ZXIpOworICAgICAgICBhZGp1c3RQb3NpdGlvbkZv
ckZpeGVkUG9zaXRpb25MYXllcihsYXllcik7CisgICAgfSBlbHNlCisgICAgICAgIG1fZml4ZWRQ
b3NpdGlvbkxheWVycy5yZW1vdmUobGF5ZXJJbmZvLmlkKTsKKwogICAgIGlmIChuZWVkc1RvVXBk
YXRlSW1hZ2VUaWxlcykKICAgICAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7CiAKQEAgLTI0MSw2ICszMjAsNyBAQAogCiAgICAgbGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJRCk7Cisg
ICAgbV9maXhlZFBvc2l0aW9uTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKICAgICBkZWxldGUgbGF5
ZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNiArNzYsMTAgQEAKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKIAogLy8gRGVmYXVs
dHMgdG8gZmFsc2UuCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wp
OworV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKKworLy8gRGVmYXVsdHMg
dG8gZmFsc2UuCiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0Q29tcG9zaXRpbmdCb3Jk
ZXJzVmlzaWJsZShXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJl
ZmVyZW5jZXNHZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKFdLUHJlZmVyZW5jZXNSZWYpOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5j
ZXMuY3BwCShyZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsMTYgQEAK
ICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWQoKTsKIH0KIAordm9pZCBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYsIGJvb2wgZmxhZykKK3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZmxhZyk7Cit9CisKK2Jvb2wg
V0tQcmVmZXJlbmNlc0dldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQoreworICAgIHJldHVybiB0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQoKTsKK30KKwogdm9pZCBXS1ByZWZlcmVuY2VzU2V0Q29tcG9zaXRpbmdCb3JkZXJz
VmlzaWJsZShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7CiAg
ICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShm
bGFnKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEy
MSw3IEBACiAgICAgd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CiAgICAgd2ViUGFnZVByb3h5LT5w
YWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7
CiAgICAgd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0RnJhbWVG
bGF0dGVuaW5nRW5hYmxlZCh0cnVlKTsKKyAgICB3ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQodHJ1ZSk7CiAKICAgICBwYWdlQ2xpZW50LmluaXRpYWxpemUocV9wdHIsIHBhZ2VWaWV3
UHJpdmF0ZS0+ZXZlbnRIYW5kbGVyLmRhdGEoKSwgJnVuZG9Db250cm9sbGVyKTsKICAgICB3ZWJQ
YWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAJKHJldmlzaW9uIDExMTUyNCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAKICAgICBpZiAoIWRyYXdpbmdBcmVhKQogICAg
ICAgICByZXR1cm47CiAgICAgZHJhd2luZ0FyZWEtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShz
aXplKSwgV2ViQ29yZTo6SW50U2l6ZSgpKTsKKyAgICBpZiAoZHJhd2luZ0FyZWEtPmxheWVyVHJl
ZUhvc3RQcm94eSgpKQorICAgICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkt
PnNldENvbnRlbnRzU2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKSk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVy
KiBwYWludGVyKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVI
b3N0UHJveHkuaAkocmV2aXNpb24gMTExNTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAg
ICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xp
cCk7CiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZv
cm1HcmFwaGljc0NvbnRleHQpOwogICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOworICAgIHZv
aWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2Nh
bGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnkpOwogICAgIHZvaWQgZGlk
UmVuZGVyRnJhbWUoKTsKICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAkocmV2aXNpb24gMTEx
NTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICAgICB2b2lkIHBhaW50VG9DdXJyZW50
R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4
dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKICAgICB2b2lkIHN5bmNS
ZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSk7CiAKICAgICB2b2lkIGRldGFjaCgpOwpAQCAtODAs
OCArODEsMTEgQEAKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQg
cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KICAgICB2b2lkIGNhbGxPbk1haW5UcmVhZChjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkUG9zaXRp
b25MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBhZGp1c3RQb3NpdGlv
bkZvckFsbEZpeGVkUG9zaXRpb25MYXllcnMoKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJM
YXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgV2ViQ29yZTo6
RmxvYXRTaXplIG1fY29udGVudHNTaXplOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxl
Q29udGVudHNSZWN0OwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKIApAQCAtMTEwLDYgKzEx
NCw3IEBACiAgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CiAKICAgICBM
YXllck1hcCBtX2xheWVyczsKKyAgICBMYXllck1hcCBtX2ZpeGVkUG9zaXRpb25MYXllcnM7CiAg
ICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAJKHJldmlzaW9uIDExMTUyNCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDExIEBACiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5
KSk7CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBjb250ZW50c1NpemUpCit7CisgICAgbV9yZW5kZXJlci0+c2V0
Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7Cit9CisKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxl
LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewogICAgIG1fcmVuZGVyZXIt
PnNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgc2NhbGUpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTQsNyArNDU0LDEyIEBACiAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3Jt
KCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNwbGF5ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8u
Y2hpbGRyZW4uY2xlYXIoKTsKKyAgICBtX2xheWVySW5mby5maXhlZFBvc2l0aW9uID0gbV9maXhl
ZFBvc2l0aW9uOwogCisgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcDo6aXRlcmF0b3IgZW5kID0g
bV9maXhlZFBvc2l0aW9uSW5mb3JtYXRpb24uZW5kKCk7CisgICAgZm9yIChQb3NpdGlvbkluZm9y
bWF0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV9sYXllckluZm8ubV9maXhlZFBvc2l0aW9u
SW5mb3JtYXRpb24uYWRkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fbGF5ZXJJbmZv
LmNoaWxkcmVuLmFwcGVuZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lv
biAxMTE1MjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MDQsNiArMTkwNCw3IEBACiAgICAgc2V0dGluZ3MtPnNl
dFNob3dzVG9vbFRpcE92ZXJUcnVuY2F0ZWRUZXh0KHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShX
ZWJQcmVmZXJlbmNlc0tleTo6c2hvd3NUb29sVGlwT3ZlclRydW5jYXRlZFRleHRLZXkoKSkpOwog
CiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHN0b3JlLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6YWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWRLZXkoKSkgJiYgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkpOworICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4
ZWRQb3NpdGlvbkVuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2Vz
S2V5OjphY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWRLZXkoKSkg
JiYgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOwogICAg
IHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZEtleSgp
KSAmJiBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSk7CiAg
ICAgc2V0dGluZ3MtPnNldENhbnZhc1VzZXNBY2NlbGVyYXRlZERyYXdpbmcoc3RvcmUuZ2V0Qm9v
bFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpjYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3
aW5nS2V5KCkpICYmIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKTsKICAgICBzZXR0aW5ncy0+c2V0U2hvd0RlYnVnQm9yZGVycyhzdG9yZS5nZXRCb29sVmFs
dWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmNvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGVLZXko
KSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTExNTQ4KQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMDMtMjEgIFlh
ZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgorCisgICAgICAgIFN1cHBvcnQgZml4
ZWQgcG9zaXRpb24gZWxlbWVudHMgaW4gUXQgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE3ODYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHNldHRpbmcgZm9yIHNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCBhbmQgdHVybmVkIGl0IG9uLgor
ICAgICAgICBBcyB3ZSBzY3JvbGwsIGFkanVzdCB0aGUgcG9zaXRpb24gb2YgbGF5ZXJzIHdpdGgg
Zml4ZWQgcG9zaXRpb24gZWxlbWVudHMuCisgICAgICAgIFRoaXMgaXMgbm90IGRvbmUgZm9yIHBp
bmNoaW5nLiBPbmx5IHdoZW4gdGhlIHBpbmNoIGdlc3R1cmUgaXMgZmluaXNoZWQsIHRoZSBwb3Np
dGlvbiBpcyBhZGp1c3RlZC4KKworICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllckluZm86OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJl
ZUluZm8uaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkKToKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6c2V0RHJh
d2luZ0FyZWFTaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcu
Y3BwOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UHJveHk6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKExheWVy
VHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dENvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkUG9zaXRpb25M
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3Np
dGlvbkZvckFsbEZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcik6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmg6CisgICAgICAgIChXZWJMYXllclRyZWVSZW5kZXJlcik6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisKIDIw
MTItMDMtMjEgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFRoZSBhY3RpdmF0aW9uIGhpZ2hsaWdodCBkb2VzIG5vdCBhbHdheXMgaGlk
ZQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCShy
ZXZpc2lvbiAxMTE1MjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNT
dG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBACiAgICAgbWFjcm8oSHlwZXJs
aW5rQXVkaXRpbmdFbmFibGVkLCBoeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQsIEJvb2wsIGJvb2ws
IHRydWUpIFwKICAgICBtYWNybyhOZWVkc1NpdGVTcGVjaWZpY1F1aXJrcywgbmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3MsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCiAgICAgbWFjcm8oQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQsIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCBCb29sLCBi
b29sLCB0cnVlKSBcCisgICAgbWFjcm8oQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkLCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCiAgICAgbWFjcm8oRm9yY2VDb21wb3NpdGluZ01vZGUs
IGZvcmNlQ29tcG9zaXRpbmdNb2RlLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIG1hY3JvKEFj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQsIGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQsIEJvb2ws
IGJvb2wsIGZhbHNlKSBcCiAgICAgbWFjcm8oQ2FudmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZywg
Y2FudmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZywgQm9vbCwgYm9vbCwgdHJ1ZSkgXApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAkocmV2aXNpb24gMTEx
NTI0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQg
dG8gc2V2ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVt
IG9mIDEwIGFyZ3VtZW50cy4KICAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5h
bWUsIHBhcmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBsaWNhLCBtYXNrLCBpbWFnZUJhY2tpbmdT
dG9yZUlEKSk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKHBvcywgc2l6ZSwgdHJh
bnNmb3JtLCBvcGFjaXR5LCBhbmNob3JQb2ludCwgY2hpbGRyZW5UcmFuc2Zvcm0sIGNvbnRlbnRz
UmVjdCwgYW5pbWF0aW9ucykpOworICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihtX2Zp
eGVkUG9zaXRpb25JbmZvcm1hdGlvbikpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQpA
QCAtNDUsNiArNDYsOSBAQAogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChp
bmZvLnBvcywgaW5mby5zaXplLCBpbmZvLnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFu
Y2hvclBvaW50LCBpbmZvLmNoaWxkcmVuVHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCwgaW5m
by5hbmltYXRpb25zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLm1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHJldmlzaW9uIDExMTUyNCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw5ICsxMDksMTEgQEAKICAgICAgICAgICAgIGJvb2wgY29udGVudE5lZWRzRGlz
cGxheSA6IDE7CiAgICAgICAgICAgICBib29sIGltYWdlSXNVcGRhdGVkOiAxOwogICAgICAgICAg
ICAgYm9vbCBpc1Jvb3RMYXllcjogMTsKKyAgICAgICAgICAgIGJvb2wgZml4ZWRQb3NpdGlvbjog
MTsKICAgICAgICAgfTsKICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgIH07CisgICAg
V2ViQ29yZTo6UG9zaXRpb25JbmZvcm1hdGlvbk1hcCBtX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlv
bjsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRyZW47CiAgICAgVmVjdG9yPFdlYkxheWVy
QW5pbWF0aW9uPiBhbmltYXRpb25zOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdl
QmFja2luZ1N0b3JlOwo=
</data>
<flag name="review"
          id="136916"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="136919"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133414</attachid>
            <date>2012-03-22 19:29:47 -0700</date>
            <delta_ts>2012-03-24 18:32:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>25678</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMTgw
NikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAz
LTIyICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBTdXBw
b3J0IGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9maXhlZC1wb3Np
dGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0yMiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8
cmFrdWNvQEZyZWVCU0Qub3JnPgogCiAgICAgICAgIFtDTWFrZV0gVW5yZXZpZXdlZCBidWlsZCBm
aXggYWZ0ZXIgcjExMTc3OC4KSW5kZXg6IE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTWFudWFsVGVzdHMvZml4ZWQtcG9zaXRpb24uaHRtbAkocmV2aXNpb24g
MCkKKysrIE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzggQEAKKzxodG1sPjxoZWFkPgorCis8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNo
YXJzZXQ9d2luZG93cy0xMjUxIiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPgorPHN0eWxlPgor
LmQxe3Bvc2l0aW9uOmZpeGVkO3RvcDo1MCU7cmlnaHQ6NTA7ei1pbmRleDoyO292ZXJmbG93Omhp
ZGRlbjt9CisuZDJ7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjVlbTtsZWZ0OjUwO3otaW5kZXg6Mjtv
dmVyZmxvdzpoaWRkZW47fQorLm8ge2JhY2tncm91bmQ6IzYyQjA0QjtoZWlnaHQ6NDBweDt3aWR0
aDoyMDBweDt9CisudCB7IHdpZHRoOjIwMDBweDsgaGVpZ2h0OjE5OHB4O2JhY2tncm91bmQtY29s
b3I6IGxpZ2h0Z3JheTsgYm9yZGVyOiAxcHggc29saWQgYmx1ZTt9Citib2R5IHsgbWFyZ2luOiAw
cHg7IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iR3JhZGllbnQiPgorPGRpdiBj
bGFzcz0iZDEiPjxkaXYgY2xhc3M9Im8iPlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9kaXY+Cis8ZGl2
IGNsYXNzPSJkMiI+PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48L2Rpdj4KKzxk
aXYgY2xhc3M9InQiPgorMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjAwCis8L2Rpdj4K
KzxkaXYgY2xhc3M9InQiPgorNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorNjAwCis8L2Rp
dj4KKzxkaXYgY2xhc3M9InQiPgorODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTAwMAor
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEyMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cisx
NDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTYwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0
Ij4KKzE4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMDAwCis8L2Rpdj4KKzxkaXYgY2xh
c3M9InQiPgorMjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorNDAwCis8L2Rpdj4KKzxkaXYg
Y2xhc3M9InQiPgorNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorODAwCis8L2Rpdj4KKzxk
aXYgY2xhc3M9InQiPgorMTAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEyMDAKKzwvZGl2
PgorPGRpdiBjbGFzcz0idCI+CisxNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTYwMAor
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzE4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cisy
MDAwCis8L2Rpdj4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTE4
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMiBAQAorMjAxMi0wMy0yMiAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+
CisKKyAgICAgICAgU3VwcG9ydCBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBpbiBRdCBXZWJLaXQy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTc4Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdGhl
IHNldHRpbmcgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkIGlz
IHRydWUsIHdlIG5lZWQgdG8KKyAgICAgICAgcGFzcyB0aGUgZml4ZWQgcG9zaXRpb24gaW5mb3Jt
YXRpb24gdXAgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIHRoYXQgaXQgY2FuIHJlLXBvc2l0aW9uCisg
ICAgICAgIHRoZSBmaXhlZCBwb3NpdGlvbiBsYXllciBhcyBuZWVkZWQuIEFkZGVkIHRoZSBuZWVk
ZWQgaW5mb3JhdGlvbiB0byBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci4KKworICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0Rml4
ZWRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OmZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6aGFzRml4ZWRQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0SGFzRml4
ZWRQb3NpdGlvbik6CisgICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisKIDIw
MTItMDMtMjIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W2Nocm9taXVtXSBTa2lwIGZyYW1lcyB3aGVuIGNoZWNrZXJib2FyZGluZyBhbiBhbmltYXRpb24K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDExMTcxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxMCw4
ICsxNzEwLDEzIEBACiB7CiAgICAgSW50U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKICAg
ICBTY3JvbGxWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdCh2aXNpYmxlQ29udGVudFJl
Y3QpOwotICAgIGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgaWYgKG9mZnNldCAh
PSBzY3JvbGxPZmZzZXQoKSkgeworICAgICAgICBpZiAobV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5n
cygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkgewor
ICAgICAgICAgICAgdXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CisgICAgICAg
ICAgICByZXBhaW50Rml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KICAg
ICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgfQogICAgIGZyYW1lKCktPmxvYWRl
cigpLT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCShyZXZpc2lvbiAxMTE3MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTAgQEAKICAgICBib29sIG5l
ZWRzRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAgICAgSW50UmVj
dCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX25l
ZWRzRGlzcGxheVJlY3QpOyB9CiAKKyAgICBIYXNoTWFwPGludCwgV2ViQ29yZTo6TGVuZ3RoPiYg
Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKCkgeyByZXR1cm4gbV9maXhlZFBvc2l0aW9uSW5mb3Jt
YXRpb247IH0KKyAgICBib29sIGhhc0ZpeGVkUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hh
c0ZpeGVkUG9zaXRpb247IH0KKyAgICB2b2lkIHNldEhhc0ZpeGVkUG9zaXRpb24oYm9vbCBpc0Zp
eGVkKSB7IG1faGFzRml4ZWRQb3NpdGlvbiA9IGlzRml4ZWQ7IH0KKwogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJik7CiAjZW5kaWYKQEAgLTEwMSw2ICsxMDUsOCBAQAogICAgIGJvb2wgbV9zeW5jUXVldWVk
OwogICAgIGludCBtX2NoYW5nZU1hc2s7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKKyAgICBi
b29sIG1faGFzRml4ZWRQb3NpdGlvbjsKKyAgICBIYXNoTWFwPGludCwgV2ViQ29yZTo6TGVuZ3Ro
PiBtX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbjsKICAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllciogbV9jb250ZW50c0xheWVyOwogICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7
CiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCShyZXZp
c2lvbiAxMTE3MTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJX
ZWJMYXllclRyZWVSZW5kZXJlci5oIgogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJC
YWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKQEAgLTExOCw2
ICsxMTksMTIgQEAKICAgICAgICAgY3VycmVudFJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgfQogCisgICAgaWYgKG1fZml4ZWRMYXllcnMuc2l6
ZSgpKSB7CisgICAgICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVu
ZCgpOworICAgICAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgaXQtPnNlY29uZC0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgfQorCiAgICAgbGF5ZXItPnBh
aW50KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CiAgICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOwpAQCAtMTU1LDEwICsxNjIsMTcgQEAKICAgICBtX3RleHR1cmVN
YXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNT
aXplKQoreworICAgIG1fY29udGVudHNTaXplID0gY29udGVudHNTaXplOworICAgIGFkanVzdFBv
c2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKTsKK30KKwogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2Fs
ZSkKIHsKICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwogICAgIG1fY29udGVudHNT
Y2FsZSA9IHNjYWxlOworICAgIGFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKTsKIH0K
IAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQoKQpAQCAtMTY3LDEy
ICsxODEsNzAgQEAKICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0
KCk7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4
ZWRMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKj4obGF5ZXIpOworICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXAmIG1h
cCA9IGdyYXBoaWNzTGF5ZXItPmZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbigpOworICAgIEFTU0VS
VChncmFwaGljc0xheWVyLT5oYXNGaXhlZFBvc2l0aW9uKCkpOworICAgIGZsb2F0IGFkanVzdGVk
WCA9IGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCkueCgpOworICAgIGZsb2F0IGFkanVzdGVkWSA9
IGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCkueSgpOworICAgIFBvc2l0aW9uSW5mb3JtYXRpb25N
YXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoQ1NTUHJvcGVydHlMZWZ0KTsKKyAgICBpZiAoaXQg
IT0gbWFwLmVuZCgpKSB7CisgICAgICAgIExlbmd0aCBsZWZ0ID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgaW50IHZpc2libGVFZGdlTGVmdCA9IHN0ZDo6bWF4KG1fdmlzaWJsZUNvbnRlbnRzUmVjdC54
KCksIDApOworICAgICAgICBpZiAobGVmdC5pc1BlcmNlbnQoKSkKKyAgICAgICAgICAgIGFkanVz
dGVkWCA9IHZpc2libGVFZGdlTGVmdCArIGxlZnQuZ2V0RmxvYXRWYWx1ZSgpICogbV92aXNpYmxl
Q29udGVudHNSZWN0LndpZHRoKCkgLyAxMDA7CisgICAgICAgIGVsc2UgLy8gbGVmdC5pc0ZpeGVk
KCkKKyAgICAgICAgICAgIGFkanVzdGVkWCA9IHZpc2libGVFZGdlTGVmdCArIGxlZnQuZ2V0Rmxv
YXRWYWx1ZSgpICogbV9jb250ZW50c1NjYWxlOworICAgIH0gZWxzZSB7CisgICAgICAgIGl0ID0g
bWFwLmZpbmQoQ1NTUHJvcGVydHlSaWdodCk7CisgICAgICAgIGlmIChpdCE9IG1hcC5lbmQoKSkg
eworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGlu
dCB2aXNpYmxlRWRnZVJpZ2h0ID0gc3RkOjptaW4obV92aXNpYmxlQ29udGVudHNSZWN0Lm1heFgo
KSwgKGludCkobV9jb250ZW50c1NpemUud2lkdGgoKSkpOworICAgICAgICAgICAgaWYgIChyaWdo
dC5pc1BlcmNlbnQoKSkKKyAgICAgICAgICAgICAgICBhZGp1c3RlZFggPSB2aXNpYmxlRWRnZVJp
Z2h0IC0gcmlnaHQuZ2V0RmxvYXRWYWx1ZSgpICogbV92aXNpYmxlQ29udGVudHNSZWN0LndpZHRo
KCkgLyAxMDAgLSBncmFwaGljc0xheWVyLT5zaXplKCkud2lkdGgoKTsKKyAgICAgICAgICAgIGVs
c2UgLy8gcmlnaHQuaXNGaXhlZCgpCisgICAgICAgICAgICAgICAgYWRqdXN0ZWRYID0gdmlzaWJs
ZUVkZ2VSaWdodCAtIHJpZ2h0LmdldEZsb2F0VmFsdWUoKSAqIG1fY29udGVudHNTY2FsZSAtIGdy
YXBoaWNzTGF5ZXItPnNpemUoKS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaXQg
PSBtYXAuZmluZChDU1NQcm9wZXJ0eVRvcCk7CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkgewor
ICAgICAgICBMZW5ndGggdG9wID0gaXQtPnNlY29uZDsKKyAgICAgICAgaW50IHZpc2libGVFZGdl
VG9wID0gc3RkOjptYXgobV92aXNpYmxlQ29udGVudHNSZWN0LnkoKSwgMCk7CisgICAgICAgIGlm
ICh0b3AuaXNQZXJjZW50KCkpCisgICAgICAgICAgICBhZGp1c3RlZFkgPSB2aXNpYmxlRWRnZVRv
cCArIHRvcC5nZXRGbG9hdFZhbHVlKCkgKiBtX3Zpc2libGVDb250ZW50c1JlY3QuaGVpZ2h0KCkg
LyAxMDA7CisgICAgICAgIGVsc2UgLy8gdG9wLmlzRml4ZWQoKQorICAgICAgICAgICAgYWRqdXN0
ZWRZID0gdmlzaWJsZUVkZ2VUb3AgKyB0b3AuZ2V0RmxvYXRWYWx1ZSgpICogbV9jb250ZW50c1Nj
YWxlOworICAgIH0gZWxzZSB7CisgICAgICAgIGl0ID0gbWFwLmZpbmQoQ1NTUHJvcGVydHlCb3R0
b20pOworICAgICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKSB7CisgICAgICAgICAgICBMZW5ndGgg
Ym90dG9tID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGludCB2aXNpYmxlRWRnZUJvdHRvbSA9
IHN0ZDo6bWluKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5tYXhZKCksIChpbnQpKG1fY29udGVudHNT
aXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBpZiAgKGJvdHRvbS5pc1BlcmNlbnQoKSkKKyAg
ICAgICAgICAgICAgICBhZGp1c3RlZFkgPSB2aXNpYmxlRWRnZUJvdHRvbSAtIGJvdHRvbS5nZXRG
bG9hdFZhbHVlKCkgKiBtX3Zpc2libGVDb250ZW50c1JlY3QuaGVpZ2h0KCkgLyAxMDAgLSBncmFw
aGljc0xheWVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBlbHNlIC8vIGJvdHRvbS5p
c0ZpeGVkKCkKKyAgICAgICAgICAgICAgICBhZGp1c3RlZFkgPSB2aXNpYmxlRWRnZUJvdHRvbSAt
IGJvdHRvbS5nZXRGbG9hdFZhbHVlKCkgKiBtX2NvbnRlbnRzU2NhbGUgLSBncmFwaGljc0xheWVy
LT5zaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBncmFwaGljc0xheWVy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KGFkanVzdGVkWCwgYWRqdXN0ZWRZKSk7Cit9CisKK3Zv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMo
KQoreworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOwor
ICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcihpdC0+
c2Vjb25kKTsKK30KKwogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYW1l
dGVycyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5mbykKIHsKICAgICBXZWJMYXllcklEIGlk
ID0gbGF5ZXJJbmZvLmlkOwogICAgIGVuc3VyZUxheWVyKGlkKTsKICAgICBMYXllck1hcDo6aXRl
cmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKICAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IGl0LT5zZWNvbmQ7CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5
ZXIgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcio+KGxheWVyKTsKICAg
ICBib29sIG5lZWRzVG9VcGRhdGVJbWFnZVRpbGVzID0gbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVk
IHx8IChsYXllckluZm8uY29udGVudHNSZWN0ICE9IGxheWVyLT5jb250ZW50c1JlY3QoKSAmJiBs
YXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7CiAKICAgICBsYXllci0+c2V0TmFtZShsYXll
ckluZm8ubmFtZSk7CkBAIC0xODksNyArMjYxLDE5IEBACiAgICAgbGF5ZXItPnNldENvbnRlbnRz
T3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7CiAgICAgbGF5ZXItPnNldENvbnRlbnRz
UmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50
KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldEhhc0ZpeGVk
UG9zaXRpb24obGF5ZXJJbmZvLmhhc0ZpeGVkUG9zaXRpb24pOwogCisgICAgUG9zaXRpb25JbmZv
cm1hdGlvbk1hcCYgbWFwID0gZ3JhcGhpY3NMYXllci0+Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9u
KCk7CisgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGF5
ZXJJbmZvLmZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbi5lbmQoKTsKKyAgICBmb3IgKFBvc2l0aW9u
SW5mb3JtYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGF5ZXJJbmZvLmZpeGVkUG9zaXRp
b25JbmZvcm1hdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1hcC5hZGQo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKworICAgIGlmIChncmFwaGljc0xheWVyLT5oYXNGaXhl
ZFBvc2l0aW9uKCkpIHsKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQobGF5ZXJJbmZvLmlkLCBs
YXllcik7CisgICAgICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcihsYXllcik7CisgICAg
fSBlbHNlCisgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySW5mby5pZCk7CisKICAg
ICBpZiAobmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMpCiAgICAgICAgIGFzc2lnbkltYWdlVG9MYXll
cihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwogCkBAIC0yNDEsNiArMzI1
LDcgQEAKIAogICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgbV9sYXllcnMucmVt
b3ZlKGxheWVySUQpOworICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOwogICAgIGRl
bGV0ZSBsYXllcjsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCShyZXZpc2lvbiAxMTE3MTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksNiArMTM5LDEwIEBACiAgICAgUVNpemVGIHNjYWxlZFNpemUgPSBjb250ZW50c1NpemUg
KiBjb250ZW50c1NjYWxlOwogICAgIHEtPnNldFNpemUoc2NhbGVkU2l6ZSk7CiAgICAgdmlld3Bv
cnRJdGVtLT51cGRhdGVDb250ZW50c1NpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBEcmF3aW5nQXJl
YVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKKyAgICBp
ZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpKQorICAg
ICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnNldENvbnRlbnRzU2l6ZShX
ZWJDb3JlOjpGbG9hdFNpemUoY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWln
aHQoKSkpOwogfQogCiBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5
LmgJKHJldmlzaW9uIDExMTcxOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogICAgIHZvaWQg
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXApOwogICAg
IHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KTsKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNldENv
bnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKICAgICB2b2lkIGRpZFJlbmRlckZy
YW1lKCk7CiAgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgJKHJldmlzaW9uIDExMTcxOCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4
dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2lu
Z1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiAgICAgdm9pZCBzeW5jUmVtb3RlQ29u
dGVudCgpOworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgZmxvYXQgc2NhbGUpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKQEAgLTgwLDggKzgxLDEx
IEBACiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHBhaW50Q29u
dGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgeyB9CiAgICAgdm9pZCBjYWxsT25NYWluVHJlYWQoY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYpOworICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVyKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXll
cnMoKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKj4gTGF5ZXJNYXA7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXpl
OwogICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwogICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKIApAQCAtMTEwLDYgKzExNCw3IEBACiAgICAgVmVjdG9yPFdlYkxh
eWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CiAKICAgICBMYXllck1hcCBtX2xheWVyczsKKyAgICBM
YXllck1hcCBtX2ZpeGVkTGF5ZXJzOwogICAgIFdlYkxheWVySUQgbV9yb290TGF5ZXJJRDsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJv
eHkuY3BwCShyZXZpc2lvbiAxMTE3MTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCwxMSBAQAog
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1h
Z2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOwogfQogCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXpl
KQoreworICAgIG1fcmVuZGVyZXItPnNldENvbnRlbnRzU2l6ZShjb250ZW50c1NpemUpOworfQor
CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZl
Y3RvcikKIHsKICAgICBtX3JlbmRlcmVyLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNj
YWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
R3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiAxMTE3MTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBkaWRT
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
ciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogfTsKIH0K
IApAQCAtMTEzLDYgKzExNCwxMCBAQAogICAgIEltYWdlKiBpbWFnZSgpIHsgcmV0dXJuIG1faW1h
Z2UuZ2V0KCk7IH0KICAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlKTsKIAor
ICAgIFdlYktpdDo6UG9zaXRpb25JbmZvcm1hdGlvbk1hcCYgZml4ZWRQb3NpdGlvbkluZm9ybWF0
aW9uKCkgeyByZXR1cm4gbV9maXhlZFBvc2l0aW9uSW5mb3JtYXRpb247IH0KKyAgICBib29sIGhh
c0ZpeGVkUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpeGVkUG9zaXRpb247IH0KKyAg
ICB2b2lkIHNldEhhc0ZpeGVkUG9zaXRpb24oYm9vbCBpc0ZpeGVkKSB7IG1faGFzRml4ZWRQb3Np
dGlvbiA9IGlzRml4ZWQ7IH0KKwogICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX21hc2tUYXJnZXQ7IH0KICAgICB2b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhp
Y3NMYXllciogbGF5ZXIpIHsgbV9tYXNrVGFyZ2V0ID0gbGF5ZXI7IH0KIApAQCAtMTUyLDEyICsx
NTcsMTUgQEAKICAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheSA6IDE7CiAgICAgYm9vbCBt
X2hhc1BlbmRpbmdBbmltYXRpb25zIDogMTsKICAgICBib29sIG1faW5VcGRhdGVNb2RlIDogMjsK
KyAgICBib29sIG1faGFzRml4ZWRQb3NpdGlvbiA6IDE7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5n
ZSgpOwogICAgIHZvaWQgbm90aWZ5Q2hhbmdlUmVjdXJzaXZlbHkoKTsKICAgICB2b2lkIGNyZWF0
ZUJhY2tpbmdTdG9yZSgpOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3RyYW5zZm9ybUFuaW1hdGlv
bnM7CiAKKyAgICBXZWJLaXQ6OlBvc2l0aW9uSW5mb3JtYXRpb25NYXAgbV9maXhlZFBvc2l0aW9u
SW5mb3JtYXRpb247CisKICAgICBib29sIHNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3Jt
QW5pbWF0aW9ucygpIGNvbnN0OwogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDExMTcxOCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxNyw2ICs0MTcsOCBAQAogICAgIGlmIChXZWJHcmFwaGljc0xheWVy
KiByZXBsaWNhID0gdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKICAgICAgICAg
cmVwbGljYS0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKKyAgICBt
X3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNGaXhlZExheWVycygpOworCiAgICAgc3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCkBAIC00NTIsNyArNDU0LDEyIEBACiAgICAg
ICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOwogICAgICAgICBtX2NvbnRl
bnROZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xl
YXIoKTsKKyAgICAgICAgbV9sYXllckluZm8uaGFzRml4ZWRQb3NpdGlvbiA9IGhhc0ZpeGVkUG9z
aXRpb24oKTsKIAorICAgICAgICBQb3NpdGlvbkluZm9ybWF0aW9uTWFwOjppdGVyYXRvciBlbmQg
PSBtX2ZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbi5lbmQoKTsKKyAgICAgICAgZm9yIChQb3NpdGlv
bkluZm9ybWF0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRQb3NpdGlvbkluZm9ybWF0aW9u
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fbGF5ZXJJbmZvLmZpeGVk
UG9zaXRpb25JbmZvcm1hdGlvbi5hZGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClb
aV0pKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHJldmlzaW9uIDExMTcxOCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI1Miw2ICsyNTYs
NDAgQEAKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6
RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkpOwogfQogCitzdGF0aWMgdm9pZCB1
cGRhdGVGaXhlZFBvc2l0aW9uSW5mb3JtYXRpb25Gb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVy
TGF5ZXIpCit7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXIt
PmJhY2tpbmcoKTsKKyAgICBpZiAoYmFja2luZykgeworICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICAgICAgaWYgKHN0eWxl
KSB7CisgICAgICAgICAgICBpZiAocmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzUG9zaXRpb25l
ZCgpICYmIHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZp
eGVkUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyID0gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGJhY2tpbmctPmdyYXBoaWNz
TGF5ZXIoKSk7CisgICAgICAgICAgICAgICAgUG9zaXRpb25JbmZvcm1hdGlvbk1hcCYgbWFwID0g
Z3JhcGhpY3NMYXllci0+Zml4ZWRQb3NpdGlvbkluZm9ybWF0aW9uKCk7CisgICAgICAgICAgICAg
ICAgaWYgKHN0eWxlLT50b3AoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZS0+dG9wKCkuaXNGaXhlZCgp
KQorICAgICAgICAgICAgICAgICAgICBtYXAuYWRkKENTU1Byb3BlcnR5VG9wLCBzdHlsZS0+dG9w
KCkpOworICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+cmlnaHQoKS5pc1BlcmNlbnQoKSB8fCBz
dHlsZS0+cmlnaHQoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICAgICAgICAgIG1hcC5hZGQoQ1NT
UHJvcGVydHlSaWdodCwgc3R5bGUtPnJpZ2h0KCkpOworICAgICAgICAgICAgICAgIGlmIChzdHls
ZS0+Ym90dG9tKCkuaXNQZXJjZW50KCkgfHwgc3R5bGUtPmJvdHRvbSgpLmlzRml4ZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgbWFwLmFkZChDU1NQcm9wZXJ0eUJvdHRvbSwgc3R5bGUtPmJvdHRv
bSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPmxlZnQoKS5pc1BlcmNlbnQoKSB8fCBz
dHlsZS0+bGVmdCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbWFwLmFkZChDU1NQ
cm9wZXJ0eUxlZnQsIHN0eWxlLT5sZWZ0KCkpOworICAgICAgICAgICAgICAgIGdyYXBoaWNzTGF5
ZXItPnNldEhhc0ZpeGVkUG9zaXRpb24oZ3JhcGhpY3NMYXllci0+aGFzRml4ZWRQb3NpdGlvbigp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZW5kZXJMYXll
ci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVGaXhlZFBvc2l0aW9uSW5mb3JtYXRpb25G
b3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXIt
Pm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0ZUZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbkZv
ckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UXQ6OnN5bmNGaXhlZExheWVycygpCit7CisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJM
YXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3Np
dG9yKCktPnJvb3RSZW5kZXJMYXllcigpOworICAgIHVwZGF0ZUZpeGVkUG9zaXRpb25JbmZvcm1h
dGlvbkZvckxheWVyKHJvb3RSZW5kZXJMYXllcik7Cit9CisKIHZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiB7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCShyZXZpc2lvbiAxMTE3MTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc0LDYgKzc0LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lk
IHN5bmNGaXhlZExheWVycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUcmVl
SG9zdFF0KFdlYlBhZ2UqKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDExMTcxOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMyLDYgKzgz
Miw4IEBACiAgICAgLy8gQWx3YXlzIHJlc2V0IGV2ZW4gd2hlbiBlbXB0eS4KICAgICB2aWV3LT5z
ZXRGaXhlZExheW91dFNpemUodGFyZ2V0TGF5b3V0U2l6ZSk7CiAKKyAgICBtX3BhZ2UtPnNldHRp
bmdzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCh0
cnVlKTsKKwogICAgIC8vIFNjaGVkdWxlIGEgbGF5b3V0IHRvIHVzZSB0aGUgbmV3IHRhcmdldCBz
aXplLgogICAgIGlmICghdmlldy0+bGF5b3V0UGVuZGluZygpKSB7CiAgICAgICAgIHZpZXctPnNl
dE5lZWRzTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTE4MDYpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NSBAQAorMjAx
Mi0wMy0yMiAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAg
U3VwcG9ydCBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBpbiBRdCBXZWJLaXQyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTc4NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgc2V0dGluZyBmb3Ig
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkIGFuZCB0dXJu
ZWQgaXQgb24uCisgICAgICAgIEFzIHdlIHNjcm9sbCwgYWRqdXN0IHRoZSBwb3NpdGlvbiBvZiBs
YXllcnMgd2l0aCBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cy4KKyAgICAgICAgVGhpcyBpcyBub3Qg
ZG9uZSBmb3IgcGluY2hpbmcuIE9ubHkgd2hlbiB0aGUgcGluY2ggZ2VzdHVyZSBpcyBmaW5pc2hl
ZCwgdGhlIHBvc2l0aW9uIGlzIGFkanVzdGVkLgorCisgICAgICAgICogU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckluZm86OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
V2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZS5jcHA6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAo
TGF5ZXJUcmVlSG9zdFByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRU
b0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJl
cjo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlv
bkZvckFsbEZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oOgorICAgICAgICAoV2ViTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5oOgorICAgICAgICAoV2ViR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpmaXhlZFBvc2l0aW9uSW5mb3JtYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6aGFzRml4ZWRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRIYXNGaXhlZFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0UmVzaXplc1RvQ29udGVu
dHNVc2luZ0xheW91dFNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRldGFj
aExheWVyKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZUZpeGVk
UG9zaXRpb25JbmZvcm1hdGlvbkZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisKIDIwMTIt
MDMtMjIgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPHJha3Vjb0BGcmVlQlNELm9yZz4KIAogICAg
ICAgICBbQ01ha2VdIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIxMTE3NzguCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCShyZXZpc2lvbiAxMTE3
MTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICAgICAvLyBXZSBoYXZlIHRvIGRpdmlkZSBpdCB0
byBzZXZlcmFsIGxpbmVzLCBiZWNhdXNlIENvcmVJUEM6OkluL091dCB0YWtlcyBhIG1heGltdW0g
b2YgMTAgYXJndW1lbnRzLgogICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihpZCwgbmFt
ZSwgcGFyZW50LCBjaGlsZHJlbiwgZmxhZ3MsIHJlcGxpY2EsIG1hc2ssIGltYWdlQmFja2luZ1N0
b3JlSUQpKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4ocG9zLCBzaXplLCB0cmFu
c2Zvcm0sIG9wYWNpdHksIGFuY2hvclBvaW50LCBjaGlsZHJlblRyYW5zZm9ybSwgY29udGVudHNS
ZWN0LCBhbmltYXRpb25zKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKGZpeGVk
UG9zaXRpb25JbmZvcm1hdGlvbikpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQpAQCAt
NDUsNiArNDYsOSBAQAogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZv
LnBvcywgaW5mby5zaXplLCBpbmZvLnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hv
clBvaW50LCBpbmZvLmNoaWxkcmVuVHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCwgaW5mby5h
bmltYXRpb25zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLmZpeGVkUG9zaXRpb25JbmZvcm1hdGlvbikpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCShyZXZpc2lvbiAxMTE3MTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxMSArMjgsMTQgQEAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9MZW5ndGguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdHlwZWRlZiB1aW50MzJfdCBXZWJMYXllcklEOwogZW51bSB7IEludmFsaWRXZWJM
YXllcklEID0gMCB9OwordHlwZWRlZiBIYXNoTWFwPGludCwgV2ViQ29yZTo6TGVuZ3RoPiBQb3Np
dGlvbkluZm9ybWF0aW9uTWFwOwogCiBzdHJ1Y3QgV2ViTGF5ZXJVcGRhdGVJbmZvIHsKICAgICBX
ZWJMYXllclVwZGF0ZUluZm8oKSB7IH0KQEAgLTEwOSw5ICsxMTIsMTEgQEAKICAgICAgICAgICAg
IGJvb2wgY29udGVudE5lZWRzRGlzcGxheSA6IDE7CiAgICAgICAgICAgICBib29sIGltYWdlSXNV
cGRhdGVkOiAxOwogICAgICAgICAgICAgYm9vbCBpc1Jvb3RMYXllcjogMTsKKyAgICAgICAgICAg
IGJvb2wgaGFzRml4ZWRQb3NpdGlvbiA6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVk
IGludCBmbGFnczsKICAgICB9OworICAgIFBvc2l0aW9uSW5mb3JtYXRpb25NYXAgZml4ZWRQb3Np
dGlvbkluZm9ybWF0aW9uOwogICAgIFZlY3RvcjxXZWJMYXllcklEPiBjaGlsZHJlbjsKICAgICBW
ZWN0b3I8V2ViTGF5ZXJBbmltYXRpb24+IGFuaW1hdGlvbnM7CiAgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gaW1hZ2VCYWNraW5nU3RvcmU7Cg==
</data>
<flag name="review"
          id="137388"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133667</attachid>
            <date>2012-03-24 18:32:36 -0700</date>
            <delta_ts>2012-04-01 05:41:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>32774</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMjAx
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAz
LTI0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBTdXBw
b3J0IGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9maXhlZC1wb3Np
dGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0yMyAgRGF2ZSBNaWNoYWVsICA8ZG1pY2hhZWxA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbGFuZGluZyhyMTExNzU0KTogSFRNTFBsdWdpbkVs
ZW1lbnQgaXMgbm90IGRlc3Ryb3llZCBvbiByZWxvYWQgb3IgbmF2aWdhdGlvbiBpZiBnZXROUE9i
amVjdCBpcyBjYWxsZWQKSW5kZXg6IE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTWFudWFsVGVzdHMvZml4ZWQtcG9zaXRpb24uaHRtbAkocmV2aXNpb24gMCkK
KysrIE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzggQEAKKzxodG1sPjxoZWFkPgorCis8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJz
ZXQ9d2luZG93cy0xMjUxIiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPgorPHN0eWxlPgorLmQx
e3Bvc2l0aW9uOmZpeGVkO3RvcDo1MCU7cmlnaHQ6NTAlO3otaW5kZXg6MjtvdmVyZmxvdzpoaWRk
ZW47fQorLmQye3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTo1ZW07bGVmdDo1MDt6LWluZGV4OjI7b3Zl
cmZsb3c6aGlkZGVuO30KKy5vIHtiYWNrZ3JvdW5kOmdyZWVuO2hlaWdodDo0MHB4O3dpZHRoOjIw
MHB4O30KKy50IHsgd2lkdGg6MjAwMHB4OyBoZWlnaHQ6MTk4cHg7YmFja2dyb3VuZC1jb2xvcjog
bGlnaHRncmF5OyBib3JkZXI6IDFweCBzb2xpZCBibHVlO30KK2JvZHkgeyBtYXJnaW46IDBweDsg
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJHcmFkaWVudCI+Cis8ZGl2IGNsYXNz
PSJkMSI+PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48L2Rpdj4KKzxkaXYgY2xh
c3M9ImQyIj48ZGl2IGNsYXNzPSJvIj5UaGlzIGlzIGEgdGVzdDwvZGl2PjwvZGl2PgorPGRpdiBj
bGFzcz0idCI+CiswMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMDAKKzwvZGl2PgorPGRp
diBjbGFzcz0idCI+Cis0MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cis2MDAKKzwvZGl2Pgor
PGRpdiBjbGFzcz0idCI+Cis4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisxMDAwCis8L2Rp
dj4KKzxkaXYgY2xhc3M9InQiPgorMTIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzE0MDAK
KzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisxNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgor
MTgwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzIwMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0i
dCI+CisyMjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjQwMAorPC9kaXY+Cis8ZGl2IGNs
YXNzPSJ0Ij4KKzI2MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyODAwCis8L2Rpdj4KKzxk
aXYgY2xhc3M9InQiPgorMzAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzMyMDAKKzwvZGl2
PgorPGRpdiBjbGFzcz0idCI+CiszNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzYwMAor
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzM4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cis0
MDAwCis8L2Rpdj4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTIw
MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzOSBAQAorMjAxMi0wMy0yNCAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+
CisKKyAgICAgICAgU3VwcG9ydCBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBpbiBRdCBXZWJLaXQy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTc4Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdGhl
IHNldHRpbmcgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkIGlz
IHRydWUsIHdlIG5lZWQgdG8KKyAgICAgICAgcGFzcyB0aGUgZml4ZWQgcG9zaXRpb24gaW5mb3Jt
YXRpb24gdXAgdG8gdGhlIFVJIHByb2Nlc3MsIHNvIHRoYXQgaXQgY2FuIHJlLXBvc2l0aW9uCisg
ICAgICAgIHRoZSBmaXhlZCBwb3NpdGlvbiBsYXllciBhcyBuZWVkZWQuIEFkZGVkIHRoZSBuZWVk
ZWQgaW5mb3JhdGlvbiB0byBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci4KKworICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0Rml4
ZWRWaXNpYmxlQ29udGVudFJlY3QpOiBMZXQgV2ViQ29yZSBrbm93IHRoYXQgdGhlIGZpeGVkIHBv
c2l0aW9uIAorICAgICAgICBsYXllciBtb3ZlZCwgc28gdGhhdCBpdCB3aWxsIG5vdCB0aGluayBp
dCBpcyBoaWRkZW4gYW5kIGlnbm9yZSBpdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllck9mZnNldEZyb21WaWV3cG9ydC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoR3JhcGhpY3NMYXllck9mZnNldEZyb21WaWV3cG9ydCk6IERl
ZmluZSBhIHN0cnVjdHVyZSBmb3IgcGFzc2luZyB0aGUgZml4ZWQgcG9zaXRpb24gaW5mb3JtYXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0OjpH
cmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQ6Omhhc1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0OjpoYXNCb3R0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllck9mZnNldEZyb21WaWV3cG9ydDo6aGFzTGVmdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0OjpoYXNSaWdodCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcDogQ2FsY3VsYXRlIHRoZSBuZXcgcG9zaXRpb24KKyAgICAgICAgYmFzZWQgb24gdGhl
IGZpeGVkIHBvc2l0aW9uIHN0eWxlIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0T2Zmc2V0RnJv
bVZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpjYWxjdWxhdGVPZmZzZXRGcm9tVmlld3BvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0
KToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzY3JvbGxPZmZzZXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOiBSZXF1ZXN0
IHRoZSBhZGp1c3RlZCBwb3NpdGlvbiBhbmQgc2V0IAorICAgICAgICBpbiBpdHMgdHJhbnNmb3Jt
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZVNlbGYpOgorCiAyMDEyLTAzLTI0ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5l
U3R5bGVUb05vZGVSYW5nZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlz
aW9uIDExMTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcxMCw4ICsxNzEwLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGaXhlZFZp
c2libGVDb250ZW50UmUKIHsKICAgICBJbnRTaXplIG9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwog
ICAgIFNjcm9sbFZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGVDb250ZW50
UmVjdCk7Ci0gICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICBpZiAob2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCktPnNldHRp
bmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQor
ICAgICAgICAgICAgdXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAg
IHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOworICAgIH0KICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+
Y2xpZW50KCktPmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllck9mZnNldEZyb21WaWV3
cG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllck9mZnNl
dEZyb21WaWV3cG9ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnRfaAorI2Rl
ZmluZSBHcmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0X2gKKworI2luY2x1ZGUgIkxlbmd0
aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBHcmFwaGljc0xheWVyT2Zmc2V0
RnJvbVZpZXdwb3J0IHsKKworICAgIEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQoKSAK
KyAgICAgICAgOiBsYXllclNpZGUoTm9TaWRlKQorICAgIHsgfQorCisgICAgZW51bSBMYXllclNp
ZGUgeworICAgICAgICBOb1NpZGUgPSAwLAorICAgICAgICBUb3BTaWRlID0gMSwKKyAgICAgICAg
Qm90dG9tU2lkZSA9IDIsCisgICAgICAgIExlZnRTaWRlID0gNCwKKyAgICAgICAgUmlnaHRTaWRl
ID0gOAorICAgIH07CisKKyAgICB0eXBlZGVmIGludCBMYXllclNpZGVzOworICAgIGJvb2wgaGFz
VG9wKCkgeyByZXR1cm4gbGF5ZXJTaWRlICYgVG9wU2lkZTsgfQorICAgIGJvb2wgaGFzQm90dG9t
KCkgeyByZXR1cm4gbGF5ZXJTaWRlICYgQm90dG9tU2lkZTsgfQorICAgIGJvb2wgaGFzTGVmdCgp
IHsgcmV0dXJuIGxheWVyU2lkZSAmIExlZnRTaWRlOyB9CisgICAgYm9vbCBoYXNSaWdodCgpIHsg
cmV0dXJuIGxheWVyU2lkZSAmIFJpZ2h0U2lkZTsgfQorCisgICAgTGF5ZXJTaWRlcyBsYXllclNp
ZGU7CisgICAgTGVuZ3RoIGhvcml6b250YWxPZmZzZXQ7CisgICAgTGVuZ3RoIHZlcnRpY2FsT2Zm
c2V0OworfTsKK30KKyNlbmRpZiAvLyBHcmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0X2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAkocmV2aXNp
b24gMTExODgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmgiCiAKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyTGF5ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzkxLDQgKzM5Miw0
NiBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRGaWx0CiB9CiAjZW5kaWYK
IAordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0T2Zmc2V0RnJvbVZpZXdwb3J0
KEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQ6OkxheWVyU2lkZSBzaWRlLCBjb25zdCBM
ZW5ndGgmIGhvcml6b250YWxPZmZzZXQsIGNvbnN0IExlbmd0aCYgdmVydGljYWxPZmZzZXQpCit7
CisgICAgbV9vZmZzZXRGcm9tVmlld3BvcnQubGF5ZXJTaWRlID0gc2lkZTsKKyAgICBtX29mZnNl
dEZyb21WaWV3cG9ydC5ob3Jpem9udGFsT2Zmc2V0ID0gaG9yaXpvbnRhbE9mZnNldDsKKyAgICBt
X29mZnNldEZyb21WaWV3cG9ydC52ZXJ0aWNhbE9mZnNldCA9IHZlcnRpY2FsT2Zmc2V0OworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRPZmZzZXRGcm9tVmlld3BvcnQo
Y29uc3QgR3JhcGhpY3NMYXllck9mZnNldEZyb21WaWV3cG9ydCYgb2Zmc2V0RnJvbVZpZXdwb3J0
KQoreworICAgIG1fb2Zmc2V0RnJvbVZpZXdwb3J0ID0gb2Zmc2V0RnJvbVZpZXdwb3J0OworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjYWxjdWxhdGVPZmZzZXRGcm9tVmll
d3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgY29uc3QgRmxvYXRTaXpl
JiBjb250ZW50c1NpemUpCit7CisgICAgQVNTRVJUKGZpeGVkVG9WaWV3cG9ydCgpKTsKKyAgICBm
bG9hdCBhZGp1c3RlZFggPSBwb3NpdGlvbigpLngoKTsKKyAgICBmbG9hdCBhZGp1c3RlZFkgPSBw
b3NpdGlvbigpLnkoKTsKKyAgICBpZiAobV9vZmZzZXRGcm9tVmlld3BvcnQuaGFzTGVmdCgpKSB7
CisgICAgICAgIExlbmd0aCBsZWZ0ID0gbV9vZmZzZXRGcm9tVmlld3BvcnQuaG9yaXpvbnRhbE9m
ZnNldDsKKyAgICAgICAgaW50IHZpc2libGVFZGdlTGVmdCA9IHN0ZDo6bWF4KHZpc2libGVDb250
ZW50c1JlY3QueCgpLCAwKTsKKyAgICAgICAgYWRqdXN0ZWRYID0gdmlzaWJsZUVkZ2VMZWZ0ICsg
ZmxvYXRWYWx1ZUZvckxlbmd0aChsZWZ0LCB2aXNpYmxlQ29udGVudHNSZWN0LndpZHRoKCkpOwor
ICAgIH0gZWxzZSBpZiAobV9vZmZzZXRGcm9tVmlld3BvcnQuaGFzUmlnaHQoKSkgeworICAgICAg
ICBMZW5ndGggcmlnaHQgPSBtX29mZnNldEZyb21WaWV3cG9ydC5ob3Jpem9udGFsT2Zmc2V0Owor
ICAgICAgICBpbnQgdmlzaWJsZUVkZ2VSaWdodCA9IHN0ZDo6bWluKHZpc2libGVDb250ZW50c1Jl
Y3QubWF4WCgpLCAoaW50KShjb250ZW50c1NpemUud2lkdGgoKSkpOworICAgICAgICBhZGp1c3Rl
ZFggPSB2aXNpYmxlRWRnZVJpZ2h0IC0gZmxvYXRWYWx1ZUZvckxlbmd0aChyaWdodCwgdmlzaWJs
ZUNvbnRlbnRzUmVjdC53aWR0aCgpKSAtIHNpemUoKS53aWR0aCgpOworICAgIH0KKworICAgIGlm
IChtX29mZnNldEZyb21WaWV3cG9ydC5oYXNUb3AoKSkgeworICAgICAgICBMZW5ndGggdG9wID0g
bV9vZmZzZXRGcm9tVmlld3BvcnQudmVydGljYWxPZmZzZXQ7CisgICAgICAgIGludCB2aXNpYmxl
RWRnZVRvcCA9IHN0ZDo6bWF4KHZpc2libGVDb250ZW50c1JlY3QueSgpLCAwKTsKKyAgICAgICAg
YWRqdXN0ZWRZID0gdmlzaWJsZUVkZ2VUb3AgKyBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRvcCwgdmlz
aWJsZUNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmIChtX29mZnNldEZyb21W
aWV3cG9ydC5oYXNCb3R0b20oKSkgeworICAgICAgICBMZW5ndGggYm90dG9tID0gbV9vZmZzZXRG
cm9tVmlld3BvcnQudmVydGljYWxPZmZzZXQ7CisgICAgICAgIGludCB2aXNpYmxlRWRnZUJvdHRv
bSA9IHN0ZDo6bWluKHZpc2libGVDb250ZW50c1JlY3QubWF4WSgpLCAoaW50KShjb250ZW50c1Np
emUuaGVpZ2h0KCkpKTsKKyAgICAgICAgYWRqdXN0ZWRZID0gdmlzaWJsZUVkZ2VCb3R0b20gLSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKGJvdHRvbSwgdmlzaWJsZUNvbnRlbnRzUmVjdC5oZWlnaHQoKSkg
LSBzaXplKCkuaGVpZ2h0KCk7CisgICAgfQorICAgIG1fc2Nyb2xsT2Zmc2V0LnNldFgoYWRqdXN0
ZWRYKTsKKyAgICBtX3Njcm9sbE9mZnNldC5zZXRZKGFkanVzdGVkWSk7CisgICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJMYXllcjo6UG9zaXRpb25DaGFuZ2UpOworICAgIHN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAkocmV2aXNpb24gMTExODgwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllckNsaWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgog
CkBAIC05MCw2ICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Rpc3BsYXkoKSBjb25z
dCB7IHJldHVybiBtX25lZWRzRGlzcGxheTsgfQogICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9uZWVkc0Rpc3BsYXlSZWN0KTsg
fQogCisgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9W
aWV3cG9ydDsgfQorICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBt
X2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0KKyAgICB2b2lkIHNldE9mZnNldEZyb21WaWV3
cG9ydChHcmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0OjpMYXllclNpZGUsIGNvbnN0IExl
bmd0aCYsIGNvbnN0IExlbmd0aCYpOworICAgIHZvaWQgc2V0T2Zmc2V0RnJvbVZpZXdwb3J0KGNv
bnN0IEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQmKTsKKyAgICB2b2lkIGNhbGN1bGF0
ZU9mZnNldEZyb21WaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBj
b25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSk7CisgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9mZnNldDsgfQorCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmKTsKICNlbmRpZgpAQCAtMTAxLDExICsxMDksMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
c3luY1F1ZXVlZDsKICAgICBpbnQgbV9jaGFuZ2VNYXNrOwogICAgIGJvb2wgbV9uZWVkc0Rpc3Bs
YXk7CisgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydDsKICAgICBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllciogbV9jb250ZW50c0xheWVyOwogICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxheVJl
Y3Q7CiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIHZvaWQg
YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI+Kik7CiAgICAgVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+IG1fYW5pbWF0aW9u
U3RhcnRlZFRpbWVyOworICAgIEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQgbV9vZmZz
ZXRGcm9tVmlld3BvcnQ7CisgICAgRmxvYXRQb2ludCBtX3Njcm9sbE9mZnNldDsKIH07CiAKIGlu
bGluZSBzdGF0aWMgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIHRvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckxheWVyLmNwcAkocmV2aXNpb24gMTExODgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzMyw3ICs0MzMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5n
CiAgICAgICAgIG1fc3RhdGUubmVlZHNEaXNwbGF5UmVjdC51bml0ZShncmFwaGljc0xheWVyLT5u
ZWVkc0Rpc3BsYXlSZWN0KCkpOwogICAgIG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzTGF5ZXIt
PmNvbnRlbnRzTGF5ZXIoKTsKIAotICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUu
cG9zKTsKKyAgICBtX3RyYW5zZm9ybS5zZXRQb3NpdGlvbihncmFwaGljc0xheWVyLT5maXhlZFRv
Vmlld3BvcnQoKSA/IGdyYXBoaWNzTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogbV9zdGF0ZS5wb3Mp
OwogICAgIG1fdHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fc3RhdGUuYW5jaG9yUG9pbnQpOwog
ICAgIG1fdHJhbnNmb3JtLnNldFNpemUobV9zdGF0ZS5zaXplKTsKICAgICBtX3RyYW5zZm9ybS5z
ZXRGbGF0dGVuaW5nKCFtX3N0YXRlLnByZXNlcnZlczNEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDExMjAxNCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU4IEBACisyMDEyLTAzLTI0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5v
a2lhLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0
IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgxNzg2CisKKyAgICAgICAgUGFzcyB0aGUgZml4ZWQgcG9zaXRpb24gaW5mb3JtYXRpb24gdG8g
dGhlIFVJIHByb2Nlc3MsIGFuZCB1c2UgaXQgdG8gYWRqdXN0IAorICAgICAgICB0aGUgdHJhbnNm
b3JtIG9mIGxheWVycyB3aXRoIGZpeGVkIHBvc2l0aW9uLgorICAgICAgICBXaGVuIHRoZSB2aWV3
cG9ydCBjaGFuZ2VzLCBkdWUgdG8gem9vbWluZyBvciBzY3JvbGxpbmcsIHdhbGsgdGhlIGxpc3Qg
b2YgZml4ZWQgbGF5ZXJzCisgICAgICAgIGFuZCByZS1hZGp1c3QuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZW5jb2RlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJMYXll
clRyZWVJbmZvLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNw
cDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChMYXllclRy
ZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1Np
emUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JBbGxGaXhlZExheWVycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKFdlYkxheWVy
VHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OnNldE9mZnNldEZyb21WaWV3cG9ydCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVy
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmZpeGVkVG9WaWV3
cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRGaXhlZFRvVmll
d3BvcnQpOgorICAgICAgICAoV2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjpvZmZzZXRGcm9tVmlld3BvcnQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0UmVz
aXplc1RvQ29udGVudHNVc2luZ0xheW91dFNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UXQ6OmRldGFjaExheWVyKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
Omhhc1Bvc2l0aW9uSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRG
cm9tVmlld3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6
c3luY0ZpeGVkTGF5ZXJzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UXQpOgorCiAyMDEyLTAzLTI0ICBK
ZXN1cyBTYW5jaGV6LVBhbGVuY2lhICA8amVzdXMucGFsZW5jaWFAb3BlbmJvc3NhLm9yZz4KIAog
ICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IFBhZ2VDbGllbnQ6OmlzVmlld1dpbmRvd0FjdGl2
ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCShy
ZXZpc2lvbiAxMTE4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgdm9pZCBXZWJMYXllckluZm86
OmVuY29kZShDb3JlSVBDOjpBcmd1bQogICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNl
dmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11bSBvZiAx
MCBhcmd1bWVudHMuCiAgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBw
YXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJ
RCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9y
bSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3Qs
IGFuaW1hdGlvbnMpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4ob2Zmc2V0RnJv
bVZpZXdwb3J0LmxheWVyU2lkZSwgb2Zmc2V0RnJvbVZpZXdwb3J0Lmhvcml6b250YWxPZmZzZXQs
IG9mZnNldEZyb21WaWV3cG9ydC52ZXJ0aWNhbE9mZnNldCkpOwogfQogCiBib29sIFdlYkxheWVy
SW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJ
bmZvJiBpbmZvKQpAQCAtNDUsNiArNDYsOSBAQCBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENv
cmVJUEM6OkFyZ3VtCiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8u
cG9zLCBpbmZvLnNpemUsIGluZm8udHJhbnNmb3JtLCBpbmZvLm9wYWNpdHksIGluZm8uYW5jaG9y
UG9pbnQsIGluZm8uY2hpbGRyZW5UcmFuc2Zvcm0sIGluZm8uY29udGVudHNSZWN0LCBpbmZvLmFu
aW1hdGlvbnMpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8ub2Zmc2V0RnJvbVZpZXdwb3J0LmxheWVyU2lkZSwgaW5m
by5vZmZzZXRGcm9tVmlld3BvcnQuaG9yaXpvbnRhbE9mZnNldCwgaW5mby5vZmZzZXRGcm9tVmll
d3BvcnQudmVydGljYWxPZmZzZXQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaAkocmV2aXNpb24gMTExODgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmll
d3BvcnQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTEwOSw5ICsxMTAsMTEgQEAgc3Ry
dWN0IFdlYkxheWVySW5mbyB7CiAgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkg
OiAxOwogICAgICAgICAgICAgYm9vbCBpbWFnZUlzVXBkYXRlZDogMTsKICAgICAgICAgICAgIGJv
b2wgaXNSb290TGF5ZXI6IDE7CisgICAgICAgICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7
CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICB9OworICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQgb2Zmc2V0RnJvbVZpZXdwb3J0
OwogICAgIFZlY3RvcjxXZWJMYXllcklEPiBjaGlsZHJlbjsKICAgICBWZWN0b3I8V2ViTGF5ZXJB
bmltYXRpb24+IGFuaW1hdGlvbnM7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1hZ2VC
YWNraW5nU3RvcmU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9z
dFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcAkocmV2aXNpb24gMTExODgwKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsx
MjAsMTEgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lEaXJlY3RseQogICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1f
cmVuZGVyZXIuZ2V0KCksIGtleSkpOwogfQogCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0
Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fcmVu
ZGVyZXItPnNldENvbnRlbnRzU2l6ZShjb250ZW50c1NpemUpOworfQorCiB2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBm
bG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICBt
X3JlbmRlcmVyLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgJKHJldmlzaW9u
IDExMTg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWlu
dFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcCk7CiAgICAgdm9p
ZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQpOwogICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOworICAgIHZvaWQgc2V0Q29udGVu
dHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnkpOwogICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUo
KTsKICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAJKHJldmlzaW9uIDExMTg4MCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NSwxMCArMTU1LDE3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnBhaW50VG9HcmFwaGkKICAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgw
KTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fY29udGVudHNTaXpl
ID0gY29udGVudHNTaXplOworICAgIGFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKTsK
K30KKwogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKIHsKICAgICBtX3Zpc2libGVDb250ZW50
c1JlY3QgPSByZWN0OwogICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOworICAgIGFkanVzdFBv
c2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6dXBkYXRlVmlld3BvcnQoKQpAQCAtMTY3LDEyICsxNzQsMjAgQEAgdm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcgogICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+
dXBkYXRlVmlld3BvcnQoKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0
UG9zaXRpb25Gb3JBbGxGaXhlZExheWVycygpCit7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdG9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcihpdC0+c2Vjb25kKS0+Y2FsY3VsYXRlT2Zmc2V0RnJvbVZp
ZXdwb3J0KG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworfQorCiB2b2lk
IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVy
SW5mbyYgbGF5ZXJJbmZvKQogewogICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CiAg
ICAgZW5zdXJlTGF5ZXIoaWQpOwogICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJz
LmZpbmQoaWQpOwogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciA9IHRvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIobGF5ZXIpOwogICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMg
PSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgKGxheWVySW5mby5jb250ZW50c1JlY3QgIT0g
bGF5ZXItPmNvbnRlbnRzUmVjdCgpICYmIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsK
IAogICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKQEAgLTE4OSw2ICsyMDQsMTUg
QEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYQogICAgIGxheWVyLT5z
ZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOwogICAgIGxheWVyLT5z
ZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7CiAgICAgbGF5ZXItPnNldERy
YXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250ZW50KTsKKyAgICBncmFwaGljc0xheWVyLT5z
ZXRGaXhlZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7CisKKyAgICBncmFw
aGljc0xheWVyLT5zZXRPZmZzZXRGcm9tVmlld3BvcnQobGF5ZXJJbmZvLm9mZnNldEZyb21WaWV3
cG9ydCk7CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllci0+Zml4ZWRUb1ZpZXdwb3J0KCkpIHsKKyAg
ICAgICAgbV9maXhlZExheWVycy5hZGQobGF5ZXJJbmZvLmlkLCBsYXllcik7CisgICAgICAgIHRv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5jYWxjdWxhdGVPZmZzZXRGcm9tVmll
d3BvcnQobV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySW5mby5pZCk7CiAKICAgICBpZiAo
bmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMpCiAgICAgICAgIGFzc2lnbkltYWdlVG9MYXllcihsYXll
ciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwpAQCAtMjQxLDYgKzI2NSw3IEBAIHZv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKFcKIAogICAgIGxheWVyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CiAgICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOworICAgIG1fZml4
ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOwogICAgIGRlbGV0ZSBsYXllcjsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgJKHJl
dmlzaW9uIDExMTg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgcGFp
bnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KTsKICAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1Np
emUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSk7CiAKICAgICB2b2lk
IGRldGFjaCgpOwpAQCAtODAsOCArODEsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
c2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KICAgICB2
b2lkIGNhbGxPbk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCBh
ZGp1c3RQb3NpdGlvbkZvckFsbEZpeGVkTGF5ZXJzKCk7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFwOworICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CiAKQEAgLTExMCw2
ICsxMTMsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVs
ZXRlOwogCiAgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgTGF5ZXJNYXAgbV9maXhlZExheWVy
czsKICAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAJKHJldmlzaW9u
IDExMTg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksMTAgQEAgdm9pZCBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgUVNpemVGIHNjYWxlZFNpemUgPSBjb250ZW50
c1NpemUgKiBjb250ZW50c1NjYWxlOwogICAgIHEtPnNldFNpemUoc2NhbGVkU2l6ZSk7CiAgICAg
dmlld3BvcnRJdGVtLT51cGRhdGVDb250ZW50c1NpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBEcmF3
aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsK
KyAgICBpZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgp
KQorICAgICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnNldENvbnRlbnRz
U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6
ZS5oZWlnaHQoKSkpOwogfQogCiBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQ
cml2YXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMTExODgw
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGlj
c0xheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDYgKzQxNyw4IEBAIHZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICBpZiAoV2ViR3JhcGhpY3NMYXllciog
cmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCiAgICAgICAgIHJl
cGxpY2EtPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCisgICAgbV93
ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jRml4ZWRMYXllcnMoKTsKKwogICAgIHN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQpAQCAtNDUyLDYgKzQ1NCw4IEBAIHZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICAgICAgbV9sYXllckluZm8udHJh
bnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZh
bHNlOwogICAgICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5jbGVhcigpOworICAgICAgICBtX2xh
eWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKKyAgICAgICAgbV9s
YXllckluZm8ub2Zmc2V0RnJvbVZpZXdwb3J0ID0gbV9vZmZzZXRGcm9tVmlld3BvcnQ7CiAKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQogICAg
ICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJl
bigpW2ldKSk7CkBAIC02ODEsNSArNjg1LDEyIEBAIGJvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2Vs
Zk9yQW5jZXN0b3JIYXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0T2Zmc2V0RnJvbVZpZXdwb3J0KEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3Bv
cnQ6OkxheWVyU2lkZXMgc2lkZSwgY29uc3QgTGVuZ3RoJiBob3Jpem9udGFsT2Zmc2V0LCBjb25z
dCBMZW5ndGgmIHZlcnRpY2FsT2Zmc2V0KQoreworICAgIG1fb2Zmc2V0RnJvbVZpZXdwb3J0Lmxh
eWVyU2lkZSA9IHNpZGU7CisgICAgbV9vZmZzZXRGcm9tVmlld3BvcnQuaG9yaXpvbnRhbE9mZnNl
dCA9IGhvcml6b250YWxPZmZzZXQ7CisgICAgbV9vZmZzZXRGcm9tVmlld3BvcnQudmVydGljYWxP
ZmZzZXQgPSB2ZXJ0aWNhbE9mZnNldDsKK30KKwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuaAkocmV2aXNpb24gMTExODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxv
b3AuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTU4LDYgKzU5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxh
eWVyKGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5
ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogfTsKIH0KIApAQCAtMTEzLDYgKzExNSwxMiBAQCBw
dWJsaWM6CiAgICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAg
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUpOwogCisgICAgYm9vbCBmaXhlZFRv
Vmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQorICAgIHZvaWQg
c2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlz
Rml4ZWQ7IH0KKworICAgIEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQmIG9mZnNldEZy
b21WaWV3cG9ydCgpIHsgcmV0dXJuIG1fb2Zmc2V0RnJvbVZpZXdwb3J0OyB9CisgICAgdm9pZCBz
ZXRPZmZzZXRGcm9tVmlld3BvcnQoR3JhcGhpY3NMYXllck9mZnNldEZyb21WaWV3cG9ydDo6TGF5
ZXJTaWRlcywgY29uc3QgTGVuZ3RoJiwgY29uc3QgTGVuZ3RoJik7CisKICAgICBHcmFwaGljc0xh
eWVyKiBtYXNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGFyZ2V0OyB9CiAgICAgdm9p
ZCBzZXRNYXNrVGFyZ2V0KEdyYXBoaWNzTGF5ZXIqIGxheWVyKSB7IG1fbWFza1RhcmdldCA9IGxh
eWVyOyB9CiAKQEAgLTE1MiwxMiArMTYwLDE1IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbnRl
bnROZWVkc0Rpc3BsYXkgOiAxOwogICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6IDE7
CiAgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDI7CisgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9y
dCA6IDE7CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOwogICAgIHZvaWQgbm90aWZ5Q2hhbmdl
UmVjdXJzaXZlbHkoKTsKICAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX3RyYW5zZm9ybUFuaW1hdGlvbnM7CiAKKyAgICBHcmFwaGljc0xheWVyT2Zm
c2V0RnJvbVZpZXdwb3J0IG1fb2Zmc2V0RnJvbVZpZXdwb3J0OworCiAgICAgYm9vbCBzZWxmT3JB
bmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbnMoKSBjb25zdDsKIAogI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTExODgwKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzIsNiAr
ODMyLDggQEAgdm9pZCBXZWJQYWdlOjpzZXRSZXNpemVzVG9Db250ZW50c1VzaW5nTAogICAgIC8v
IEFsd2F5cyByZXNldCBldmVuIHdoZW4gZW1wdHkuCiAgICAgdmlldy0+c2V0Rml4ZWRMYXlvdXRT
aXplKHRhcmdldExheW91dFNpemUpOwogCisgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQodHJ1ZSk7CisKICAgICAv
LyBTY2hlZHVsZSBhIGxheW91dCB0byB1c2UgdGhlIG5ldyB0YXJnZXQgc2l6ZS4KICAgICBpZiAo
IXZpZXctPmxheW91dFBlbmRpbmcoKSkgewogICAgICAgICB2aWV3LT5zZXROZWVkc0xheW91dCgp
OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhv
c3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHJldmlzaW9uIDExMTg4MCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxh
eWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI1Miw2ICsyNTYsNTkgQEAg
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmRldGFjaExheWVyKFdlYkdyYQogICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xheWVy
KGxheWVyLT5pZCgpKSk7CiB9CiAKK3N0YXRpYyBib29sIGhhc1Bvc2l0aW9uSW5mb3JtYXRpb24o
Y29uc3QgTGVuZ3RoJiBsZW5ndGgpCit7CisgICAgcmV0dXJuIGxlbmd0aC5pc1BlcmNlbnQoKSB8
fCBsZW5ndGguaXNGaXhlZCgpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmll
d3BvcnRGb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7CisgICAgUmVuZGVyTGF5
ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoYmFj
a2luZykgeworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVy
ZXIoKS0+c3R5bGUoKTsKKyAgICAgICAgaWYgKHN0eWxlKSB7CisgICAgICAgICAgICBpZiAocmVu
ZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlckxheWVyLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gJiYgcmVuZGVyTGF5
ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAg
ICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSBzdGF0aWNfY2FzdDxXZWJH
cmFwaGljc0xheWVyKj4oYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAgICAgICAgICAgICAg
ICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgTGVuZ3RoIGhvcml6b250YWxPZmZzZXQ7CisgICAgICAgICAgICAgICAgTGVuZ3RoIHZlcnRp
Y2FsT2Zmc2V0OworICAgICAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3Bv
cnQ6OkxheWVyU2lkZXMgc2lkZXMgPSBHcmFwaGljc0xheWVyT2Zmc2V0RnJvbVZpZXdwb3J0OjpO
b1NpZGU7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzUG9zaXRpb25JbmZvcm1hdGlvbihzdHls
ZS0+dG9wKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNpZGVzIHw9IEdyYXBoaWNzTGF5ZXJP
ZmZzZXRGcm9tVmlld3BvcnQ6OlRvcFNpZGU7CisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2Fs
T2Zmc2V0ID0gc3R5bGUtPnRvcCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzUG9z
aXRpb25JbmZvcm1hdGlvbihzdHlsZS0+Ym90dG9tKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IHNpZGVzIHw9IEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQ6OkJvdHRvbVNpZGU7Cisg
ICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gc3R5bGUtPmJvdHRvbSgpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChoYXNQb3NpdGlvbkluZm9ybWF0
aW9uKHN0eWxlLT5sZWZ0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNpZGVzIHw9IEdyYXBo
aWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQ6OkxlZnRTaWRlOworICAgICAgICAgICAgICAgICAg
ICBob3Jpem9udGFsT2Zmc2V0ID0gc3R5bGUtPmxlZnQoKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGhhc1Bvc2l0aW9uSW5mb3JtYXRpb24oc3R5bGUtPnJpZ2h0KCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNpZGVzIHw9IEdyYXBoaWNzTGF5ZXJPZmZzZXRGcm9tVmlld3BvcnQ6OlJp
Z2h0U2lkZTsKKyAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCA9IHN0eWxlLT5y
aWdodCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2lkZXMgIT0g
R3JhcGhpY3NMYXllck9mZnNldEZyb21WaWV3cG9ydDo6Tm9TaWRlKQorICAgICAgICAgICAgICAg
ICAgICBncmFwaGljc0xheWVyLT5zZXRPZmZzZXRGcm9tVmlld3BvcnQoc2lkZXMsIGhvcml6b250
YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydChmYWxzZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVuZGVyTGF5ZXItPmZp
cnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVu
ZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7CisgICAgaWYgKHJlbmRlckxheWVyLT5uZXh0U2libGlu
ZygpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXll
ci0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzeW5jRml4ZWRM
YXllcnMoKQoreworICAgIFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2Ut
Pm1haW5GcmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVy
TGF5ZXIoKTsKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVy
TGF5ZXIpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVy
Rmx1c2goKQogewogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
aAkocmV2aXNpb24gMTExODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L3F0L0xheWVyVHJlZUhvc3RRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihj
b25zdCBXZWJMYXllckluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVy
cygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2Uq
KTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDExMjAxNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEyIEBACisyMDEyLTAzLTI0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lh
LmNvbT4KKworICAgICAgICBTdXBwb3J0IGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdl
YktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgx
Nzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBN
aW5pQnJvd3Nlci9xdC9xbWwvRmlsZVBpY2tlci5xbWw6CisKIDIwMTItMDMtMjQgIERpcmsgUHJh
bmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgY2xlYW4gdXAgTlJXVCBsb2dn
aW5nL21ldGVyaW5nLCBiZSBsZXNzIHZlcmJvc2UKSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9GaWxlUGlja2VyLnFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9xdC9x
bWwvRmlsZVBpY2tlci5xbWwJKHJldmlzaW9uIDExMTg4MCkKKysrIFRvb2xzL01pbmlCcm93c2Vy
L3F0L3FtbC9GaWxlUGlja2VyLnFtbAkod29ya2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDExIEBA
CiAgKi8KIAogaW1wb3J0IFF0UXVpY2sgMi4wCi1pbXBvcnQgUXQubGFicy5mb2xkZXJsaXN0bW9k
ZWwgMS4wCiAKIFJlY3RhbmdsZSB7CiAgICAgaWQ6IGZpbGVQaWNrZXIKLQorLyoKK2ltcG9ydCBR
dC5sYWJzLmZvbGRlcmxpc3Rtb2RlbCAxLjAKICAgICBwcm9wZXJ0eSBRdE9iamVjdCBmaWxlTW9k
ZWw6IG1vZGVsCiAgICAgcHJvcGVydHkgYWxpYXMgZm9sZGVyOiBmb2xkZXJzLmZvbGRlcgogCkBA
IC0xNzksNCArMTc5LDUgQEAgUmVjdGFuZ2xlIHsKICAgICBmdW5jdGlvbiB1cCgpIHsKICAgICAg
ICAgZm9sZGVycy5mb2xkZXIgPSBmb2xkZXJzLnBhcmVudEZvbGRlcjsKICAgICB9CisqLwogfQo=
</data>
<flag name="review"
          id="137725"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134995</attachid>
            <date>2012-04-01 05:41:11 -0700</date>
            <delta_ts>2012-04-02 19:27:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>31719</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMjY4
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAz
LTMwICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBTdXBw
b3J0IGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9maXhlZC1wb3Np
dGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0zMCAgRGF2aWQgQmFyciAgPGRhdmlkYmFyckBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BsaXQgdXAgdG9wLWxldmVsIC5naXRpZ25vcmUgYW5k
IC5naXRhdHRyaWJ1dGVzCkluZGV4OiBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc4IEBACis8aHRtbD48aGVhZD4KKworPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFy
c2V0PXdpbmRvd3MtMTI1MSIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4KKzxzdHlsZT4KKy5k
MXtwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO3JpZ2h0OjUwJTt6LWluZGV4OjI7b3ZlcmZsb3c6aGlk
ZGVuO30KKy5kMntwb3NpdGlvbjpmaXhlZDtib3R0b206NWVtO2xlZnQ6NTA7ei1pbmRleDoyO292
ZXJmbG93OmhpZGRlbjt9CisubyB7YmFja2dyb3VuZDpncmVlbjtoZWlnaHQ6NDBweDt3aWR0aDoy
MDBweDt9CisudCB7IHdpZHRoOjIwMDBweDsgaGVpZ2h0OjE5OHB4O2JhY2tncm91bmQtY29sb3I6
IGxpZ2h0Z3JheTsgYm9yZGVyOiAxcHggc29saWQgYmx1ZTt9Citib2R5IHsgbWFyZ2luOiAwcHg7
IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iR3JhZGllbnQiPgorPGRpdiBjbGFz
cz0iZDEiPjxkaXYgY2xhc3M9Im8iPlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9kaXY+Cis8ZGl2IGNs
YXNzPSJkMiI+PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48L2Rpdj4KKzxkaXYg
Y2xhc3M9InQiPgorMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjAwCis8L2Rpdj4KKzxk
aXYgY2xhc3M9InQiPgorNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorNjAwCis8L2Rpdj4K
KzxkaXYgY2xhc3M9InQiPgorODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTAwMAorPC9k
aXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEyMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisxNDAw
Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTYwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4K
KzE4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9
InQiPgorMjIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzI0MDAKKzwvZGl2PgorPGRpdiBj
bGFzcz0idCI+CisyNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjgwMAorPC9kaXY+Cis8
ZGl2IGNsYXNzPSJ0Ij4KKzMwMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszMjAwCis8L2Rp
dj4KKzxkaXYgY2xhc3M9InQiPgorMzQwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzM2MDAK
KzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgor
NDAwMAorPC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEy
Njg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzkgQEAKKzIwMTItMDMtMzAgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29t
PgorCisgICAgICAgIFN1cHBvcnQgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMgaW4gUXQgV2ViS2l0
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE3ODYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHRo
ZSBzZXR0aW5nIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCBp
cyB0cnVlLCB3ZSBuZWVkIHRvIHVwYWR0ZQorICAgICAgICB0aGUgcG9zaXRpb24gb2YgZml4ZWQg
bGF5ZXJzLCBhbmQgc2VuZCB1cGRhdGVzIHRvIHRoZSBVSSBwcm9jZXNzIGFzIHdlIHNjcm9sbC4K
KworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOiBBZGRlZCBpbmZvcm1h
dGlvbiB0byBrZWVwIHRyYWNrIG9mIHBvc2l0aW9uIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTY3JvbGxPZmZzZXQpOgorICAg
ICAgICAoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFZpc2libGVDb250ZW50c1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmNvbnRl
bnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5
ZXJUcmFuc2Zvcm0uaDogQWRkZWQgbmV3IGVudW0gZm9yIHdoaWNoIHNpZGUgb2YgdGhlIGxheWVy
IGlzIGZpeGVkIHRvIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDogQWRkZWQgaW5mb3JtYXRpb24gdG8ga2VlcCB0
cmFjayBvZiBwb3NpdGlvbiBjaGFuZ2VzLCBhbmQgY2FsY3VsYXRlCisgICAgICAgIG5ldyBwb3Np
dGlvbiBmb3IgdGhlIGxheWVycyBiYXNlZCBvbiBwb3NpdGlvbiB0aGF0IHdhcyBjYWxjdWxhdGVk
IGJ5IFdlYkNvcmUsIHRha2luZyB0aGUgbGFnIGJldHdlZW4gdGhlIHByb2Nlc3NlcyBpbnRvIGFj
Y291bnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnNl
dFZpZXdwb3J0QW5kQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRGaXhlZFRvVmlld3BvcnRTaWRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OmFkanVzdGVkU2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OmZpeGVkVG9WaWV3cG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEZpeGVkVG9WaWV3
cG9ydCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpTdGF0ZTo6U3RhdGUpOgorCiAy
MDEyLTAzLTMwICBEYXZpZCBCYXJyICA8ZGF2aWRiYXJyQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBTcGxpdCB1cCB0b3AtbGV2ZWwgLmdpdGlnbm9yZSBhbmQgLmdpdGF0dHJpYnV0ZXMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxMCw4ICsxNzEw
LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmUKIHsKICAgICBJ
bnRTaXplIG9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwogICAgIFNjcm9sbFZpZXc6OnNldEZpeGVk
VmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCk7Ci0gICAgaWYgKG9mZnNldCAh
PSBzY3JvbGxPZmZzZXQoKSkKKyAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKSB7Cisg
ICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgdXBkYXRlRml4ZWRF
bGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgp
OworICAgIH0KICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENoYW5nZVNjcm9s
bE9mZnNldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaAkocmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDYgKzk0LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJik7CiAjZW5kaWYKIAorICAgIEludFBvaW50IHNjcm9sbE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OyB9CisgICAgdm9pZCBzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkgeyBtX3Njcm9sbE9mZnNldCA9IG9mZnNldDsg
fQorCisgICAgSW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpYmxlQ29udGVudHNSZWN0OyB9CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsgfQorCisg
ICAgRmxvYXRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTaXpl
OyB9CisgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IG1f
Y29udGVudHNTaXplID0gc2l6ZTsgfQorCiBwcml2YXRlOgogICAgIE93blB0cjxUZXh0dXJlTWFw
cGVyTGF5ZXI+IG1fbGF5ZXI7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+
IG1fY29tcG9zaXRlZEltYWdlOwpAQCAtMTA2LDYgKzExNSw5IEBAIHByaXZhdGU6CiAgICAgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIHZvaWQgYW5pbWF0aW9uU3Rh
cnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+Kik7CiAgICAg
VGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVy
OworICAgIEludFBvaW50IG1fc2Nyb2xsT2Zmc2V0OworICAgIEludFJlY3QgbV92aXNpYmxlQ29u
dGVudHNSZWN0OworICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKIH07CiAKIGlubGluZSBz
dGF0aWMgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIHRvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaAkocmV2aXNp
b24gMTEyNjY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xh
eWVyVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBGaXhlZFRvVmlld3BvcnRTaWRlIHsKKyAgICBGaXhlZFRv
Vmlld3BvcnROb25lID0gMCwKKyAgICBGaXhlZFRvVmlld3BvcnRUb3AgPSAxLAorICAgIEZpeGVk
VG9WaWV3cG9ydFJpZ2h0ID0gMiwKKyAgICBGaXhlZFRvVmlld3BvcnRCb3R0b20gPSA0LAorICAg
IEZpeGVkVG9WaWV3cG9ydExlZnQgPSA4Cit9OworCit0eXBlZGVmIGludCBGaXhlZFRvVmlld3Bv
cnRTaWRlczsKKwogY2xhc3MgTGF5ZXJUcmFuc2Zvcm0gewogcHVibGljOgogICAgIExheWVyVHJh
bnNmb3JtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAkocmV2aXNpb24gMTEy
NjY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOCwxMiArNDI4LDE1IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQ29tcG9zaXRpbmcKICAgICBtX3N0YXRlLmZpbHRlcnMg
PSBncmFwaGljc0xheWVyLT5maWx0ZXJzKCk7CiAjZW5kaWYKIAorICAgIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdCA9IGdyYXBoaWNzTGF5ZXItPnZpc2libGVDb250ZW50c1JlY3QoKTsKKyAgICBtX2Nv
bnRlbnRzU2l6ZSA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzU2l6ZSgpOwogICAgIG1fc3RhdGUu
bmVlZHNEaXNwbGF5ID0gbV9zdGF0ZS5uZWVkc0Rpc3BsYXkgfHwgZ3JhcGhpY3NMYXllci0+bmVl
ZHNEaXNwbGF5KCk7CiAgICAgaWYgKCFtX3N0YXRlLm5lZWRzRGlzcGxheSkKICAgICAgICAgbV9z
dGF0ZS5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlzcGxheVJl
Y3QoKSk7CiAgICAgbV9jb250ZW50c0xheWVyID0gZ3JhcGhpY3NMYXllci0+Y29udGVudHNMYXll
cigpOwogCi0gICAgbV90cmFuc2Zvcm0uc2V0UG9zaXRpb24obV9zdGF0ZS5wb3MpOworICAgIG1f
c2Nyb2xsT2Zmc2V0ID0gZ3JhcGhpY3NMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgbV90cmFu
c2Zvcm0uc2V0UG9zaXRpb24oZml4ZWRUb1ZpZXdwb3J0KCkgPyBhZGp1c3RlZFNjcm9sbE9mZnNl
dCgpIDogbV9zdGF0ZS5wb3MpOwogICAgIG1fdHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fc3Rh
dGUuYW5jaG9yUG9pbnQpOwogICAgIG1fdHJhbnNmb3JtLnNldFNpemUobV9zdGF0ZS5zaXplKTsK
ICAgICBtX3RyYW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFtX3N0YXRlLnByZXNlcnZlczNEKTsKQEAg
LTUxMSw1ICs1MTQsNjEgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGlu
ZwogICAgIH0KIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFZpZXdwb3J0QW5kQ29u
dGVudHNTaXplKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGNvbnN0IEZsb2F0
U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHZpc2li
bGVDb250ZW50c1JlY3Q7CisgICAgbV9jb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7CisgICAg
bV90cmFuc2Zvcm0uc2V0UG9zaXRpb24oZml4ZWRUb1ZpZXdwb3J0KCkgPyBhZGp1c3RlZFNjcm9s
bE9mZnNldCgpIDogbV9zdGF0ZS5wb3MpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6
c2V0Rml4ZWRUb1ZpZXdwb3J0U2lkZXMoRml4ZWRUb1ZpZXdwb3J0U2lkZXMgZml4ZWRUb1ZpZXdw
b3J0U2lkZXMpCit7CisgICAgbV9maXhlZFRvVmlld3BvcnRTaWRlcyA9IGZpeGVkVG9WaWV3cG9y
dFNpZGVzOworfQorCitGbG9hdFBvaW50IFRleHR1cmVNYXBwZXJMYXllcjo6YWRqdXN0ZWRTY3Jv
bGxPZmZzZXQoKQoreworICAgIEFTU0VSVChmaXhlZFRvVmlld3BvcnQoKSk7CisgICAgZmxvYXQg
YWRqdXN0ZWRYID0gbV9zdGF0ZS5wb3MueCgpOworICAgIGZsb2F0IGFkanVzdGVkWSA9IG1fc3Rh
dGUucG9zLnkoKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGZhY3Qg
dGhhdCBXZWJDb3JlIGRvZXMgbm90IGFsbG93IHNjcm9sbCBvdmVyc2hvb3QuCisgICAgZmxvYXQg
aG9yaXpvbnRhbEFkanVzdCA9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC54KCk7CisgICAgZmxvYXQg
dmVydGljYWxBZGp1c3QgPSBtX3Zpc2libGVDb250ZW50c1JlY3QueSgpOworCisgICAgaWYgKCht
X2ZpeGVkVG9WaWV3cG9ydFNpZGVzICYgRml4ZWRUb1ZpZXdwb3J0TGVmdCkpIHsKKyAgICAgICAg
aWYgKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC54KCkgPCAwKQorICAgICAgICAgICAgaG9yaXpvbnRh
bEFkanVzdCArPSAtbV92aXNpYmxlQ29udGVudHNSZWN0LngoKTsKKyAgICB9IGVsc2UgaWYgKCht
X2ZpeGVkVG9WaWV3cG9ydFNpZGVzICYgRml4ZWRUb1ZpZXdwb3J0UmlnaHQpKSB7CisgICAgICAg
IGlmIChtX3Zpc2libGVDb250ZW50c1JlY3QubWF4WCgpID4gbV9jb250ZW50c1NpemUud2lkdGgo
KSkKKyAgICAgICAgICAgIGhvcml6b250YWxBZGp1c3QgKz0gbV9jb250ZW50c1NpemUud2lkdGgo
KSAtIG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5tYXhYKCk7CisgICAgfQorCisgICAgaWYgKChtX2Zp
eGVkVG9WaWV3cG9ydFNpZGVzICYgRml4ZWRUb1ZpZXdwb3J0VG9wKSkgeworICAgICAgICBpZiAo
bV92aXNpYmxlQ29udGVudHNSZWN0LnkoKSA8IDApCisgICAgICAgICAgICB2ZXJ0aWNhbEFkanVz
dCArPSAtbV92aXNpYmxlQ29udGVudHNSZWN0LnkoKTsKKyAgICB9IGVsc2UgaWYgKChtX2ZpeGVk
VG9WaWV3cG9ydFNpZGVzICYgRml4ZWRUb1ZpZXdwb3J0Qm90dG9tKSkgeworICAgICAgICBpZiAo
bV92aXNpYmxlQ29udGVudHNSZWN0Lm1heFkoKSA+IG1fY29udGVudHNTaXplLmhlaWdodCgpKQor
ICAgICAgICAgICAgdmVydGljYWxBZGp1c3QgKz0gbV9jb250ZW50c1NpemUuaGVpZ2h0KCkgLSBt
X3Zpc2libGVDb250ZW50c1JlY3QubWF4WSgpOworICAgIH0KKworICAgIGZsb2F0IHNjcm9sbE9m
ZnNldEhvcml6b250YWxBZGp1c3QgPSBtX3Njcm9sbE9mZnNldC54KCk7CisgICAgZmxvYXQgc2Ny
b2xsT2Zmc2V0VmVydGljYWxBZGp1c3QgPSBtX3Njcm9sbE9mZnNldC55KCk7CisKKyAgICBpZiAo
c2Nyb2xsT2Zmc2V0SG9yaXpvbnRhbEFkanVzdCA8IDApCisgICAgICAgIHNjcm9sbE9mZnNldEhv
cml6b250YWxBZGp1c3QgPSAwOworICAgIGVsc2UgaWYgKHNjcm9sbE9mZnNldEhvcml6b250YWxB
ZGp1c3QgPiBtX2NvbnRlbnRzU2l6ZS53aWR0aCgpIC0gbV92aXNpYmxlQ29udGVudHNSZWN0Lndp
ZHRoKCkpCisgICAgICAgIHNjcm9sbE9mZnNldEhvcml6b250YWxBZGp1c3QgPSBtX2NvbnRlbnRz
U2l6ZS53aWR0aCgpIC0gbV92aXNpYmxlQ29udGVudHNSZWN0LndpZHRoKCk7CisKKyAgICBpZiAo
c2Nyb2xsT2Zmc2V0VmVydGljYWxBZGp1c3QgPCAwKQorICAgICAgICBzY3JvbGxPZmZzZXRWZXJ0
aWNhbEFkanVzdCA9IDA7CisgICAgZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0VmVydGljYWxBZGp1c3Qg
PiBtX2NvbnRlbnRzU2l6ZS5oZWlnaHQoKSAtIG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5oZWlnaHQo
KSkKKyAgICAgICAgc2Nyb2xsT2Zmc2V0VmVydGljYWxBZGp1c3QgPSBtX2NvbnRlbnRzU2l6ZS5o
ZWlnaHQoKSAtIG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5oZWlnaHQoKTsKKworICAgIGFkanVzdGVk
WCArPSBob3Jpem9udGFsQWRqdXN0IC0gc2Nyb2xsT2Zmc2V0SG9yaXpvbnRhbEFkanVzdDsKKyAg
ICBhZGp1c3RlZFkgKz0gdmVydGljYWxBZGp1c3QgLSBzY3JvbGxPZmZzZXRWZXJ0aWNhbEFkanVz
dDsKKworICAgIHJldHVybiBGbG9hdFBvaW50KGFkanVzdGVkWCwgYWRqdXN0ZWRZKTsKK30KIH0K
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAkocmV2aXNpb24gMTEyNjY1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDEyIEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIHsgcmV0
dXJuIG1fYmFja2luZ1N0b3JlOyB9CiAgICAgdm9pZCBjbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNp
dmUoKTsKIAorICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5maXhlZFRvVmlld3BvcnQ7IH0KKyAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29sIGlz
Rml4ZWQpIHsgbV9zdGF0ZS5maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9CisgICAgdm9pZCBz
ZXRWaWV3cG9ydEFuZENvbnRlbnRzU2l6ZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNS
ZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSk7CisgICAgdm9pZCBzZXRGaXhlZFRv
Vmlld3BvcnRTaWRlcyhGaXhlZFRvVmlld3BvcnRTaWRlcyk7CisgICAgdm9pZCBzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgSW50UG9pbnQmIHNjcm9sbE9mZnNldCkgeyBtX3Njcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldDsgfQorCiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJMYXllciogcm9vdExh
eWVyKCk7CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3Jtc1JlY3Vyc2l2ZSgpOwpAQCAtMTYxLDYg
KzE2Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6
emVybygpLCBtX3NpemUpOwogICAgIH0KIAorICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRTY3JvbGxP
ZmZzZXQoKTsKKwogICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIqPiBtX2NoaWxkcmVuOwog
ICAgIFRleHR1cmVNYXBwZXJMYXllciogbV9wYXJlbnQ7CiAgICAgVGV4dHVyZU1hcHBlckxheWVy
KiBtX2VmZmVjdFRhcmdldDsKQEAgLTE5Niw2ICsyMDQsNyBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIHZpc2libGUgOiAxOwogICAgICAgICBib29sIG5lZWRzRGlzcGxheTogMTsKICAgICAgICAg
Ym9vbCBtaWdodEhhdmVPdmVybGFwcyA6IDE7CisgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0
IDogMTsKICAgICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7CiAgICAgICAgIFN0YXRlKCkKICAgICAg
ICAgICAgIDogb3BhY2l0eSgxLmYpCkBAIC0yMDksMTQgKzIxOCwxOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgLCB2aXNpYmxlKHRydWUpCiAgICAgICAgICAgICAsIG5lZWRzRGlzcGxheSh0cnVl
KQogICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFwcyhmYWxzZSkKKyAgICAgICAgICAgICwg
Zml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogICAgICAgICAgICAgLCBuZWVkc1JlcGFpbnQoZmFsc2Up
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH07Ci0KICAgICBTdGF0ZSBtX3N0YXRlOwogICAg
IFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9ucyBtX2FuaW1hdGlvbnM7CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Cisg
ICAgRmxvYXRTaXplIG1fY29udGVudHNTaXplOworICAgIEludFBvaW50IG1fc2Nyb2xsT2Zmc2V0
OworICAgIEZpeGVkVG9WaWV3cG9ydFNpZGVzIG1fZml4ZWRUb1ZpZXdwb3J0U2lkZXM7CiB9Owog
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjY4OCkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEyLTAzLTMwICBZYWVs
IEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBTdXBwb3J0IGZpeGVk
IHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVHVybiBvbiB0aGUgZmxhZyBhY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgd2hlbiB1c2luZyBmaXhlZCBsYXlvdXQuCisg
ICAgICAgIFBhc3MgdGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGFuZCBzY3JvbGwgb2Zmc2V0IHRv
IFRleHR1cmVNYXBwZXJMYXllciwgc28gdGhhdCBpdCBjYW4KKyAgICAgICAgbWFrZSBhZGp1c3Rt
ZW50cyBpbiBzY3JvbGwgcG9zaXRpb24uIEl0IG5lZWRzIHRvIGtub3cgYm90aCB0aGUgY3VycmVu
dCBzY3JvbGwgb2Zmc2V0IGFuZAorICAgICAgICB0aGUgc2Nyb2xsIG9mZnNldCB0aGF0IFdlYkNv
cmUgdXNlZCBmb3IgY2FsY3VsYXRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb24uCisKKyAgICAgICAg
KiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
SW5mbzo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpkZWNvZGUpOgor
ICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRl
Ojp1cGRhdGVTaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFBy
b3h5Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9y
QWxsRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6
c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRl
cmVyOjpkZWxldGVMYXllcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRl
cmVyLmg6CisgICAgICAgIChXZWJMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydFNp
ZGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuaDoKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJHcmFw
aGljc0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlvdXRT
aXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpkZXRhY2hMYXllcik6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRG
b3JTZWxmKToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycyk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oOgorICAg
ICAgICAoTGF5ZXJUcmVlSG9zdFF0KToKKwogMjAxMi0wMy0zMCAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEZpbmQgem9vbWFi
bGUgYXJlYSB1c2luZyBhcmVhLWJhc2VkIGhpdC10ZXN0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAgdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bQog
ICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29y
ZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCiAgICAgZW5jb2Rl
ci0+ZW5jb2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywg
cmVwbGljYSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29k
ZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQs
IGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QsIGFuaW1hdGlvbnMpKTsKKyAgICBlbmNv
ZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oZml4ZWRUb1ZpZXdwb3J0U2lkZXMsIHNjcm9sbE9mZnNl
dCkpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQpAQCAtNDUsNiArNDYsOSBAQCBib29s
IFdlYkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtCiAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8ucG9zLCBpbmZvLnNpemUsIGluZm8udHJhbnNmb3JtLCBp
bmZvLm9wYWNpdHksIGluZm8uYW5jaG9yUG9pbnQsIGluZm8uY2hpbGRyZW5UcmFuc2Zvcm0sIGlu
Zm8uY29udGVudHNSZWN0LCBpbmZvLmFuaW1hdGlvbnMpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uZml4ZWRUb1Zp
ZXdwb3J0U2lkZXMsIGluZm8uc2Nyb2xsT2Zmc2V0KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
TGF5ZXJUcmVlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmgJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJMYXllclRyZWVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDgsOSArMTA5LDEy
IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewogICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6
IDE7CiAgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOwogICAgICAgICAg
ICAgYm9vbCBpc1Jvb3RMYXllcjogMTsKKyAgICAgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0
IDogMTsKICAgICAgICAgfTsKICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgIH07Cisg
ICAgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsT2Zmc2V0OworICAgIFdlYkNvcmU6OkZpeGVkVG9W
aWV3cG9ydFNpZGVzIGZpeGVkVG9WaWV3cG9ydFNpZGVzOwogICAgIFZlY3RvcjxXZWJMYXllcklE
PiBjaGlsZHJlbjsKICAgICBWZWN0b3I8V2ViTGF5ZXJBbmltYXRpb24+IGFuaW1hdGlvbnM7CiAg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1hZ2VCYWNraW5nU3RvcmU7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAkocmV2aXNp
b24gMTEyNjY1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTEgQEAgdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OmRlc3Ryb3lEaXJlY3RseQogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOwog
fQogCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fcmVuZGVyZXItPnNldENvbnRlbnRzU2l6ZShj
b250ZW50c1NpemUpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQ
b2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICBtX3JlbmRlcmVyLT5zZXRWaXNpYmxlQ29u
dGVudHNSZWN0KHJlY3QsIHNjYWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgY2xpcCk7CiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0
KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwogICAgIHZvaWQgcHVyZ2VH
TFJlc291cmNlcygpOworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnkpOwogICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKICAgICB2b2lkIGNyZWF0ZVRpbGVG
b3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZv
Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5jcHAJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcg
QEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbgogICAgICAgICBtX3Rl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdM
TW9kZSk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09
IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwogCisgICAgYWRqdXN0UG9zaXRpb25Gb3JBbGxG
aXhlZExheWVycygpOwogICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CiAgICAgR3JhcGhpY3NMYXll
ciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwogICAgIGlmICghY3VycmVudFJvb3RM
YXllcikKQEAgLTE1NSw2ICsxNTYsMTEgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFp
bnRUb0dyYXBoaQogICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDApOwog
fQogCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBjb250ZW50c1NpemUpCit7CisgICAgbV9jb250ZW50c1NpemUgPSBj
b250ZW50c1NpemU7Cit9CisKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVD
b250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpCiB7CiAgICAgbV92
aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKQEAgLTE2Nyw2ICsxNzMsMTMgQEAgdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcgogICAgICAgICBtX2xheWVyVHJlZUhvc3RQ
cm94eS0+dXBkYXRlVmlld3BvcnQoKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
YWRqdXN0UG9zaXRpb25Gb3JBbGxGaXhlZExheWVycygpCit7CisgICAgTGF5ZXJNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllck1hcDo6aXRlcmF0
b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
dG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnNlY29uZCktPnNldFZpZXdwb3J0QW5kQ29udGVudHNT
aXplKG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworfQorCiB2b2lkIFdl
YkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5m
byYgbGF5ZXJJbmZvKQogewogICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CkBAIC0x
ODgsNiArMjAxLDE5IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmEK
ICAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsK
ICAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOwogICAg
IGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisgICAgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKGxheWVyKTsKKyAgICBncmFwaGljc0xheWVyLT5zZXRTY3JvbGxPZmZzZXQo
bGF5ZXJJbmZvLnNjcm9sbE9mZnNldCk7CisgICAgZ3JhcGhpY3NMYXllci0+c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChtX3Zpc2libGVDb250ZW50c1JlY3QpOworICAgIGdyYXBoaWNzTGF5ZXItPnNl
dENvbnRlbnRzU2l6ZShtX2NvbnRlbnRzU2l6ZSk7CisKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIq
IHRleHR1cmVNYXBwZXJMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyKTsKKyAgICB0
ZXh0dXJlTWFwcGVyTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydChsYXllckluZm8uZml4ZWRUb1Zp
ZXdwb3J0KTsKKyAgICB0ZXh0dXJlTWFwcGVyTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydFNpZGVz
KGxheWVySW5mby5maXhlZFRvVmlld3BvcnRTaWRlcyk7CisKKyAgICBpZiAodGV4dHVyZU1hcHBl
ckxheWVyLT5maXhlZFRvVmlld3BvcnQoKSkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQobGF5
ZXJJbmZvLmlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92
ZShsYXllckluZm8uaWQpOwogCiAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcihXCiAKICAgICBsYXllci0+cmVtb3ZlRnJvbVBh
cmVudCgpOwogICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyAgICBtX2ZpeGVkTGF5ZXJz
LnJlbW92ZShsYXllcklEKTsKICAgICBkZWxldGUgbGF5ZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCShyZXZpc2lvbiAx
MTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWlu
dFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50VG9HcmFw
aGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiAgICAg
dm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpOwogCiAgICAgdm9pZCBkZXRhY2go
KTsKQEAgLTgwLDggKzgxLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNob3dSZXBh
aW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CiAgICAgdm9pZCBjYWxs
T25NYWluVHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgYWRqdXN0UG9z
aXRpb25Gb3JBbGxGaXhlZExheWVycygpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVy
SUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKKyAgICBXZWJDb3JlOjpGbG9h
dFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCkBAIC0xMTAsNiArMTEzLDcg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKIAog
ICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIExheWVyTWFwIG1fZml4ZWRMYXllcnM7CiAgICAg
V2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCShyZXZpc2lvbiAxMTI2NjUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDkgQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0
ZTo6dXBkYXRlU2l6ZSgpCiAgICAgUVNpemVGIHNjYWxlZFNpemUgPSBjb250ZW50c1NpemUgKiBj
b250ZW50c1NjYWxlOwogICAgIHEtPnNldFNpemUoc2NhbGVkU2l6ZSk7CiAgICAgdmlld3BvcnRJ
dGVtLT51cGRhdGVDb250ZW50c1NpemUoc2NhbGVkU2l6ZSk7CisgICAgRHJhd2luZ0FyZWFQcm94
eSogZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKGRy
YXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKSkKKyAgICAgICAg
ZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRDb250ZW50c1NpemUoV2ViQ29y
ZTo6RmxvYXRTaXplKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVpZ2h0KCkp
KTsKIH0KIAogUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDggQEAgV2ViR3JhcGhpY3NMYXllcjo6V2ViR3Jh
cGhpY3NMYXllcihHcmFwaAogICAgICwgbV9jb250ZW50TmVlZHNEaXNwbGF5KGZhbHNlKQogICAg
ICwgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKICAgICAsIG1faW5VcGRhdGVNb2RlKGZh
bHNlKQorICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCisgICAgLCBtX2ZpeGVkVG9WaWV3
cG9ydFNpZGVzKEZpeGVkVG9WaWV3cG9ydE5vbmUpCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCiAgICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKICAgICAsIG1fY29udGVudHNT
Y2FsZSgxLmYpCkBAIC0xNzgsNiArMTgwLDggQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRQ
b3NpdGlvbihjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRQ
b3NpdGlvbihwKTsKKyAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KQorICAgICAgICBt
X3Njcm9sbE9mZnNldCA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dmlzaWJsZUNvbnRlbnRz
UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgbm90aWZ5Q2hhbmdlUmVjdXJzaXZlbHkoKTsKIH0KIApA
QCAtNDE2LDYgKzQyMCw4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5n
U3QKICAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXll
cihyZXBsaWNhTGF5ZXIoKSkpCiAgICAgICAgIHJlcGxpY2EtPnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwogCisgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5j
Rml4ZWRMYXllcnMoKTsKKwogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytp
KQpAQCAtNDU0LDYgKzQ2MCw5IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0
aW5nU3QKICAgICAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAg
ICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgICAgICBtX2xheWVySW5mby5j
aGlsZHJlbi5jbGVhcigpOworICAgICAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBm
aXhlZFRvVmlld3BvcnQoKTsKKyAgICAgICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0U2lk
ZXMgPSBtX2ZpeGVkVG9WaWV3cG9ydFNpZGVzOworICAgICAgICBtX2xheWVySW5mby5zY3JvbGxP
ZmZzZXQgPSBtX3Njcm9sbE9mZnNldDsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBtX2xheWVySW5mby5jaGlsZHJl
bi5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKQEAgLTY3NCw1ICs2ODMsOSBA
QCBib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGFzCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydFNpZGVz
KEZpeGVkVG9WaWV3cG9ydFNpZGVzIGZpeGVkVG9WaWV3cG9ydFNpZGVzKQoreworICAgIG1fZml4
ZWRUb1ZpZXdwb3J0U2lkZXMgPSBmaXhlZFRvVmlld3BvcnRTaWRlczsKK30KIH0KICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGlj
c0xheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlk
U3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKIH07CiB9
CiAKQEAgLTExMyw2ICsxMTQsMTAgQEAgcHVibGljOgogICAgIEltYWdlKiBpbWFnZSgpIHsgcmV0
dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91
YmxlKTsKIAorICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9maXhl
ZFRvVmlld3BvcnQ7IH0KKyAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQp
IHsgbV9maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9CisgICAgdm9pZCBzZXRGaXhlZFRvVmll
d3BvcnRTaWRlcyhGaXhlZFRvVmlld3BvcnRTaWRlcyk7CisKICAgICBHcmFwaGljc0xheWVyKiBt
YXNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRN
YXNrVGFyZ2V0KEdyYXBoaWNzTGF5ZXIqIGxheWVyKSB7IG1fbWFza1RhcmdldCA9IGxheWVyOyB9
CiAKQEAgLTE1MiwxMiArMTU3LDE2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbnRlbnROZWVk
c0Rpc3BsYXkgOiAxOwogICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA6IDE7CiAgICAg
Ym9vbCBtX2luVXBkYXRlTW9kZSA6IDI7CisgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydCA6IDE7
CiAKICAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOwogICAgIHZvaWQgbm90aWZ5Q2hhbmdlUmVjdXJz
aXZlbHkoKTsKICAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX3RyYW5zZm9ybUFuaW1hdGlvbnM7CiAKKyAgICBGaXhlZFRvVmlld3BvcnRTaWRlcyBt
X2ZpeGVkVG9WaWV3cG9ydFNpZGVzOworICAgIEludFBvaW50IG1fc2Nyb2xsT2Zmc2V0OworCiAg
ICAgYm9vbCBzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbnMoKSBjb25z
dDsKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTEyNjY1KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MzMsNiArODMzLDggQEAgdm9pZCBXZWJQYWdlOjpzZXRSZXNpemVzVG9Db250ZW50
c1VzaW5nTAogICAgIC8vIEFsd2F5cyByZXNldCBldmVuIHdoZW4gZW1wdHkuCiAgICAgdmlldy0+
c2V0Rml4ZWRMYXlvdXRTaXplKHRhcmdldExheW91dFNpemUpOwogCisgICAgbV9wYWdlLT5zZXR0
aW5ncygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQo
dHJ1ZSk7CisKICAgICAvLyBTY2hlZHVsZSBhIGxheW91dCB0byB1c2UgdGhlIG5ldyB0YXJnZXQg
c2l6ZS4KICAgICBpZiAoIXZpZXctPmxheW91dFBlbmRpbmcoKSkgewogICAgICAgICB2aWV3LT5z
ZXROZWVkc0xheW91dCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHJldmlzaW9uIDExMjY2NSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI1
Miw2ICsyNTYsNjcgQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OmRldGFjaExheWVyKFdlYkdyYQog
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZWxldGVD
b21wb3NpdGluZ0xheWVyKGxheWVyLT5pZCgpKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZU9m
ZnNldEZyb21WaWV3cG9ydEZvclNlbGYoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAg
IC8vIFRoZXNlIGNvbmRpdGlvbnMgbXVzdCBtYXRjaCB0aGUgY29uZGlzaW9ucyBpbiBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbi4KKyAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOworICAgIGlm
ICghYmFja2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
cmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+aXNQb3NpdGlv
bmVkKCkgfHwgcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkgIT0g
Rml4ZWRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+
cmVuZGVyZXIoKS0+Y29udGFpbmVyKCktPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gdG9XZWJHcmFw
aGljc0xheWVyKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7CisgICAgZ3JhcGhpY3NMYXllci0+
c2V0Rml4ZWRUb1ZpZXdwb3J0KHRydWUpOworICAgIEZpeGVkVG9WaWV3cG9ydFNpZGVzIGZpeGVk
VG9WaWV3cG9ydFNpZGVzID0gRml4ZWRUb1ZpZXdwb3J0Tm9uZTsKKyAgICBpZiAoc3R5bGUtPnRv
cCgpLmlzU3BlY2lmaWVkKCkpCisgICAgICAgIGZpeGVkVG9WaWV3cG9ydFNpZGVzIHw9IEZpeGVk
VG9WaWV3cG9ydFRvcDsKKyAgICBpZiAoc3R5bGUtPnJpZ2h0KCkuaXNTcGVjaWZpZWQoKSkKKyAg
ICAgICAgZml4ZWRUb1ZpZXdwb3J0U2lkZXMgfD0gRml4ZWRUb1ZpZXdwb3J0UmlnaHQ7CisgICAg
aWYgKHN0eWxlLT5ib3R0b20oKS5pc1NwZWNpZmllZCgpKQorICAgICAgICBmaXhlZFRvVmlld3Bv
cnRTaWRlcyB8PSBGaXhlZFRvVmlld3BvcnRCb3R0b207CisgICAgaWYgKHN0eWxlLT5sZWZ0KCku
aXNTcGVjaWZpZWQoKSkKKyAgICAgICAgZml4ZWRUb1ZpZXdwb3J0U2lkZXMgfD0gRml4ZWRUb1Zp
ZXdwb3J0TGVmdDsKKyAgICBpZiAoZml4ZWRUb1ZpZXdwb3J0U2lkZXMpCisgICAgICAgIGdyYXBo
aWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydFNpZGVzKGZpeGVkVG9WaWV3cG9ydFNpZGVzKTsK
KyAgICBlbHNlCisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydChmYWxz
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJl
bmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRG
b3JTZWxmKHJlbmRlckxheWVyKTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgp
KQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+
Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAg
ICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2li
bGluZygpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycygpCit7
CisgICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV93ZWJQYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVjdHMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2ViUGFnZS0+bWFpbkZy
YW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RSZW5kZXJMYXllcigp
OworICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOworICAgIGlmIChyb290UmVuZGVyTGF5ZXIt
PmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIo
cm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RR
dDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewogI2lmIFVTRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAkocmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKTsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CisgICAgdmly
dHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135260</attachid>
            <date>2012-04-02 19:27:38 -0700</date>
            <delta_ts>2012-04-02 20:10:26 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>27786</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMjY4
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA0
LTAyICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0
cy9maXhlZC1wb3NpdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0zMCAgRGF2aWQgQmFyciAg
PGRhdmlkYmFyckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BsaXQgdXAgdG9wLWxldmVsIC5n
aXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzCkluZGV4OiBNYW51YWxUZXN0cy9maXhlZC1wb3Np
dGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc4IEBACis8aHRtbD48aGVhZD4KKworPG1ldGEgY29udGVudD0idGV4
dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4K
KzxzdHlsZT4KKy5kMXtwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO3JpZ2h0OjUwJTt6LWluZGV4OjI7
b3ZlcmZsb3c6aGlkZGVuO30KKy5kMntwb3NpdGlvbjpmaXhlZDtib3R0b206NWVtO2xlZnQ6NTA7
ei1pbmRleDoyO292ZXJmbG93OmhpZGRlbjt9CisubyB7YmFja2dyb3VuZDpncmVlbjtoZWlnaHQ6
NDBweDt3aWR0aDoyMDBweDt9CisudCB7IHdpZHRoOjIwMDBweDsgaGVpZ2h0OjE5OHB4O2JhY2tn
cm91bmQtY29sb3I6IGxpZ2h0Z3JheTsgYm9yZGVyOiAxcHggc29saWQgYmx1ZTt9Citib2R5IHsg
bWFyZ2luOiAwcHg7IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iR3JhZGllbnQi
PgorPGRpdiBjbGFzcz0iZDEiPjxkaXYgY2xhc3M9Im8iPlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9k
aXY+Cis8ZGl2IGNsYXNzPSJkMiI+PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48
L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjAw
Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgor
NjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQi
PgorMTAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEyMDAKKzwvZGl2PgorPGRpdiBjbGFz
cz0idCI+CisxNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTYwMAorPC9kaXY+Cis8ZGl2
IGNsYXNzPSJ0Ij4KKzE4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMDAwCis8L2Rpdj4K
KzxkaXYgY2xhc3M9InQiPgorMjIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzI0MDAKKzwv
ZGl2PgorPGRpdiBjbGFzcz0idCI+CisyNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjgw
MAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzMwMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+
CiszMjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzQwMAorPC9kaXY+Cis8ZGl2IGNsYXNz
PSJ0Ij4KKzM2MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszODAwCis8L2Rpdj4KKzxkaXYg
Y2xhc3M9InQiPgorNDAwMAorPC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMTEyNjg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDQtMDIgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZml4ZWQgcG9zaXRp
b24gZWxlbWVudHMgaW4gUXQgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODE3ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIHRoZSBzZXR0aW5nIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZCBpcyB0cnVlLCB3ZSBuZWVkIHRvIHVwYWR0ZQorICAgICAg
ICB0aGUgcG9zaXRpb24gb2YgZml4ZWQgbGF5ZXJzLCBhbmQgc2VuZCB1cGRhdGVzIHRvIHRoZSBV
SSBwcm9jZXNzIGFzIHdlIHNjcm9sbC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp2aXNp
YmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFZpZXdwb3J0QW5kQ29u
dGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckxheWVyOjphZGp1c3RlZFNjcm9sbE9mZnNldCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyOjpmaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoVGV4dHVy
ZU1hcHBlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJMYXllcjo6U3RhdGU6OlN0YXRlKToKKwogMjAxMi0wMy0zMCAgRGF2aWQgQmFyciAg
PGRhdmlkYmFyckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BsaXQgdXAgdG9wLWxldmVsIC5n
aXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MTAsOCArMTcxMCwxMSBAQCB2b2lkIEZyYW1lVmlldzo6
c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlCiB7CiAgICAgSW50U2l6ZSBvZmZzZXQgPSBzY3JvbGxP
ZmZzZXQoKTsKICAgICBTY3JvbGxWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdCh2aXNp
YmxlQ29udGVudFJlY3QpOwotICAgIGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAg
aWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkgeworICAgICAgICBpZiAobV9mcmFtZS0+cGFn
ZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoKSkKKyAgICAgICAgICAgIHVwZGF0ZUZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZygp
OwogICAgICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB9CiAgICAgZnJhbWUoKS0+
bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgJKHJldmlzaW9uIDExMjY2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCwxNSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwog
I2VuZGlmCiAKKyAgICBJbnRQb2ludCBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbE9mZnNldDsgfQorICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBv
ZmZzZXQpIHsgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQ7IH0KKworICAgIEludFJlY3QgdmlzaWJs
ZUNvbnRlbnRzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsgfQor
ICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1f
dmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7IH0KKworICAgIEZsb2F0U2l6ZSBjb250ZW50c1Np
emUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQorICAgIHZvaWQgc2V0Q29udGVu
dHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBtX2NvbnRlbnRzU2l6ZSA9IHNpemU7IH0K
KwogcHJpdmF0ZToKICAgICBPd25QdHI8VGV4dHVyZU1hcHBlckxheWVyPiBtX2xheWVyOwogICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKQEAg
LTEwNiw2ICsxMTUsOSBAQCBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1f
YW5pbWF0aW9uczsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiopOwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKKyAgICBJbnRQb2ludCBtX3Njcm9s
bE9mZnNldDsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBGbG9hdFNp
emUgbV9jb250ZW50c1NpemU7CiB9OwogCiBpbmxpbmUgc3RhdGljIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKiB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHJldmlzaW9uIDExMjY2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjgsMTIgKzQyOCwxNSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5nCiAgICAgbV9zdGF0ZS5maWx0ZXJzID0gZ3Jh
cGhpY3NMYXllci0+ZmlsdGVycygpOwogI2VuZGlmCiAKKyAgICBtX3Zpc2libGVDb250ZW50c1Jl
Y3QgPSBncmFwaGljc0xheWVyLT52aXNpYmxlQ29udGVudHNSZWN0KCk7CisgICAgbV9jb250ZW50
c1NpemUgPSBncmFwaGljc0xheWVyLT5jb250ZW50c1NpemUoKTsKICAgICBtX3N0YXRlLm5lZWRz
RGlzcGxheSA9IG1fc3RhdGUubmVlZHNEaXNwbGF5IHx8IGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlz
cGxheSgpOwogICAgIGlmICghbV9zdGF0ZS5uZWVkc0Rpc3BsYXkpCiAgICAgICAgIG1fc3RhdGUu
bmVlZHNEaXNwbGF5UmVjdC51bml0ZShncmFwaGljc0xheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCkp
OwogICAgIG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKTsK
IAotICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKKyAgICBtX3Njcm9s
bE9mZnNldCA9IGdyYXBoaWNzTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgIG1fdHJhbnNmb3Jt
LnNldFBvc2l0aW9uKGZpeGVkVG9WaWV3cG9ydCgpID8gYWRqdXN0ZWRQb3NpdGlvbigpIDogbV9z
dGF0ZS5wb3MpOwogICAgIG1fdHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fc3RhdGUuYW5jaG9y
UG9pbnQpOwogICAgIG1fdHJhbnNmb3JtLnNldFNpemUobV9zdGF0ZS5zaXplKTsKICAgICBtX3Ry
YW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFtX3N0YXRlLnByZXNlcnZlczNEKTsKQEAgLTUxMSw1ICs1
MTQsMzMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZwogICAgIH0K
IH0KIAordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFZpZXdwb3J0QW5kQ29udGVudHNTaXpl
KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY29u
dGVudHNTaXplKQoreworICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHZpc2libGVDb250ZW50
c1JlY3Q7CisgICAgbV9jb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7CisgICAgbV90cmFuc2Zv
cm0uc2V0UG9zaXRpb24oZml4ZWRUb1ZpZXdwb3J0KCkgPyBhZGp1c3RlZFBvc2l0aW9uKCkgOiBt
X3N0YXRlLnBvcyk7Cit9CisKK0Zsb2F0UG9pbnQgVGV4dHVyZU1hcHBlckxheWVyOjphZGp1c3Rl
ZFBvc2l0aW9uKCkKK3sKKyAgICBBU1NFUlQoZml4ZWRUb1ZpZXdwb3J0KCkpOworCisgICAgZmxv
YXQgdWlTY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1heChtX3Zpc2libGVDb250ZW50c1JlY3QueCgp
LCAwKTsKKyAgICB1aVNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWluKHVpU2Nyb2xsUG9zaXRpb25Y
LCBtX2NvbnRlbnRzU2l6ZS53aWR0aCgpIC0gbV92aXNpYmxlQ29udGVudHNSZWN0LndpZHRoKCkp
OworCisgICAgZmxvYXQgdWlTY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1heChtX3Zpc2libGVDb250
ZW50c1JlY3QueSgpLCAwKTsKKyAgICB1aVNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWluKHVpU2Ny
b2xsUG9zaXRpb25ZLCBtX2NvbnRlbnRzU2l6ZS5oZWlnaHQoKSAtIG1fdmlzaWJsZUNvbnRlbnRz
UmVjdC5oZWlnaHQoKSk7CisKKyAgICBmbG9hdCB3ZWJTY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1h
eChtX3Njcm9sbE9mZnNldC54KCksIDApOworICAgIHdlYlNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6
bWluKHdlYlNjcm9sbFBvc2l0aW9uWCwgbV9jb250ZW50c1NpemUud2lkdGgoKSAtIG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdC53aWR0aCgpKTsKKworICAgIGZsb2F0IHdlYlNjcm9sbFBvc2l0aW9uWSA9
IHN0ZDo6bWF4KG1fc2Nyb2xsT2Zmc2V0LnkoKSwgMCk7CisgICAgd2ViU2Nyb2xsUG9zaXRpb25Z
ID0gc3RkOjptaW4od2ViU2Nyb2xsUG9zaXRpb25ZLCBtX2NvbnRlbnRzU2l6ZS5oZWlnaHQoKSAt
IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7CisKKyAgICBmbG9hdCBhZGp1c3RlZFgg
PSBtX3N0YXRlLnBvcy54KCkgKyB1aVNjcm9sbFBvc2l0aW9uWCAtIHdlYlNjcm9sbFBvc2l0aW9u
WDsKKyAgICBmbG9hdCBhZGp1c3RlZFkgPSBtX3N0YXRlLnBvcy55KCkgKyB1aVNjcm9sbFBvc2l0
aW9uWSAtIHdlYlNjcm9sbFBvc2l0aW9uWTsKKworICAgIHJldHVybiBGbG9hdFBvaW50KGFkanVz
dGVkWCwgYWRqdXN0ZWRZKTsKK30KIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuaAkocmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiAr
MTI2LDExIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSgpIHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlOyB9CiAgICAgdm9pZCBj
bGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKIAorICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maXhlZFRvVmlld3BvcnQ7IH0KKyAgICB2b2lkIHNl
dEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQpIHsgbV9zdGF0ZS5maXhlZFRvVmlld3BvcnQg
PSBpc0ZpeGVkOyB9CisgICAgdm9pZCBzZXRWaWV3cG9ydEFuZENvbnRlbnRzU2l6ZShjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6
ZSk7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIHNjcm9sbE9mZnNl
dCkgeyBtX3Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldDsgfQorCiBwcml2YXRlOgogICAgIFRl
eHR1cmVNYXBwZXJMYXllciogcm9vdExheWVyKCk7CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3Jt
c1JlY3Vyc2l2ZSgpOwpAQCAtMTYxLDYgKzE2Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOwogICAgIH0KIAorICAgIEZs
b2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbigpOworCiAgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJM
YXllcio+IG1fY2hpbGRyZW47CiAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtX3BhcmVudDsKICAg
ICBUZXh0dXJlTWFwcGVyTGF5ZXIqIG1fZWZmZWN0VGFyZ2V0OwpAQCAtMTk2LDYgKzIwMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgdmlzaWJsZSA6IDE7CiAgICAgICAgIGJvb2wgbmVlZHNE
aXNwbGF5OiAxOwogICAgICAgICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBzIDogMTsKKyAgICAgICAg
Ym9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwogICAgICAgICBib29sIG5lZWRzUmVwYWludDsKICAg
ICAgICAgU3RhdGUoKQogICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKQEAgLTIwOSwxNCArMjE3
LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIHZpc2libGUodHJ1ZSkKICAgICAgICAgICAg
ICwgbmVlZHNEaXNwbGF5KHRydWUpCiAgICAgICAgICAgICAsIG1pZ2h0SGF2ZU92ZXJsYXBzKGZh
bHNlKQorICAgICAgICAgICAgLCBmaXhlZFRvVmlld3BvcnQoZmFsc2UpCiAgICAgICAgICAgICAs
IG5lZWRzUmVwYWludChmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsKLQogICAg
IFN0YXRlIG1fc3RhdGU7CiAgICAgVGV4dHVyZU1hcHBlciogbV90ZXh0dXJlTWFwcGVyOwogICAg
IFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKKyAgICBJbnRSZWN0IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKKyAgICBGbG9hdFNpemUgbV9jb250ZW50c1NpemU7CisgICAgSW50
UG9pbnQgbV9zY3JvbGxPZmZzZXQ7CiB9OwogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEx
MjY4OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDEyLTA0LTAyICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNv
bT4KKworICAgICAgICBJbml0aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRz
IGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVHVybiBvbiB0aGUgZmxhZyBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3Np
dGlvbkVuYWJsZWQgd2hlbiB1c2luZyBmaXhlZCBsYXlvdXQuCisgICAgICAgIFBhc3MgdGhlIGEg
ZmxhZyBhbmQgc2Nyb2xsIG9mZnNldCB0byBUZXh0dXJlTWFwcGVyTGF5ZXIsIHNvIHRoYXQgaXQg
Y2FuIG1ha2UgYWRqdXN0bWVudHMKKyAgICAgICAgaW4gc2Nyb2xsIHBvc2l0aW9uIGR1cmluZyBz
Y3JvbGxpbmcuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJJbmZvOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAg
KFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcik6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmg6CisgICAgICAgIChXZWJMYXllclRyZWVSZW5kZXJl
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydCk6Cisg
ICAgICAgIChXZWJHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRl
bnRzVXNpbmdMYXlvdXRTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5
ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpkZXRh
Y2hMYXllcik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZz
ZXRGcm9tVmlld3BvcnRGb3JTZWxmKToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJv
bVZpZXdwb3J0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnN5
bmNGaXhlZExheWVycyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJl
ZUhvc3RRdC5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFF0KToKKwogMjAxMi0wMy0zMCAgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBb
UXRdIEZpbmQgem9vbWFibGUgYXJlYSB1c2luZyBhcmVhLWJhc2VkIGhpdC10ZXN0aW5nCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCShyZXZpc2lvbiAx
MTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgdm9pZCBXZWJMYXllckluZm86OmVuY29kZShD
b3JlSVBDOjpBcmd1bQogICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGlu
ZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVu
dHMuCiAgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNo
aWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAg
IGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0
eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50c1JlY3QsIGFuaW1hdGlv
bnMpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oc2Nyb2xsT2Zmc2V0KSk7CiB9
CiAKIGJvb2wgV2ViTGF5ZXJJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBXZWJMYXllckluZm8mIGluZm8pCkBAIC00NSw2ICs0Niw5IEBAIGJvb2wgV2ViTGF5
ZXJJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW0KICAgICBpZiAoIWRlY29kZXItPmRlY29kZShD
b3JlSVBDOjpPdXQoaW5mby5wb3MsIGluZm8uc2l6ZSwgaW5mby50cmFuc2Zvcm0sIGluZm8ub3Bh
Y2l0eSwgaW5mby5hbmNob3JQb2ludCwgaW5mby5jaGlsZHJlblRyYW5zZm9ybSwgaW5mby5jb250
ZW50c1JlY3QsIGluZm8uYW5pbWF0aW9ucykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5zY3JvbGxPZmZzZXQpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAkocmV2aXNpb24gMTEyNjY1KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDkgKzEwOCwxMSBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICAgICAgICAg
IGJvb2wgcHJlc2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVlZHNEaXNw
bGF5IDogMTsKICAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAgICAgICAgICBi
b29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVkIGlu
dCBmbGFnczsKICAgICB9OworICAgIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbE9mZnNldDsKICAg
ICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRyZW47CiAgICAgVmVjdG9yPFdlYkxheWVyQW5pbWF0
aW9uPiBhbmltYXRpb25zOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlQmFja2lu
Z1N0b3JlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhv
c3RQcm94eS5jcHAJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEx
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95RGlyZWN0bHkKICAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBtX3JlbmRl
cmVyLmdldCgpLCBrZXkpKTsKIH0KIAordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldENvbnRl
bnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX3JlbmRlcmVy
LT5zZXRDb250ZW50c1NpemUoY29udGVudHNTaXplKTsKK30KKwogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQg
c2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7CiAgICAgbV9yZW5k
ZXJlci0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCBzY2FsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCShyZXZpc2lvbiAxMTI2
NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXApOwogICAgIHZvaWQgcGFp
bnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KTsKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CiAg
ICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFdlYktpdDo6VXBkYXRlSW5mbyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9D
dXJyZW4KICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRl
eHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwogICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFj
Y2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKIAorICAgIGFk
anVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKTsKICAgICBzeW5jUmVtb3RlQ29udGVudCgp
OwogICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKICAg
ICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCkBAIC0xNTUsNiArMTU2LDExIEBAIHZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGkKICAgICBtX3RleHR1cmVNYXBwZXItPnNldEdy
YXBoaWNzQ29udGV4dCgwKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAg
IG1fY29udGVudHNTaXplID0gY29udGVudHNTaXplOworfQorCiB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0
IHNjYWxlKQogewogICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CkBAIC0xNjcsNiAr
MTczLDEzIEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3IKICAgICAg
ICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKK3ZvaWQgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKQorewor
ICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOworICAgIGZv
ciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT5zZWNvbmQpLT5zZXRW
aWV3cG9ydEFuZENvbnRlbnRzU2l6ZShtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNT
aXplKTsKK30KKwogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYW1ldGVy
cyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5mbykKIHsKICAgICBXZWJMYXllcklEIGlkID0g
bGF5ZXJJbmZvLmlkOwpAQCAtMTg4LDYgKzIwMSwxOCBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjpzeW5jTGF5ZXJQYXJhCiAgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5m
by5jb250ZW50c09wYXF1ZSk7CiAgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8u
Y29udGVudHNSZWN0KTsKICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3
c0NvbnRlbnQpOworICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVy
ID0gdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllcik7CisgICAgZ3JhcGhpY3NMYXll
ci0+c2V0U2Nyb2xsT2Zmc2V0KGxheWVySW5mby5zY3JvbGxPZmZzZXQpOworICAgIGdyYXBoaWNz
TGF5ZXItPnNldFZpc2libGVDb250ZW50c1JlY3QobV92aXNpYmxlQ29udGVudHNSZWN0KTsKKyAg
ICBncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1NpemUobV9jb250ZW50c1NpemUpOworCisgICAg
VGV4dHVyZU1hcHBlckxheWVyKiB0ZXh0dXJlTWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJM
YXllcihsYXllcik7CisgICAgdGV4dHVyZU1hcHBlckxheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQo
bGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7CisKKyAgICBpZiAodGV4dHVyZU1hcHBlckxheWVy
LT5maXhlZFRvVmlld3BvcnQoKSkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQobGF5ZXJJbmZv
LmlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXll
ckluZm8uaWQpOwogCiAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1h
Z2VCYWNraW5nU3RvcmVJRCk7CiAKQEAgLTIzOSw2ICsyNjQsNyBAQCB2b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjpkZWxldGVMYXllcihXCiAKICAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgp
OwogICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92
ZShsYXllcklEKTsKICAgICBkZWxldGUgbGF5ZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCShyZXZpc2lvbiAxMTI2NjUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFRvQ3Vy
cmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0Nv
bnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiAgICAgdm9pZCBz
eW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKQEAg
LTgwLDggKzgxLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291
bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllcios
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGlu
Z1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CiAgICAgdm9pZCBjYWxsT25NYWlu
VHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgYWRqdXN0UG9zaXRpb25G
b3JBbGxGaXhlZExheWVycygpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUg
bV9jb250ZW50c1NpemU7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCkBAIC0xMTAsNiArMTEzLDcgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKIAogICAgIExh
eWVyTWFwIG1fbGF5ZXJzOworICAgIExheWVyTWFwIG1fZml4ZWRMYXllcnM7CiAgICAgV2ViTGF5
ZXJJRCBtX3Jvb3RMYXllcklEOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCShyZXZpc2lvbiAxMTI2NjUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksNiArMTM5LDkgQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBk
YXRlU2l6ZSgpCiAgICAgUVNpemVGIHNjYWxlZFNpemUgPSBjb250ZW50c1NpemUgKiBjb250ZW50
c1NjYWxlOwogICAgIHEtPnNldFNpemUoc2NhbGVkU2l6ZSk7CiAgICAgdmlld3BvcnRJdGVtLT51
cGRhdGVDb250ZW50c1NpemUoc2NhbGVkU2l6ZSk7CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJh
d2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKGRyYXdpbmdB
cmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKSkKKyAgICAgICAgZHJhd2lu
Z0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRDb250ZW50c1NpemUoV2ViQ29yZTo6Rmxv
YXRTaXplKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1NpemUuaGVpZ2h0KCkpKTsKIH0K
IAogUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgV2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NM
YXllcihHcmFwaAogICAgICwgbV9jb250ZW50TmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9o
YXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKICAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNlKQor
ICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCiAgICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKICAgICAsIG1fY29udGVudHNT
Y2FsZSgxLmYpCkBAIC0xNzgsNiArMTc5LDggQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRQ
b3NpdGlvbihjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRQ
b3NpdGlvbihwKTsKKyAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KQorICAgICAgICBt
X3Njcm9sbE9mZnNldCA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dmlzaWJsZUNvbnRlbnRz
UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgbm90aWZ5Q2hhbmdlUmVjdXJzaXZlbHkoKTsKIH0KIApA
QCAtNDE2LDYgKzQxOSw4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5n
U3QKICAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXll
cihyZXBsaWNhTGF5ZXIoKSkpCiAgICAgICAgIHJlcGxpY2EtPnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwogCisgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5j
Rml4ZWRMYXllcnMoKTsKKwogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytp
KQpAQCAtNDU0LDYgKzQ1OSw4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0
aW5nU3QKICAgICAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAg
ICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgICAgICBtX2xheWVySW5mby5j
aGlsZHJlbi5jbGVhcigpOworICAgICAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBm
aXhlZFRvVmlld3BvcnQoKTsKKyAgICAgICAgbV9sYXllckluZm8uc2Nyb2xsT2Zmc2V0ID0gbV9z
Y3JvbGxPZmZzZXQ7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigp
LnNpemUoKTsgKytpKQogICAgICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRv
V2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAko
cmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVy
KGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
TGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogfTsKIH0KIApAQCAtMTEzLDYgKzExNCw5IEBAIHB1Ymxp
YzoKICAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CiAKKyAgICBib29sIGZpeGVkVG9WaWV3
cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9CisgICAgdm9pZCBzZXRG
aXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhl
ZDsgfQorCiAgICAgR3JhcGhpY3NMYXllciogbWFza1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFza1RhcmdldDsgfQogICAgIHZvaWQgc2V0TWFza1RhcmdldChHcmFwaGljc0xheWVyKiBsYXll
cikgeyBtX21hc2tUYXJnZXQgPSBsYXllcjsgfQogCkBAIC0xNTIsMTIgKzE1NiwxNSBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9jb250ZW50TmVlZHNEaXNwbGF5IDogMTsKICAgICBib29sIG1faGFz
UGVuZGluZ0FuaW1hdGlvbnMgOiAxOwogICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUgOiAyOworICAg
IGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwogCiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsK
ICAgICB2b2lkIG5vdGlmeUNoYW5nZVJlY3Vyc2l2ZWx5KCk7CiAgICAgdm9pZCBjcmVhdGVCYWNr
aW5nU3RvcmUoKTsKICAgICBIYXNoU2V0PFN0cmluZz4gbV90cmFuc2Zvcm1BbmltYXRpb25zOwog
CisgICAgSW50UG9pbnQgbV9zY3JvbGxPZmZzZXQ7CisKICAgICBib29sIHNlbGZPckFuY2VzdG9y
SGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9ucygpIGNvbnN0OwogCiAjaWYgVVNFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMyw2ICs4MzMsOCBA
QCB2b2lkIFdlYlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMCiAgICAgLy8gQWx3YXlz
IHJlc2V0IGV2ZW4gd2hlbiBlbXB0eS4KICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUodGFy
Z2V0TGF5b3V0U2l6ZSk7CiAKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCh0cnVlKTsKKwogICAgIC8vIFNjaGVk
dWxlIGEgbGF5b3V0IHRvIHVzZSB0aGUgbmV3IHRhcmdldCBzaXplLgogICAgIGlmICghdmlldy0+
bGF5b3V0UGVuZGluZygpKSB7CiAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0KCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5
ZXJUcmVlSG9zdFF0LmNwcAkocmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNr
aW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjUyLDYgKzI1Niw1NCBAQCB2b2lkIExh
eWVyVHJlZUhvc3RRdDo6ZGV0YWNoTGF5ZXIoV2ViR3JhCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXIt
PmlkKCkpKTsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2Vs
ZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBt
dXN0IG1hdGNoIHRoZSBjb25kaXNpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgorICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2lu
ZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIo
KS0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIo
KS0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5
ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3Jh
cGhpY3NMYXllcigpKTsKKyAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJl
bmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRG
b3JTZWxmKHJlbmRlckxheWVyKTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgp
KQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+
Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAg
ICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2li
bGluZygpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycygpCit7
CisgICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV93ZWJQYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVjdHMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2ViUGFnZS0+bWFpbkZy
YW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RSZW5kZXJMYXllcigp
OworICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOworICAgIGlmIChyb290UmVuZGVyTGF5ZXIt
PmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIo
cm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RR
dDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewogI2lmIFVTRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAkocmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKTsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CisgICAgdmly
dHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135263</attachid>
            <date>2012-04-02 20:10:26 -0700</date>
            <delta_ts>2012-04-03 18:37:26 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>28266</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMjY4
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA0
LTAyICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0
cy9maXhlZC1wb3NpdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0zMCAgRGF2aWQgQmFyciAg
PGRhdmlkYmFyckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BsaXQgdXAgdG9wLWxldmVsIC5n
aXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzCkluZGV4OiBNYW51YWxUZXN0cy9maXhlZC1wb3Np
dGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc4IEBACis8aHRtbD48aGVhZD4KKworPG1ldGEgY29udGVudD0idGV4
dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4K
KzxzdHlsZT4KKy5kMXtwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO3JpZ2h0OjUwJTt6LWluZGV4OjI7
b3ZlcmZsb3c6aGlkZGVuO30KKy5kMntwb3NpdGlvbjpmaXhlZDtib3R0b206NWVtO2xlZnQ6NTA7
ei1pbmRleDoyO292ZXJmbG93OmhpZGRlbjt9CisubyB7YmFja2dyb3VuZDpncmVlbjtoZWlnaHQ6
NDBweDt3aWR0aDoyMDBweDt9CisudCB7IHdpZHRoOjIwMDBweDsgaGVpZ2h0OjE5OHB4O2JhY2tn
cm91bmQtY29sb3I6IGxpZ2h0Z3JheTsgYm9yZGVyOiAxcHggc29saWQgYmx1ZTt9Citib2R5IHsg
bWFyZ2luOiAwcHg7IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iR3JhZGllbnQi
PgorPGRpdiBjbGFzcz0iZDEiPjxkaXYgY2xhc3M9Im8iPlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9k
aXY+Cis8ZGl2IGNsYXNzPSJkMiI+PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48
L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjAw
Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgor
NjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQi
PgorMTAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEyMDAKKzwvZGl2PgorPGRpdiBjbGFz
cz0idCI+CisxNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTYwMAorPC9kaXY+Cis8ZGl2
IGNsYXNzPSJ0Ij4KKzE4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMDAwCis8L2Rpdj4K
KzxkaXYgY2xhc3M9InQiPgorMjIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzI0MDAKKzwv
ZGl2PgorPGRpdiBjbGFzcz0idCI+CisyNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjgw
MAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzMwMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+
CiszMjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzQwMAorPC9kaXY+Cis8ZGl2IGNsYXNz
PSJ0Ij4KKzM2MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszODAwCis8L2Rpdj4KKzxkaXYg
Y2xhc3M9InQiPgorNDAwMAorPC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMTEyNjg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDQtMDIgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZml4ZWQgcG9zaXRp
b24gZWxlbWVudHMgaW4gUXQgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODE3ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIHRoZSBzZXR0aW5nIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZCBpcyB0cnVlLCB3ZSBuZWVkIHRvIHVwYWR0ZQorICAgICAg
ICB0aGUgcG9zaXRpb24gb2YgZml4ZWQgbGF5ZXJzLCBhbmQgc2VuZCB1cGRhdGVzIHRvIHRoZSBV
SSBwcm9jZXNzIGFzIHdlIHNjcm9sbC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp2aXNp
YmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFZpZXdwb3J0QW5kQ29u
dGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckxheWVyOjphZGp1c3RlZFNjcm9sbE9mZnNldCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyOjpmaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoVGV4dHVy
ZU1hcHBlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJMYXllcjo6U3RhdGU6OlN0YXRlKToKKwogMjAxMi0wMy0zMCAgRGF2aWQgQmFyciAg
PGRhdmlkYmFyckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3BsaXQgdXAgdG9wLWxldmVsIC5n
aXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MTAsOCArMTcxMCwxMSBAQCB2b2lkIEZyYW1lVmlldzo6
c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlCiB7CiAgICAgSW50U2l6ZSBvZmZzZXQgPSBzY3JvbGxP
ZmZzZXQoKTsKICAgICBTY3JvbGxWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdCh2aXNp
YmxlQ29udGVudFJlY3QpOwotICAgIGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAg
aWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkgeworICAgICAgICBpZiAobV9mcmFtZS0+cGFn
ZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoKSkKKyAgICAgICAgICAgIHVwZGF0ZUZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZygp
OwogICAgICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB9CiAgICAgZnJhbWUoKS0+
bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgJKHJldmlzaW9uIDExMjY2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCwxNSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwog
I2VuZGlmCiAKKyAgICBJbnRQb2ludCBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbE9mZnNldDsgfQorICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBv
ZmZzZXQpIHsgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQ7IH0KKworICAgIEludFJlY3QgdmlzaWJs
ZUNvbnRlbnRzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsgfQor
ICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1f
dmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7IH0KKworICAgIEZsb2F0U2l6ZSBjb250ZW50c1Np
emUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQorICAgIHZvaWQgc2V0Q29udGVu
dHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBtX2NvbnRlbnRzU2l6ZSA9IHNpemU7IH0K
KwogcHJpdmF0ZToKICAgICBPd25QdHI8VGV4dHVyZU1hcHBlckxheWVyPiBtX2xheWVyOwogICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKQEAg
LTEwNiw2ICsxMTUsOSBAQCBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1f
YW5pbWF0aW9uczsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiopOwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKKyAgICBJbnRQb2ludCBtX3Njcm9s
bE9mZnNldDsKKyAgICBJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBGbG9hdFNp
emUgbV9jb250ZW50c1NpemU7CiB9OwogCiBpbmxpbmUgc3RhdGljIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKiB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHJldmlzaW9uIDExMjY2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjgsMTIgKzQyOCwxNSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5nCiAgICAgbV9zdGF0ZS5maWx0ZXJzID0gZ3Jh
cGhpY3NMYXllci0+ZmlsdGVycygpOwogI2VuZGlmCiAKKyAgICBtX3Zpc2libGVDb250ZW50c1Jl
Y3QgPSBncmFwaGljc0xheWVyLT52aXNpYmxlQ29udGVudHNSZWN0KCk7CisgICAgbV9jb250ZW50
c1NpemUgPSBncmFwaGljc0xheWVyLT5jb250ZW50c1NpemUoKTsKICAgICBtX3N0YXRlLm5lZWRz
RGlzcGxheSA9IG1fc3RhdGUubmVlZHNEaXNwbGF5IHx8IGdyYXBoaWNzTGF5ZXItPm5lZWRzRGlz
cGxheSgpOwogICAgIGlmICghbV9zdGF0ZS5uZWVkc0Rpc3BsYXkpCiAgICAgICAgIG1fc3RhdGUu
bmVlZHNEaXNwbGF5UmVjdC51bml0ZShncmFwaGljc0xheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCkp
OwogICAgIG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXIoKTsK
IAotICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKKyAgICBtX3dlYlNj
cm9sbE9mZnNldCA9IG5vcm1hbGl6ZWRTY3JvbGxPZmZzZXQoZ3JhcGhpY3NMYXllci0+c2Nyb2xs
T2Zmc2V0KCkpOworICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKGZpeGVkVG9WaWV3cG9ydCgp
ID8gYWRqdXN0ZWRQb3NpdGlvbigpIDogbV9zdGF0ZS5wb3MpOwogICAgIG1fdHJhbnNmb3JtLnNl
dEFuY2hvclBvaW50KG1fc3RhdGUuYW5jaG9yUG9pbnQpOwogICAgIG1fdHJhbnNmb3JtLnNldFNp
emUobV9zdGF0ZS5zaXplKTsKICAgICBtX3RyYW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFtX3N0YXRl
LnByZXNlcnZlczNEKTsKQEAgLTUxMSw1ICs1MTQsMzcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OnN5bmNDb21wb3NpdGluZwogICAgIH0KIH0KIAorRmxvYXRQb2ludCBUZXh0dXJlTWFwcGVy
TGF5ZXI6Om5vcm1hbGl6ZWRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIHdlYlNjcm9sbE9m
ZnNldCkKK3sKKyAgICBmbG9hdCB3ZWJTY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1heCh3ZWJTY3Jv
bGxPZmZzZXQueCgpLCAwKTsKKyAgICB3ZWJTY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1pbih3ZWJT
Y3JvbGxQb3NpdGlvblgsIG1fY29udGVudHNTaXplLndpZHRoKCkgLSBtX3Zpc2libGVDb250ZW50
c1JlY3Qud2lkdGgoKSk7CisKKyAgICBmbG9hdCB3ZWJTY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1h
eCh3ZWJTY3JvbGxPZmZzZXQueSgpLCAwKTsKKyAgICB3ZWJTY3JvbGxQb3NpdGlvblkgPSBzdGQ6
Om1pbih3ZWJTY3JvbGxQb3NpdGlvblksIG1fY29udGVudHNTaXplLmhlaWdodCgpIC0gbV92aXNp
YmxlQ29udGVudHNSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludCh3ZWJTY3Jv
bGxQb3NpdGlvblgsIHdlYlNjcm9sbFBvc2l0aW9uWSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
ckxheWVyOjpzZXRWaWV3cG9ydEFuZENvbnRlbnRzU2l6ZShjb25zdCBJbnRSZWN0JiB2aXNpYmxl
Q29udGVudHNSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX3Zp
c2libGVDb250ZW50c1JlY3QgPSB2aXNpYmxlQ29udGVudHNSZWN0OworICAgIG1fY29udGVudHNT
aXplID0gY29udGVudHNTaXplOworICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKGZpeGVkVG9W
aWV3cG9ydCgpID8gYWRqdXN0ZWRQb3NpdGlvbigpIDogbV9zdGF0ZS5wb3MpOworfQorCitGbG9h
dFBvaW50IFRleHR1cmVNYXBwZXJMYXllcjo6YWRqdXN0ZWRQb3NpdGlvbigpCit7CisgICAgQVNT
RVJUKGZpeGVkVG9WaWV3cG9ydCgpKTsKKworICAgIGZsb2F0IHVpU2Nyb2xsUG9zaXRpb25YID0g
c3RkOjptYXgobV92aXNpYmxlQ29udGVudHNSZWN0LngoKSwgMCk7CisgICAgdWlTY3JvbGxQb3Np
dGlvblggPSBzdGQ6Om1pbih1aVNjcm9sbFBvc2l0aW9uWCwgbV9jb250ZW50c1NpemUud2lkdGgo
KSAtIG1fdmlzaWJsZUNvbnRlbnRzUmVjdC53aWR0aCgpKTsKKworICAgIGZsb2F0IHVpU2Nyb2xs
UG9zaXRpb25ZID0gc3RkOjptYXgobV92aXNpYmxlQ29udGVudHNSZWN0LnkoKSwgMCk7CisgICAg
dWlTY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1pbih1aVNjcm9sbFBvc2l0aW9uWSwgbV9jb250ZW50
c1NpemUuaGVpZ2h0KCkgLSBtX3Zpc2libGVDb250ZW50c1JlY3QuaGVpZ2h0KCkpOworCisgICAg
ZmxvYXQgYWRqdXN0ZWRYID0gbV9zdGF0ZS5wb3MueCgpICsgdWlTY3JvbGxQb3NpdGlvblggLSBt
X3dlYlNjcm9sbE9mZnNldC54KCk7CisgICAgZmxvYXQgYWRqdXN0ZWRZID0gbV9zdGF0ZS5wb3Mu
eSgpICsgdWlTY3JvbGxQb3NpdGlvblkgLSBtX3dlYlNjcm9sbE9mZnNldC55KCk7CisKKyAgICBy
ZXR1cm4gRmxvYXRQb2ludChhZGp1c3RlZFgsIGFkanVzdGVkWSk7Cit9CiB9CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgJKHJldmlzaW9uIDExMjY2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiwxMCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2JhY2tp
bmdTdG9yZTsgfQogICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKKyAg
ICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZml4ZWRUb1Zp
ZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1f
c3RhdGUuZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQorICAgIHZvaWQgc2V0Vmlld3BvcnRB
bmRDb250ZW50c1NpemUoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgY29uc3Qg
RmxvYXRTaXplJiBjb250ZW50c1NpemUpOworCiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJM
YXllciogcm9vdExheWVyKCk7CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3Jtc1JlY3Vyc2l2ZSgp
OwpAQCAtMTQ0LDYgKzE0OCw4IEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IHRleHR1cmUoKSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3Jl
LT50ZXh0dXJlKCkgOiAwOyB9CiAKKyAgICBGbG9hdFBvaW50IG5vcm1hbGl6ZWRTY3JvbGxPZmZz
ZXQoY29uc3QgSW50UG9pbnQmKTsKKwogICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4
dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNv
bnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKQEAgLTE2MSw2ICsxNjcsOCBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9zaXpl
KTsKICAgICB9CiAKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9zaXRpb24oKTsKKwogICAgIFZl
Y3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIqPiBtX2NoaWxkcmVuOwogICAgIFRleHR1cmVNYXBwZXJM
YXllciogbV9wYXJlbnQ7CiAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtX2VmZmVjdFRhcmdldDsK
QEAgLTE5Niw2ICsyMDQsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHZpc2libGUgOiAxOwog
ICAgICAgICBib29sIG5lZWRzRGlzcGxheTogMTsKICAgICAgICAgYm9vbCBtaWdodEhhdmVPdmVy
bGFwcyA6IDE7CisgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0IDogMTsKICAgICAgICAgYm9v
bCBuZWVkc1JlcGFpbnQ7CiAgICAgICAgIFN0YXRlKCkKICAgICAgICAgICAgIDogb3BhY2l0eSgx
LmYpCkBAIC0yMDksMTQgKzIxOCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCB2aXNpYmxl
KHRydWUpCiAgICAgICAgICAgICAsIG5lZWRzRGlzcGxheSh0cnVlKQogICAgICAgICAgICAgLCBt
aWdodEhhdmVPdmVybGFwcyhmYWxzZSkKKyAgICAgICAgICAgICwgZml4ZWRUb1ZpZXdwb3J0KGZh
bHNlKQogICAgICAgICAgICAgLCBuZWVkc1JlcGFpbnQoZmFsc2UpCiAgICAgICAgIHsKICAgICAg
ICAgfQogICAgIH07Ci0KICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIFRleHR1cmVNYXBwZXIqIG1f
dGV4dHVyZU1hcHBlcjsKICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7
CisgICAgSW50UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CisgICAgRmxvYXRTaXplIG1fY29u
dGVudHNTaXplOworICAgIEZsb2F0UG9pbnQgbV93ZWJTY3JvbGxPZmZzZXQ7CiB9OwogCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjY4OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA0LTAyICBZYWVsIEFoYXJv
biAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0aWFsIHN1cHBvcnQgZm9y
IGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVHVybiBvbiB0aGUgZmxhZyBhY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgd2hlbiB1c2luZyBmaXhlZCBsYXlv
dXQuCisgICAgICAgIFBhc3MgdGhlIGEgZmxhZyBhbmQgc2Nyb2xsIG9mZnNldCB0byBUZXh0dXJl
TWFwcGVyTGF5ZXIsIHNvIHRoYXQgaXQgY2FuIG1ha2UgYWRqdXN0bWVudHMKKyAgICAgICAgaW4g
c2Nyb2xsIHBvc2l0aW9uIGR1cmluZyBzY3JvbGxpbmcuCisKKyAgICAgICAgKiBTaGFyZWQvV2Vi
TGF5ZXJUcmVlSW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpkZWNvZGUpOgorICAgICAgICAqIFNo
YXJlZC9XZWJMYXllclRyZWVJbmZvLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXpl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAg
ICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRy
ZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpw
YWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXll
cnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFy
YW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVM
YXllcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmg6CisgICAg
ICAgIChXZWJMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OnNldEZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlvdXRTaXplKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFF0OjpkZXRhY2hMYXllcik6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKToKKyAgICAgICAg
KFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9z
dFF0KToKKwogMjAxMi0wMy0zMCAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2Vu
QG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEZpbmQgem9vbWFibGUgYXJlYSB1c2luZyBhcmVh
LWJhc2VkIGhpdC10ZXN0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uY3BwCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViTGF5ZXJUcmVlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgdm9p
ZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bQogICAgIC8vIFdlIGhhdmUgdG8g
ZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2Vz
IGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCiAgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6
OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwgbWFzaywgaW1h
Z2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3Ms
IHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3Jt
LCBjb250ZW50c1JlY3QsIGFuaW1hdGlvbnMpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQ
Qzo6SW4oc2Nyb2xsT2Zmc2V0KSk7CiB9CiAKIGJvb2wgV2ViTGF5ZXJJbmZvOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJMYXllckluZm8mIGluZm8pCkBAIC00
NSw2ICs0Niw5IEBAIGJvb2wgV2ViTGF5ZXJJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW0KICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5wb3MsIGluZm8uc2l6ZSwg
aW5mby50cmFuc2Zvcm0sIGluZm8ub3BhY2l0eSwgaW5mby5hbmNob3JQb2ludCwgaW5mby5jaGls
ZHJlblRyYW5zZm9ybSwgaW5mby5jb250ZW50c1JlY3QsIGluZm8uYW5pbWF0aW9ucykpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpP
dXQoaW5mby5zY3JvbGxPZmZzZXQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaAkocmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkgKzEwOCwxMSBAQCBzdHJ1Y3QgV2Vi
TGF5ZXJJbmZvIHsKICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVzM0QgOiAxOwogICAgICAgICAg
ICAgYm9vbCBjb250ZW50TmVlZHNEaXNwbGF5IDogMTsKICAgICAgICAgICAgIGJvb2wgaXNSb290
TGF5ZXI6IDE7CisgICAgICAgICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CiAgICAgICAg
IH07CiAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICB9OworICAgIFdlYkNvcmU6Oklu
dFBvaW50IHNjcm9sbE9mZnNldDsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRyZW47CiAg
ICAgVmVjdG9yPFdlYkxheWVyQW5pbWF0aW9uPiBhbmltYXRpb25zOwogICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGltYWdlQmFja2luZ1N0b3JlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAJKHJldmlzaW9uIDExMjY2NSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsNiArMTIwLDExIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0
cm95RGlyZWN0bHkKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6ZGVzdHJveUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXkpKTsKIH0KIAordm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRz
U2l6ZSkKK3sKKyAgICBtX3JlbmRlcmVyLT5zZXRDb250ZW50c1NpemUoY29udGVudHNTaXplKTsK
K30KKwogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3Rv
cnlWZWN0b3IpCiB7CiAgICAgbV9yZW5kZXJlci0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0
LCBzY2FsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhv
c3RQcm94eS5oCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGNsaXApOwogICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6
OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsK
KyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZs
b2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKICAgICB2
b2lkIGRpZFJlbmRlckZyYW1lKCk7CiAgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCShy
ZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW4KICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwogICAgIEFT
U0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVy
OjpPcGVuR0xNb2RlKTsKIAorICAgIGFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKTsK
ICAgICBzeW5jUmVtb3RlQ29udGVudCgpOwogICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290
TGF5ZXIgPSByb290TGF5ZXIoKTsKICAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCkBAIC0xNTUs
NiArMTU2LDExIEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGkKICAg
ICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKIH0KIAordm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgY29udGVudHNTaXplKQoreworICAgIG1fY29udGVudHNTaXplID0gY29udGVudHNTaXplOwor
fQorCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKQogewogICAgIG1fdmlzaWJsZUNvbnRlbnRz
UmVjdCA9IHJlY3Q7CkBAIC0xNjcsNiArMTczLDEzIEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnVwZGF0ZVZpZXdwb3IKICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZp
ZXdwb3J0KCk7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9u
Rm9yQWxsRml4ZWRMYXllcnMoKQoreworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2Zp
eGVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhl
ZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBl
ckxheWVyKGl0LT5zZWNvbmQpLT5zZXRWaWV3cG9ydEFuZENvbnRlbnRzU2l6ZShtX3Zpc2libGVD
b250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKK30KKwogdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5mbykK
IHsKICAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOwpAQCAtMTg4LDYgKzIwMSwxOCBA
QCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhCiAgICAgbGF5ZXItPnNl
dENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7CiAgICAgbGF5ZXItPnNl
dENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKICAgICBsYXllci0+c2V0RHJh
d3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworICAgIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKiBncmFwaGljc0xheWVyID0gdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihs
YXllcik7CisgICAgZ3JhcGhpY3NMYXllci0+c2V0U2Nyb2xsT2Zmc2V0KGxheWVySW5mby5zY3Jv
bGxPZmZzZXQpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldFZpc2libGVDb250ZW50c1JlY3QobV92
aXNpYmxlQ29udGVudHNSZWN0KTsKKyAgICBncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1NpemUo
bV9jb250ZW50c1NpemUpOworCisgICAgVGV4dHVyZU1hcHBlckxheWVyKiB0ZXh0dXJlTWFwcGVy
TGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllcik7CisgICAgdGV4dHVyZU1hcHBlckxh
eWVyLT5zZXRGaXhlZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7CisKKyAg
ICBpZiAodGV4dHVyZU1hcHBlckxheWVyLT5maXhlZFRvVmlld3BvcnQoKSkKKyAgICAgICAgbV9m
aXhlZExheWVycy5hZGQobGF5ZXJJbmZvLmlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBt
X2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllckluZm8uaWQpOwogCiAgICAgYXNzaWduSW1hZ2VUb0xh
eWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7CiAKQEAgLTIzOSw2ICsy
NjQsNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcihXCiAKICAgICBs
YXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwogICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsK
KyAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKICAgICBkZWxldGUgbGF5ZXI7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5oCShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAg
ICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCk7CiAgICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0
Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpOwog
CiAgICAgdm9pZCBkZXRhY2goKTsKQEAgLTgwLDggKzgxLDEwIEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
eyB9CiAgICAgdm9pZCBjYWxsT25NYWluVHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwor
ICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JBbGxGaXhlZExheWVycygpOwogCiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsK
KyAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgV2ViQ29yZTo6SW50
UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwog
CkBAIC0xMTAsNiArMTEzLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9s
YXllcnNUb0RlbGV0ZTsKIAogICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIExheWVyTWFwIG1f
Zml4ZWRMYXllcnM7CiAgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwogfTsKIApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3Bw
CShyZXZpc2lvbiAxMTI2NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDkgQEAgdm9pZCBR
UXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgUVNpemVGIHNjYWxlZFNpemUg
PSBjb250ZW50c1NpemUgKiBjb250ZW50c1NjYWxlOwogICAgIHEtPnNldFNpemUoc2NhbGVkU2l6
ZSk7CiAgICAgdmlld3BvcnRJdGVtLT51cGRhdGVDb250ZW50c1NpemUoc2NhbGVkU2l6ZSk7Cisg
ICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdpbmdB
cmVhKCk7CisgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0
UHJveHkoKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRD
b250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250
ZW50c1NpemUuaGVpZ2h0KCkpKTsKIH0KIAogUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tX
ZWJQYWdlUHJpdmF0ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9u
IDExMjY2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
R3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgV2ViR3Jh
cGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcihHcmFwaAogICAgICwgbV9jb250ZW50TmVlZHNE
aXNwbGF5KGZhbHNlKQogICAgICwgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKICAgICAs
IG1faW5VcGRhdGVNb2RlKGZhbHNlKQorICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCiAj
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQoMCkKICAgICAsIG1fY29udGVudHNTY2FsZSgxLmYpCkBAIC0xNzgsNiArMTc5LDggQEAgdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdAogICAgICAgICByZXR1cm47CiAK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKKyAgICBpZiAobV93ZWJHcmFwaGlj
c0xheWVyQ2xpZW50KQorICAgICAgICBtX3Njcm9sbE9mZnNldCA9IG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgbm90aWZ5Q2hh
bmdlUmVjdXJzaXZlbHkoKTsKIH0KIApAQCAtNDE2LDYgKzQxOSw4IEBAIHZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcmVw
bGljYSA9IHRvV2ViR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCiAgICAgICAgIHJlcGxp
Y2EtPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCisgICAgbV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50LT5zeW5jRml4ZWRMYXllcnMoKTsKKwogICAgIHN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQpAQCAtNDU0LDYgKzQ1OSw4IEBAIHZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICAgICAgbV9sYXllckluZm8udHJhbnNm
b3JtID0gdHJhbnNmb3JtKCk7CiAgICAgICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNl
OwogICAgICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5jbGVhcigpOworICAgICAgICBtX2xheWVy
SW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKKyAgICAgICAgbV9sYXll
ckluZm8uc2Nyb2xsT2Zmc2V0ID0gbV9zY3JvbGxPZmZzZXQ7CiAKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQogICAgICAgICAgICAgbV9sYXll
ckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gMTEyNjY1KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5j
Q29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogfTsKIH0KIApA
QCAtMTEzLDYgKzExNCw5IEBAIHB1YmxpYzoKICAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBt
X2ltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7
CiAKKyAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1Zp
ZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1f
Zml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQorCiAgICAgR3JhcGhpY3NMYXllciogbWFza1Rh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RhcmdldDsgfQogICAgIHZvaWQgc2V0TWFza1Rh
cmdldChHcmFwaGljc0xheWVyKiBsYXllcikgeyBtX21hc2tUYXJnZXQgPSBsYXllcjsgfQogCkBA
IC0xNTIsMTIgKzE1NiwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250ZW50TmVlZHNEaXNw
bGF5IDogMTsKICAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMgOiAxOwogICAgIGJvb2wg
bV9pblVwZGF0ZU1vZGUgOiAyOworICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwogCiAg
ICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKICAgICB2b2lkIG5vdGlmeUNoYW5nZVJlY3Vyc2l2ZWx5
KCk7CiAgICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKICAgICBIYXNoU2V0PFN0cmluZz4g
bV90cmFuc2Zvcm1BbmltYXRpb25zOwogCisgICAgSW50UG9pbnQgbV9zY3JvbGxPZmZzZXQ7CisK
ICAgICBib29sIHNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9ucygpIGNv
bnN0OwogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMTI2NjUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzMyw2ICs4MzMsOCBAQCB2b2lkIFdlYlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRl
bnRzVXNpbmdMCiAgICAgLy8gQWx3YXlzIHJlc2V0IGV2ZW4gd2hlbiBlbXB0eS4KICAgICB2aWV3
LT5zZXRGaXhlZExheW91dFNpemUodGFyZ2V0TGF5b3V0U2l6ZSk7CiAKKyAgICBtX3BhZ2UtPnNl
dHRpbmdzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxl
ZCh0cnVlKTsKKwogICAgIC8vIFNjaGVkdWxlIGEgbGF5b3V0IHRvIHVzZSB0aGUgbmV3IHRhcmdl
dCBzaXplLgogICAgIGlmICghdmlldy0+bGF5b3V0UGVuZGluZygpKSB7CiAgICAgICAgIHZpZXct
PnNldE5lZWRzTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAkocmV2aXNpb24gMTEyNjY1
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAt
MjUyLDYgKzI1Niw1NCBAQCB2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGV0YWNoTGF5ZXIoV2ViR3Jh
CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0
ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRl
T2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7Cisg
ICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXNpb25zIGluIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgorICAgIFJl
bmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CisgICAg
aWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc1Bvc2l0
aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAh
PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVy
LT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdy
YXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAgICBncmFwaGljc0xheWVy
LT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNl
dEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICB1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsKKworICAgIGlmIChy
ZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5
ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxh
eWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OnN5bmNGaXhlZExheWVycygpCit7CisgICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9i
amVjdHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJM
YXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3Np
dG9yKCktPnJvb3RSZW5kZXJMYXllcigpOworICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOwor
ICAgIGlmIChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zm
c2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwor
fQorCiB2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQog
ewogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAkocmV2aXNp
b24gMTEyNjY1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJM
YXllckluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135479</attachid>
            <date>2012-04-03 18:37:26 -0700</date>
            <delta_ts>2012-04-04 19:30:23 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>25731</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMzEw
NSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA0
LTAzICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0
cy9maXhlZC1wb3NpdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0wMiAgQmFsYXpzIEtlbGVt
ZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJdIFNldCB1cCBwbHVn
aW4gcHJvY2VzcyBvbiBVbml4CkluZGV4OiBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwJKHJldmlzaW9u
IDApCisrKyBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc4IEBACis8aHRtbD48aGVhZD4KKworPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBj
aGFyc2V0PXdpbmRvd3MtMTI1MSIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4KKzxzdHlsZT4K
Ky5kMXtwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO3JpZ2h0OjUwJTt6LWluZGV4OjI7b3ZlcmZsb3c6
aGlkZGVuO30KKy5kMntwb3NpdGlvbjpmaXhlZDtib3R0b206NWVtO2xlZnQ6NTA7ei1pbmRleDoy
O292ZXJmbG93OmhpZGRlbjt9CisubyB7YmFja2dyb3VuZDpncmVlbjtoZWlnaHQ6NDBweDt3aWR0
aDoyMDBweDt9CisudCB7IHdpZHRoOjIwMDBweDsgaGVpZ2h0OjE5OHB4O2JhY2tncm91bmQtY29s
b3I6IGxpZ2h0Z3JheTsgYm9yZGVyOiAxcHggc29saWQgYmx1ZTt9Citib2R5IHsgbWFyZ2luOiAw
cHg7IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iR3JhZGllbnQiPgorPGRpdiBj
bGFzcz0iZDEiPjxkaXYgY2xhc3M9Im8iPlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9kaXY+Cis8ZGl2
IGNsYXNzPSJkMiI+PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48L2Rpdj4KKzxk
aXYgY2xhc3M9InQiPgorMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjAwCis8L2Rpdj4K
KzxkaXYgY2xhc3M9InQiPgorNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorNjAwCis8L2Rp
dj4KKzxkaXYgY2xhc3M9InQiPgorODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTAwMAor
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEyMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cisx
NDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTYwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0
Ij4KKzE4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMDAwCis8L2Rpdj4KKzxkaXYgY2xh
c3M9InQiPgorMjIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzI0MDAKKzwvZGl2PgorPGRp
diBjbGFzcz0idCI+CisyNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjgwMAorPC9kaXY+
Cis8ZGl2IGNsYXNzPSJ0Ij4KKzMwMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszMjAwCis8
L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzQwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzM2
MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQi
PgorNDAwMAorPC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MTEzMTA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjkgQEAKKzIwMTItMDQtMDMgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEu
Y29tPgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZml4ZWQgcG9zaXRpb24gZWxlbWVu
dHMgaW4gUXQgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODE3ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXaGVuIHRoZSBzZXR0aW5nIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uRW5hYmxlZCBpcyB0cnVlLCB3ZSBuZWVkIHRvIHVwZGF0ZQorICAgICAgICB0aGUgcG9z
aXRpb24gb2YgZml4ZWQgbGF5ZXJzLCBhbmQgc2VuZCB1cGRhdGVzIHRvIHRoZSBVSSBwcm9jZXNz
IGFzIHdlIHNjcm9sbC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNl
bGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJMYXllcjo6c2V0Q3VycmVudFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllcjo6YWRqdXN0ZWRQb3NpdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckxheWVyOjpmaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRXZWJTY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyTGF5ZXIpOgorICAgICAgICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckxheWVyOjpTdGF0ZTo6U3RhdGUpOgorCiAyMDEyLTA0LTAzICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVGhpcyBw
YXRjaCBhZGRzIGFuIHVnbHksIHVnbHkgaGFjayB0byBiYW5kYWlkIG92ZXIgdGhlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxMTMxMDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDEsOCArMTcwMSwx
MSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlCiB7CiAgICAgSW50
U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKICAgICBTY3JvbGxWaWV3OjpzZXRGaXhlZFZp
c2libGVDb250ZW50UmVjdCh2aXNpYmxlQ29udGVudFJlY3QpOwotICAgIGlmIChvZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KCkpCisgICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkgeworICAg
ICAgICBpZiAobV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIHVwZGF0ZUZpeGVkRWxl
bWVudHNBZnRlclNjcm9sbGluZygpOwogICAgICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsK
KyAgICB9CiAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDaGFuZ2VTY3JvbGxP
ZmZzZXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHJldmlzaW9u
IDExMzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsNyArNDMzLDkgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZwogICAgICAgICBtX3N0YXRlLm5l
ZWRzRGlzcGxheVJlY3QudW5pdGUoZ3JhcGhpY3NMYXllci0+bmVlZHNEaXNwbGF5UmVjdCgpKTsK
ICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVyKCk7CiAK
LSAgICBtX3RyYW5zZm9ybS5zZXRQb3NpdGlvbihtX3N0YXRlLnBvcyk7CisgICAgbV93ZWJTY3Jv
bGxQb3NpdGlvbiA9IG1fcGVuZGluZ1dlYlNjcm9sbFBvc2l0aW9uOworCisgICAgbV90cmFuc2Zv
cm0uc2V0UG9zaXRpb24oZml4ZWRUb1ZpZXdwb3J0KCkgPyBhZGp1c3RlZFBvc2l0aW9uKCkgOiBt
X3N0YXRlLnBvcyk7CiAgICAgbV90cmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobV9zdGF0ZS5hbmNo
b3JQb2ludCk7CiAgICAgbV90cmFuc2Zvcm0uc2V0U2l6ZShtX3N0YXRlLnNpemUpOwogICAgIG1f
dHJhbnNmb3JtLnNldEZsYXR0ZW5pbmcoIW1fc3RhdGUucHJlc2VydmVzM0QpOwpAQCAtNTExLDUg
KzUxMywxOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5nCiAgICAg
fQogfQogCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c2V0Q3VycmVudFNjcm9sbFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIEFTU0VSVChmaXhlZFRvVmlld3Bv
cnQoKSk7CisgICAgbV9jdXJyZW50U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBtX3Ry
YW5zZm9ybS5zZXRQb3NpdGlvbihhZGp1c3RlZFBvc2l0aW9uKCkpOworfQorCitGbG9hdFBvaW50
IFRleHR1cmVNYXBwZXJMYXllcjo6YWRqdXN0ZWRQb3NpdGlvbigpCit7CisgICAgQVNTRVJUKGZp
eGVkVG9WaWV3cG9ydCgpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludChtX3N0YXRlLnBvcy54KCkg
KyBtX2N1cnJlbnRTY3JvbGxQb3NpdGlvbi54KCkgLSBtX3dlYlNjcm9sbFBvc2l0aW9uLngoKSwg
bV9zdGF0ZS5wb3MueSgpICsgbV9jdXJyZW50U2Nyb2xsUG9zaXRpb24ueSgpIC0gbV93ZWJTY3Jv
bGxQb3NpdGlvbi55KCkpOworfQorCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmgJKHJldmlzaW9uIDExMzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYg
KzEyNiwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZTsgfQogICAgIHZvaWQg
Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKKyAgICBib29sIGZpeGVkVG9WaWV3cG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZml4ZWRUb1ZpZXdwb3J0OyB9CisgICAgdm9pZCBz
ZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fc3RhdGUuZml4ZWRUb1ZpZXdwb3J0
ID0gaXNGaXhlZDsgfQorICAgIHZvaWQgc2V0V2ViU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24pIHsgbV9wZW5kaW5nV2ViU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsg
fQorICAgIHZvaWQgc2V0Q3VycmVudFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsK
KwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpOwogICAgIHZv
aWQgY29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKQEAgLTE2MSw2ICsxNjYsOCBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9zaXpl
KTsKICAgICB9CiAKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9zaXRpb24oKTsKKwogICAgIFZl
Y3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIqPiBtX2NoaWxkcmVuOwogICAgIFRleHR1cmVNYXBwZXJM
YXllciogbV9wYXJlbnQ7CiAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtX2VmZmVjdFRhcmdldDsK
QEAgLTE5Niw2ICsyMDMsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHZpc2libGUgOiAxOwog
ICAgICAgICBib29sIG5lZWRzRGlzcGxheTogMTsKICAgICAgICAgYm9vbCBtaWdodEhhdmVPdmVy
bGFwcyA6IDE7CisgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0IDogMTsKICAgICAgICAgYm9v
bCBuZWVkc1JlcGFpbnQ7CiAgICAgICAgIFN0YXRlKCkKICAgICAgICAgICAgIDogb3BhY2l0eSgx
LmYpCkBAIC0yMDksNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgdmlzaWJsZSh0
cnVlKQogICAgICAgICAgICAgLCBuZWVkc0Rpc3BsYXkodHJ1ZSkKICAgICAgICAgICAgICwgbWln
aHRIYXZlT3ZlcmxhcHMoZmFsc2UpCisgICAgICAgICAgICAsIGZpeGVkVG9WaWV3cG9ydChmYWxz
ZSkKICAgICAgICAgICAgICwgbmVlZHNSZXBhaW50KGZhbHNlKQogICAgICAgICB7CiAgICAgICAg
IH0KQEAgLTIxNyw2ICsyMjYsOSBAQCBwcml2YXRlOgogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAg
VGV4dHVyZU1hcHBlciogbV90ZXh0dXJlTWFwcGVyOwogICAgIFRleHR1cmVNYXBwZXJBbmltYXRp
b25zIG1fYW5pbWF0aW9uczsKKyAgICBGbG9hdFBvaW50IG1fcGVuZGluZ1dlYlNjcm9sbFBvc2l0
aW9uOworICAgIEZsb2F0UG9pbnQgbV93ZWJTY3JvbGxQb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50
IG1fY3VycmVudFNjcm9sbFBvc2l0aW9uOwogfTsKIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMTMxMDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw1NiBAQAorMjAxMi0wNC0wMyAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tp
YS5jb20+CisKKyAgICAgICAgSW5pdGlhbCBzdXBwb3J0IGZvciBmaXhlZCBwb3NpdGlvbiBlbGVt
ZW50cyBpbiBRdCBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MTc4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFR1cm4gb24gdGhlIGZsYWcgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkIHdoZW4gdXNpbmcgZml4ZWQgbGF5b3V0LgorICAgICAgICBQYXNzIHRo
ZSBhIGZsYWcgYW5kIHNjcm9sbCBvZmZzZXQgdG8gVGV4dHVyZU1hcHBlckxheWVyLCBzbyB0aGF0
IGl0IGNhbiBtYWtlIGFkanVzdG1lbnRzCisgICAgICAgIGluIHNjcm9sbCBwb3NpdGlvbiBkdXJp
bmcgc2Nyb2xsaW5nLgorCisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllckluZm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVySW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAg
ICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICog
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFBy
b3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0Ojpub3JtYWxpemVkU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENv
bnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1
c3RQb3NpdGlvbkZvckFsbEZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJM
YXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoV2ViTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpXZWJHcmFwaGljc0xheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmg6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAo
V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRSZXNpemVzVG9Db250ZW50c1VzaW5n
TGF5b3V0U2l6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhv
c3RRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGV0YWNoTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZp
ZXdwb3J0Rm9yU2VsZik6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9y
dEZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzeW5jRml4ZWRM
YXllcnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
aDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisKIDIwMTItMDQtMDMgIFphbGFuIEJ1anRh
cyAgPHpidWp0YXNAZ21haWwuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBSZW1vdmUgI2lmICFV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkgZnJvbSBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNp
dGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViTGF5ZXJUcmVlSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkxheWVyVHJlZUluZm8uY3BwCShyZXZpc2lvbiAxMTMxMDMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAgdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bQogICAgIC8vIFdl
IGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4v
T3V0IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCiAgICAgZW5jb2Rlci0+ZW5jb2Rl
KENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwg
bWFzaywgaW1hZ2VCYWNraW5nU3RvcmVJRCkpOwogICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBD
OjpJbihwb3MsIHNpemUsIHRyYW5zZm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVu
VHJhbnNmb3JtLCBjb250ZW50c1JlY3QsIGFuaW1hdGlvbnMpKTsKKyAgICBlbmNvZGVyLT5lbmNv
ZGUoQ29yZUlQQzo6SW4oc2Nyb2xsUG9zaXRpb24pKTsKIH0KIAogYm9vbCBXZWJMYXllckluZm86
OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkxheWVySW5mbyYg
aW5mbykKQEAgLTQ1LDYgKzQ2LDkgQEAgYm9vbCBXZWJMYXllckluZm86OmRlY29kZShDb3JlSVBD
OjpBcmd1bQogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLnBvcywg
aW5mby5zaXplLCBpbmZvLnRyYW5zZm9ybSwgaW5mby5vcGFjaXR5LCBpbmZvLmFuY2hvclBvaW50
LCBpbmZvLmNoaWxkcmVuVHJhbnNmb3JtLCBpbmZvLmNvbnRlbnRzUmVjdCwgaW5mby5hbmltYXRp
b25zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KENvcmVJUEM6Ok91dChpbmZvLnNjcm9sbFBvc2l0aW9uKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViTGF5ZXJUcmVlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJMYXllclRyZWVJbmZvLmgJKHJldmlzaW9uIDExMzEwMykKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw5ICsxMDgsMTEg
QEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgICAgICAgICBib29sIHByZXNlcnZlczNEIDog
MTsKICAgICAgICAgICAgIGJvb2wgY29udGVudE5lZWRzRGlzcGxheSA6IDE7CiAgICAgICAgICAg
ICBib29sIGlzUm9vdExheWVyOiAxOworICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQg
OiAxOwogICAgICAgICB9OwogICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgfTsKKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbjsKICAgICBWZWN0b3I8V2ViTGF5ZXJJ
RD4gY2hpbGRyZW47CiAgICAgVmVjdG9yPFdlYkxheWVyQW5pbWF0aW9uPiBhbmltYXRpb25zOwog
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdlQmFja2luZ1N0b3JlOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAJKHJldmlz
aW9uIDExMzEwMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDExIEBAIHZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpkZXN0cm95RGlyZWN0bHkKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJM
YXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXkpKTsK
IH0KIAordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9h
dFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX3JlbmRlcmVyLT5zZXRDb250ZW50c1NpemUo
Y29udGVudHNTaXplKTsKK30KKwogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVD
b250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7CiAgICAgbV9yZW5kZXJlci0+c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChyZWN0LCBzY2FsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCShyZXZpc2lvbiAxMTMxMDMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29u
c3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXApOwogICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4
dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKICAgICB2b2lkIHB1cmdl
R0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFq
ZWN0b3J5KTsKICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CiAgICAgdm9pZCBjcmVhdGVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5m
byYpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxMTMxMDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Mywx
NiBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjYWxsT25NYWluVHJlCiAgICAgICAgIE1h
aW5UaHJlYWRHdWFyZGVkSW52b2tlcjxXZWJMYXllclRyZWVSZW5kZXJlcj46OmNhbGwodGhpcywg
ZnVuY3Rpb24pOwogfQogCitzdGF0aWMgRmxvYXRQb2ludCBub3JtYWxpemVkU2Nyb2xsUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFJlY3QmIHZpc2li
bGVDb250ZW50UmVjdCwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSkKK3sKKyAgICBmbG9h
dCBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi54KCksIDAuMGYpOwor
ICAgIHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWCwgY29udGVudFNp
emUud2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdC53aWR0aCgpKTsKKworICAgIGZsb2F0IHNj
cm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLnkoKSwgMC4wZik7CisgICAg
c2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25ZLCBjb250ZW50U2l6ZS5o
ZWlnaHQoKSAtIHZpc2libGVDb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEZsb2F0
UG9pbnQoc2Nyb2xsUG9zaXRpb25YLCBzY3JvbGxQb3NpdGlvblkpOworfQorCiBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6V2ViTGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXll
clRyZWVIb3N0UHJveHkpCiAgICAgOiBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0
UHJveHkpCiAgICAgLCBtX3Jvb3RMYXllcklEKDApCkBAIC05Nyw2ICsxMDcsNyBAQCB2b2lkIFdl
YkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVuCiAgICAgICAgIG1fdGV4dHVyZU1hcHBl
ciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKICAg
ICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1h
cHBlcjo6T3BlbkdMTW9kZSk7CiAKKyAgICBhZGp1c3RQb3NpdGlvbkZvckFsbEZpeGVkTGF5ZXJz
KCk7CiAgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKICAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50
Um9vdExheWVyID0gcm9vdExheWVyKCk7CiAgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQpAQCAt
MTU1LDYgKzE2NiwxMSBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhp
CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoMCk7CiB9CiAKK3ZvaWQg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6
ZTsKK30KKwogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKIHsKICAgICBtX3Zpc2libGVDb250
ZW50c1JlY3QgPSByZWN0OwpAQCAtMTY3LDYgKzE4MywxNCBAQCB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjp1cGRhdGVWaWV3cG9yCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT51cGRh
dGVWaWV3cG9ydCgpOwogfQogCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3Np
dGlvbkZvckFsbEZpeGVkTGF5ZXJzKCkKK3sKKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9u
ID0gbm9ybWFsaXplZFNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlv
bigpLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKKyAgICBMYXllck1h
cDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExheWVyTWFw
OjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+c2Vjb25kKS0+c2V0Q3VycmVudFNjcm9s
bFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKK30KKwogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5mbykKIHsK
ICAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOwpAQCAtMTg5LDYgKzIxMywxNSBAQCB2
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhCiAgICAgbGF5ZXItPnNldENv
bnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKICAgICBsYXllci0+c2V0RHJhd3ND
b250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwogCisgICAgVGV4dHVyZU1hcHBlckxheWVy
KiB0ZXh0dXJlTWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllcik7CisgICAg
dGV4dHVyZU1hcHBlckxheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9W
aWV3cG9ydCk7CisgICAgdGV4dHVyZU1hcHBlckxheWVyLT5zZXRXZWJTY3JvbGxQb3NpdGlvbihu
b3JtYWxpemVkU2Nyb2xsUG9zaXRpb24obGF5ZXJJbmZvLnNjcm9sbFBvc2l0aW9uLCBtX3Zpc2li
bGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKSk7CisKKyAgICBpZiAodGV4dHVyZU1hcHBl
ckxheWVyLT5maXhlZFRvVmlld3BvcnQoKSkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQobGF5
ZXJJbmZvLmlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92
ZShsYXllckluZm8uaWQpOworCiAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7CiAKICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxh
eWVyIGNsaXAuCkBAIC0yMzksNiArMjcyLDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
ZGVsZXRlTGF5ZXIoVwogCiAgICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICBtX2xh
eWVycy5yZW1vdmUobGF5ZXJJRCk7CisgICAgbV9maXhlZExheWVycy5yZW1vdmUobGF5ZXJJRCk7
CiAgICAgZGVsZXRlIGxheWVyOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAkocmV2aXNpb24gMTEzMTAzKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tp
bmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwogICAgIHZvaWQgc3luY1JlbW90ZUNv
bnRlbnQoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYsIGZsb2F0IHNjYWxlKTsKIAogICAgIHZvaWQgZGV0YWNoKCk7CkBAIC04MCw4ICs4MSwx
MCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9p
ZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQogICAgIHZvaWQgY2FsbE9uTWFpblRyZWFkKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRM
YXllcnMoKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNT
aXplOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwogICAgIGZs
b2F0IG1fY29udGVudHNTY2FsZTsKIApAQCAtMTEwLDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CiAKICAgICBMYXllck1hcCBtX2xh
eWVyczsKKyAgICBMYXllck1hcCBtX2ZpeGVkTGF5ZXJzOwogICAgIFdlYkxheWVySUQgbV9yb290
TGF5ZXJJRDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAkocmV2aXNpb24gMTEzMTAzKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM5LDYgKzEzOSw5IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQog
ICAgIFFTaXplRiBzY2FsZWRTaXplID0gY29udGVudHNTaXplICogY29udGVudHNTY2FsZTsKICAg
ICBxLT5zZXRTaXplKHNjYWxlZFNpemUpOwogICAgIHZpZXdwb3J0SXRlbS0+dXBkYXRlQ29udGVu
dHNTaXplKHNjYWxlZFNpemUpOworICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0g
d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOworICAgIGlmIChkcmF3aW5nQXJlYSAmJiBkcmF3
aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5sYXll
clRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShjb250
ZW50c1NpemUud2lkdGgoKSwgY29udGVudHNTaXplLmhlaWdodCgpKSk7CiB9CiAKIFFRdWlja1dl
YlBhZ2VQcml2YXRlOjp+UVF1aWNrV2ViUGFnZVByaXZhdGUoKQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAxMTMxMDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw2ICs4NSw3IEBAIFdlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGgK
ICAgICAsIG1fY29udGVudE5lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1faGFzUGVuZGluZ0Fu
aW1hdGlvbnMoZmFsc2UpCiAgICAgLCBtX2luVXBkYXRlTW9kZShmYWxzZSkKKyAgICAsIG1fZml4
ZWRUb1ZpZXdwb3J0KGZhbHNlKQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICwg
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KDApCiAgICAgLCBtX2NvbnRlbnRzU2NhbGUoMS5mKQpA
QCAtMTc4LDYgKzE3OSw4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29u
c3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7
CisgICAgaWYgKG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCkKKyAgICAgICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpLmxv
Y2F0aW9uKCk7CiAgICAgbm90aWZ5Q2hhbmdlUmVjdXJzaXZlbHkoKTsKIH0KIApAQCAtNDE2LDYg
KzQxOSw4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICBp
ZiAoV2ViR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXllcihyZXBsaWNh
TGF5ZXIoKSkpCiAgICAgICAgIHJlcGxpY2EtPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwogCisgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jRml4ZWRMYXll
cnMoKTsKKwogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQpAQCAtNDU0
LDYgKzQ1OSw4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAg
ICAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgICAgIG1fY29u
dGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5j
bGVhcigpOworICAgICAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmll
d3BvcnQoKTsKKyAgICAgICAgbV9sYXllckluZm8uc2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbFBv
c2l0aW9uOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXpl
KCk7ICsraSkKICAgICAgICAgICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuLmFwcGVuZCh0b1dlYkxh
eWVySUQoY2hpbGRyZW4oKVtpXSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHJldmlz
aW9uIDExMzEwMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcihjb25z
dCBXZWJMYXllckluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVy
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNG
aXhlZExheWVycygpID0gMDsKIH07CiB9CiAKQEAgLTExMyw2ICsxMTQsOSBAQCBwdWJsaWM6CiAg
ICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIHZvaWQgbm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUpOwogCisgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQo
KSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQorICAgIHZvaWQgc2V0Rml4ZWRU
b1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0K
KwogICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX21hc2tU
YXJnZXQ7IH0KICAgICB2b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhpY3NMYXllciogbGF5ZXIpIHsg
bV9tYXNrVGFyZ2V0ID0gbGF5ZXI7IH0KIApAQCAtMTUyLDEyICsxNTYsMTUgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheSA6IDE7CiAgICAgYm9vbCBtX2hhc1BlbmRp
bmdBbmltYXRpb25zIDogMTsKICAgICBib29sIG1faW5VcGRhdGVNb2RlIDogMjsKKyAgICBib29s
IG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKIAogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CiAgICAg
dm9pZCBub3RpZnlDaGFuZ2VSZWN1cnNpdmVseSgpOwogICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0
b3JlKCk7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fdHJhbnNmb3JtQW5pbWF0aW9uczsKIAorICAg
IEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisKICAgICBib29sIHNlbGZPckFuY2VzdG9ySGFz
QWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9ucygpIGNvbnN0OwogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCShyZXZpc2lvbiAxMTMxMDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMSw2ICs4MzEsOCBAQCB2
b2lkIFdlYlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMCiAgICAgLy8gQWx3YXlzIHJl
c2V0IGV2ZW4gd2hlbiBlbXB0eS4KICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUodGFyZ2V0
TGF5b3V0U2l6ZSk7CiAKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCh0cnVlKTsKKwogICAgIC8vIFNjaGVkdWxl
IGEgbGF5b3V0IHRvIHVzZSB0aGUgbmV3IHRhcmdldCBzaXplLgogICAgIGlmICghdmlldy0+bGF5
b3V0UGVuZGluZygpKSB7CiAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0KCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmNwcAkocmV2aXNpb24gMTEzMTAzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5n
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjUyLDYgKzI1Niw1NCBAQCB2b2lkIExheWVy
VHJlZUhvc3RRdDo6ZGV0YWNoTGF5ZXIoV2ViR3JhCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlk
KCkpKTsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihS
ZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0
IG1hdGNoIHRoZSBjb25kaXNpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXND
b21wb3NpdGluZ0ZvclBvc2l0aW9uLgorICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9
IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+
c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJl
bmRlckxheWVyLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+
aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXIt
PmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhp
Y3NMYXllcigpKTsKKyAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JT
ZWxmKHJlbmRlckxheWVyKTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQor
ICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAg
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGlu
ZygpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycygpCit7Cisg
ICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV93ZWJQYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVjdHMoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1l
KCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RSZW5kZXJMYXllcigpOwor
ICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOworICAgIGlmIChyb290UmVuZGVyTGF5ZXItPmZp
cnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9v
dFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RRdDo6
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJl
ZUhvc3RRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuaAkocmV2aXNpb24gMTEzMTAzKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKTsKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVh
bCB2b2lkIHN5bmNGaXhlZExheWVycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5
ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsK
</data>
<flag name="review"
          id="139987"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135747</attachid>
            <date>2012-04-04 19:30:23 -0700</date>
            <delta_ts>2012-04-05 20:13:24 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>26658</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMzE3
NikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA0
LTA0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0
cy9maXhlZC1wb3NpdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0wMyAgVG9ueSBDaGFuZyAg
PHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHJlbW92ZSBXZWJLaXQgZmlsZXMgZnJvbSAu
Z2l0YXR0cmlidXRlcwpJbmRleDogTWFudWFsVGVzdHMvZml4ZWQtcG9zaXRpb24uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCShyZXZpc2lvbiAwKQor
KysgTWFudWFsVGVzdHMvZml4ZWQtcG9zaXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3OCBAQAorPGh0bWw+PGhlYWQ+CisKKzxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNl
dD13aW5kb3dzLTEyNTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSI+Cis8c3R5bGU+CisuZDF7
cG9zaXRpb246Zml4ZWQ7dG9wOjUwJTtyaWdodDo1MCU7ei1pbmRleDoyO292ZXJmbG93OmhpZGRl
bjt9CisuZDJ7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjVlbTtsZWZ0OjUwO3otaW5kZXg6MjtvdmVy
ZmxvdzpoaWRkZW47fQorLm8ge2JhY2tncm91bmQ6Z3JlZW47aGVpZ2h0OjQwcHg7d2lkdGg6MjAw
cHg7fQorLnQgeyB3aWR0aDoyMDAwcHg7IGhlaWdodDoxOThweDtiYWNrZ3JvdW5kLWNvbG9yOiBs
aWdodGdyYXk7IGJvcmRlcjogMXB4IHNvbGlkIGJsdWU7fQorYm9keSB7IG1hcmdpbjogMHB4OyB9
Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IkdyYWRpZW50Ij4KKzxkaXYgY2xhc3M9
ImQxIj48ZGl2IGNsYXNzPSJvIj5UaGlzIGlzIGEgdGVzdDwvZGl2PjwvZGl2PgorPGRpdiBjbGFz
cz0iZDIiPjxkaXYgY2xhc3M9Im8iPlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9kaXY+Cis8ZGl2IGNs
YXNzPSJ0Ij4KKzAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzIwMAorPC9kaXY+Cis8ZGl2
IGNsYXNzPSJ0Ij4KKzQwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzYwMAorPC9kaXY+Cis8
ZGl2IGNsYXNzPSJ0Ij4KKzgwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEwMDAKKzwvZGl2
PgorPGRpdiBjbGFzcz0idCI+CisxMjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTQwMAor
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzE2MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cisx
ODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0
Ij4KKzIyMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyNDAwCis8L2Rpdj4KKzxkaXYgY2xh
c3M9InQiPgorMjYwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzI4MDAKKzwvZGl2PgorPGRp
diBjbGFzcz0idCI+CiszMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzIwMAorPC9kaXY+
Cis8ZGl2IGNsYXNzPSJ0Ij4KKzM0MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszNjAwCis8
L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzgwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzQw
MDAKKzwvZGl2PgorPC9ib2R5PjwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI3IEBACisyMDEyLTA0LTA0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4K
KworICAgICAgICBJbml0aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGlu
IFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2hlbiB0aGUgc2V0dGluZyBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQgaXMgdHJ1ZSwgd2UgdXBkYXRlCisgICAgICAgIHRoZSBwb3NpdGlvbiBvZiBmaXhl
ZCBsYXllcnMsIGFuZCBzZW5kIHVwZGF0ZXMgdG8gdGhlIFVJIHByb2Nlc3MgYXMgd2Ugc2Nyb2xs
LgorICAgICAgICBCZWZvcmUgcGFpbnRpbmcsIFRleHR1cmVNYXBwZXJMYXllciByZWNlaXZlcyBh
IGRlbHRhIG9mIHRoZSBzY3JvbGwgcG9zaXRpb25zIGJldHdlZW4gdGhlIFVJIAorICAgICAgICBh
bmQgdGhlIHdlYiBwcm9jZXNzZXMsIGFuZCBhZGp1c3RzIGl0cyB0cmFuc2Zvcm0gcG9zaXRpb24g
YWNjb3JkaW5nbHkuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRpb25EZWx0YSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXI6OmZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXI6OnNldEZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyTGF5ZXIpOgor
ICAgICAgICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpT
dGF0ZTo6U3RhdGUpOgorCiAyMDEyLTA0LTA0ICBOb2VsIEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdt
YWlsLmNvbT4KIAogICAgICAgICBbRmlsZVN5c3RlbV0gRm9yd2FyZCBkZWNsYXJlIEZpbGUgaW4g
RmlsZUNhbGxiYWNrLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9u
IDExMzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTcwMSw4ICsxNzAxLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGaXhlZFZpc2li
bGVDb250ZW50UmUKIHsKICAgICBJbnRTaXplIG9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwogICAg
IFNjcm9sbFZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGVDb250ZW50UmVj
dCk7Ci0gICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICBpZiAob2Zmc2V0ICE9
IHNjcm9sbE9mZnNldCgpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdz
KCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQorICAg
ICAgICAgICAgdXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CiAgICAgICAgIHNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCgpOworICAgIH0KICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckxheWVyLmNwcAkocmV2aXNpb24gMTEzMTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxMSw1ICs1MTEsMTIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3Np
dGluZwogICAgIH0KIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0
aW9uRGVsdGEoY29uc3QgSW50UG9pbnQmIGRlbHRhKQoreworICAgIEFTU0VSVChmaXhlZFRvVmll
d3BvcnQoKSk7CisgICAgbV9zY3JvbGxQb3NpdGlvbkRlbHRhID0gZGVsdGE7CisgICAgbV90cmFu
c2Zvcm0uc2V0UG9zaXRpb24obV9zdGF0ZS5wb3MgKyBtX3Njcm9sbFBvc2l0aW9uRGVsdGEpOwor
fQorCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgJKHJldmlzaW9uIDEx
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiwxMCBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUo
KSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZTsgfQogICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVz
UmVjdXJzaXZlKCk7CiAKKyAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuZml4ZWRUb1ZpZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQo
Ym9vbCBpc0ZpeGVkKSB7IG1fc3RhdGUuZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQorICAg
IHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25EZWx0YShjb25zdCBJbnRQb2ludCYpOworCiBwcml2YXRl
OgogICAgIFRleHR1cmVNYXBwZXJMYXllciogcm9vdExheWVyKCk7CiAgICAgdm9pZCBjb21wdXRl
VHJhbnNmb3Jtc1JlY3Vyc2l2ZSgpOwpAQCAtMTk2LDYgKzIwMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGJvb2wgdmlzaWJsZSA6IDE7CiAgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OiAxOwogICAg
ICAgICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBzIDogMTsKKyAgICAgICAgYm9vbCBmaXhlZFRvVmll
d3BvcnQgOiAxOwogICAgICAgICBib29sIG5lZWRzUmVwYWludDsKICAgICAgICAgU3RhdGUoKQog
ICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKQEAgLTIwOSw2ICsyMTQsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLCB2aXNpYmxlKHRydWUpCiAgICAgICAgICAgICAsIG5lZWRzRGlzcGxheSh0
cnVlKQogICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVybGFwcyhmYWxzZSkKKyAgICAgICAgICAg
ICwgZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogICAgICAgICAgICAgLCBuZWVkc1JlcGFpbnQoZmFs
c2UpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMjE3LDYgKzIyMyw3IEBAIHByaXZhdGU6CiAg
ICAgU3RhdGUgbV9zdGF0ZTsKICAgICBUZXh0dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXI7CiAg
ICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOworICAgIEludFBvaW50IG1f
c2Nyb2xsUG9zaXRpb25EZWx0YTsKIH07CiAKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTEz
MTc2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNjEgQEAKKzIwMTItMDQtMDQgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29t
PgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMg
aW4gUXQgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODE3ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUdXJuIG9uIHRoZSBmbGFnIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCB3aGVuIHVzaW5nIGZpeGVkIGxheW91dC4KKyAgICAgICAgQXMgd2Ugc2Nyb2xs
LCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBkZWx0YSBpbiBzY3JvbGwgcG9zaXRpb24gYmV0d2VlbiB0
aGUgVUkgYW5kIHdlYiBwcm9jZXNzZXMsCisgICAgICAgIGFuZCBhZGp1c3QgdGhlIHBvc2l0aW9u
IG9mIGFsbCB0aGUgZml4ZWQgbGF5ZXJzIGJ5IHRoYXQgZGVsdGEuCisgICAgICAgIFdoZW4gV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIgcmVjZWl2ZXMgYSBuZXcgc2Nyb2xsIHBvc2l0aW9uIGZyb20gdGhl
IHdlYiBwcm9jZXNzLCBpdCBrZWVwcyBpdCBhcyBwZW5kaW5nLAorICAgICAgICBhbmQgY29tbWl0
IHRoZSBuZXcgc2Nyb2xsIHBvc2l0aW9uIGluIGZsdXNoTGF5ZXJDaGFuZ2VzLgorCisgICAgICAg
ICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0
ZVNpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnNldENvbnRlbnRzU2l6ZSk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnJlbmRl
ck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6ZGlkVXBk
YXRlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJv
eHkuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpub3JtYWxpemVkU2Nyb2xs
UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckFsbEZpeGVkTGF5ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRpZFVwZGF0ZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXll
clBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVs
ZXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hM
YXllckNoYW5nZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5o
OgorICAgICAgICAoV2ViTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjpXZWJHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmg6
CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OmZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViR3JhcGhpY3NM
YXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRSZXNpemVzVG9Db250ZW50c1VzaW5nTGF5b3V0U2l6ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZik6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmll
d3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c3luY0Zp
eGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxl
Q29udGVudHNSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVl
SG9zdFF0Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UXQpOgorCiAyMDEyLTA0LTA0ICBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBb
UXRdIEZ1cnRoZXIgaW1wcm92ZW1lbnRzIG9mIHRoZSB0YXAgZ2VzdHVyZSByZWNvZ25pemVyCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHJldmlzaW9uIDEx
MzE3NikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICAg
ICAgICAgIGJvb2wgcHJlc2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVl
ZHNEaXNwbGF5IDogMTsKICAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAgICAg
ICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2ln
bmVkIGludCBmbGFnczsKICAgICB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUhvc3RQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAJKHJldmlzaW9uIDExMzE3NikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsNiArMTIwLDExIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95RGlyZWN0
bHkKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJv
eUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXkpKTsKIH0KIAordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sK
KyAgICBtX3JlbmRlcmVyLT5zZXRDb250ZW50c1NpemUoY29udGVudHNTaXplKTsKK30KKwogdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
CiB7CiAgICAgbV9yZW5kZXJlci0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCBzY2FsZSk7
CkBAIC0xMzEsNiArMTM2LDExIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJOZXh0
RnJhbWUKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRp
ZFVwZGF0ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBt
X3JlbmRlcmVyLT5kaWRVcGRhdGVTY3JvbGxQb3NpdGlvbihwb3NpdGlvbik7Cit9CisKIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewogICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaAkocmV2aXNpb24gMTEzMTc2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUhvc3RQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBjbGlwKTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7Cisg
ICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAg
dm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9h
dCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeSk7CiAgICAgdm9p
ZCBkaWRSZW5kZXJGcmFtZSgpOwogICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKQEAgLTY0LDYgKzY1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZvaWQgcmVu
ZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBkaWRVcGRhdGVTY3JvbGxQb3NpdGlvbihjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOwogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVz
KCk7CiAgICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDExMzE3NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJv
eHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI4LDUgKzI4LDYgQEAgbWVzc2FnZXMg
LT4gTGF5ZXJUcmVlSG9zdFByb3h5IHsKICAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCiAg
ICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQogICAgIERpZFJl
bmRlckZyYW1lKCkKKyAgICBEaWRVcGRhdGVTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2lu
dCBwb3NpdGlvbikKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxMTMxNzYpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3MywxNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjYWxsT25N
YWluVHJlCiAgICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxXZWJMYXllclRyZWVSZW5k
ZXJlcj46OmNhbGwodGhpcywgZnVuY3Rpb24pOwogfQogCitzdGF0aWMgSW50UG9pbnQgbm9ybWFs
aXplZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXpl
KQoreworICAgIEludFNpemUgc2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnRTaXplLndpZHRo
KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnRTaXplLmhlaWdodCgpKSk7CisgICAgaW50IHNj
cm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLngoKSwgMCk7CisgICAgc2Ny
b2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25YLCBzaXplLndpZHRoKCkgLSB2
aXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSk7CisKKyAgICBpbnQgc2Nyb2xsUG9zaXRpb25ZID0g
c3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKKyAgICBzY3JvbGxQb3NpdGlvblkgPSBz
dGQ6Om1pbihzY3JvbGxQb3NpdGlvblksIHNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJl
Y3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRQb2ludChzY3JvbGxQb3NpdGlvblgsIHNjcm9s
bFBvc2l0aW9uWSk7Cit9CisKIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpXZWJMYXllclRyZWVSZW5k
ZXJlcihMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkKICAgICA6IG1fbGF5
ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKICAgICAsIG1fcm9vdExheWVySUQo
MCkKQEAgLTk3LDYgKzEwOCw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9D
dXJyZW4KICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRl
eHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwogICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFj
Y2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKIAorICAgIGFk
anVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKTsKICAgICBzeW5jUmVtb3RlQ29udGVudCgp
OwogICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKICAg
ICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCkBAIC0xNTUsNiArMTY3LDExIEBAIHZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGkKICAgICBtX3RleHR1cmVNYXBwZXItPnNldEdy
YXBoaWNzQ29udGV4dCgwKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAg
IG1fY29udGVudHNTaXplID0gY29udGVudHNTaXplOworfQorCiB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0
IHNjYWxlKQogewogICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CkBAIC0xNjcsNiAr
MTg0LDE5IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3IKICAgICAg
ICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKK3ZvaWQgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yQWxsRml4ZWRMYXllcnMoKQorewor
ICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gbm9ybWFsaXplZFNjcm9sbFBvc2l0aW9uKG1f
dmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1f
Y29udGVudHNTaXplKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVy
cy5lbmQoKTsKKyAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihp
dC0+c2Vjb25kKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YShJbnRQb2ludChzY3JvbGxQb3NpdGlv
bi54KCkgLSBtX3dlYlNjcm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9zaXRpb24ueSgpIC0gbV93
ZWJTY3JvbGxQb3NpdGlvbi55KCkpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
ZGlkVXBkYXRlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAg
IG1fcGVuZGluZ1dlYlNjcm9sbFBvc2l0aW9uID0gbm9ybWFsaXplZFNjcm9sbFBvc2l0aW9uKHBv
c2l0aW9uLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKK30KKwogdm9p
ZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXll
ckluZm8mIGxheWVySW5mbykKIHsKICAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOwpA
QCAtMTg5LDYgKzIxOSwxNCBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQ
YXJhCiAgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsK
ICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwogCisg
ICAgVGV4dHVyZU1hcHBlckxheWVyKiB0ZXh0dXJlTWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBw
ZXJMYXllcihsYXllcik7CisgICAgdGV4dHVyZU1hcHBlckxheWVyLT5zZXRGaXhlZFRvVmlld3Bv
cnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7CisKKyAgICBpZiAodGV4dHVyZU1hcHBlckxh
eWVyLT5maXhlZFRvVmlld3BvcnQoKSkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQobGF5ZXJJ
bmZvLmlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShs
YXllckluZm8uaWQpOworCiAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8u
aW1hZ2VCYWNraW5nU3RvcmVJRCk7CiAKICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVy
IGNsaXAuCkBAIC0yMzksNiArMjc3LDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVs
ZXRlTGF5ZXIoVwogCiAgICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICBtX2xheWVy
cy5yZW1vdmUobGF5ZXJJRCk7CisgICAgbV9maXhlZExheWVycy5yZW1vdmUobGF5ZXJJRCk7CiAg
ICAgZGVsZXRlIGxheWVyOwogfQogCkBAIC0zMzcsNiArMzc2LDggQEAgdm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6Y29tbWl0VGlsZU9wZQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpm
bHVzaExheWVyQ2hhbmdlcygpCiB7CisgICAgbV93ZWJTY3JvbGxQb3NpdGlvbiA9IG1fcGVuZGlu
Z1dlYlNjcm9sbFBvc2l0aW9uOworCiAgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlKEZsb2F0UmVjdCgpKTsKICAgICBjb21taXRUaWxlT3BlcmF0aW9ucygpOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAkocmV2
aXNpb24gMTEzMTc2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJl
bmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDkgQEAgcHVibGljOgogICAgIHZv
aWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBwYWlu
dFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQp
OwogICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIGRp
ZFVwZGF0ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbik7
CiAKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mKTsKQEAgLTgwLDggKzgyLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CiAg
ICAgdm9pZCBjYWxsT25NYWluVHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZv
aWQgYWRqdXN0UG9zaXRpb25Gb3JBbGxGaXhlZExheWVycygpOwogCiAgICAgdHlwZWRlZiBIYXNo
TWFwPFdlYkxheWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBt
X3Zpc2libGVDb250ZW50c1JlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCkBAIC0x
MTAsNyArMTE0LDEwIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJz
VG9EZWxldGU7CiAKICAgICBMYXllck1hcCBtX2xheWVyczsKKyAgICBMYXllck1hcCBtX2ZpeGVk
TGF5ZXJzOwogICAgIFdlYkxheWVySUQgbV9yb290TGF5ZXJJRDsKKyAgICBXZWJDb3JlOjpJbnRQ
b2ludCBtX3dlYlNjcm9sbFBvc2l0aW9uOworICAgIFdlYkNvcmU6OkludFBvaW50IG1fcGVuZGlu
Z1dlYlNjcm9sbFBvc2l0aW9uOwogfTsKIAogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAkocmV2aXNpb24gMTEzMTc2KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw5IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6
OnVwZGF0ZVNpemUoKQogICAgIFFTaXplRiBzY2FsZWRTaXplID0gY29udGVudHNTaXplICogY29u
dGVudHNTY2FsZTsKICAgICBxLT5zZXRTaXplKHNjYWxlZFNpemUpOwogICAgIHZpZXdwb3J0SXRl
bS0+dXBkYXRlQ29udGVudHNTaXplKHNjYWxlZFNpemUpOworICAgIERyYXdpbmdBcmVhUHJveHkq
IGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOworICAgIGlmIChkcmF3
aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCisgICAgICAgIGRy
YXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKFdlYkNvcmU6
OkZsb2F0U2l6ZShjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVudHNTaXplLmhlaWdodCgpKSk7
CiB9CiAKIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp+UVF1aWNrV2ViUGFnZVByaXZhdGUoKQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAxMTMxNzYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIFdlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBo
aWNzTGF5ZXIoR3JhcGgKICAgICAsIG1fY29udGVudE5lZWRzRGlzcGxheShmYWxzZSkKICAgICAs
IG1faGFzUGVuZGluZ0FuaW1hdGlvbnMoZmFsc2UpCiAgICAgLCBtX2luVXBkYXRlTW9kZShmYWxz
ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogI2lmIFVTRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQogICAgICwgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KDApCiAgICAgLCBtX2NvbnRl
bnRzU2NhbGUoMS5mKQpAQCAtNDIyLDYgKzQyMyw4IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
c3luY0NvbXBvc2l0aW5nU3QKICAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRv
V2ViR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCiAgICAgICAgIHJlcGxpY2EtPnN5bmND
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCisgICAgbV93ZWJHcmFwaGljc0xh
eWVyQ2xpZW50LT5zeW5jRml4ZWRMYXllcnMoKTsKKwogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJl
bigpLnNpemUoKTsgKytpKQpAQCAtNDYwLDYgKzQ2Myw3IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICAgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJh
bnNmb3JtKCk7CiAgICAgICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgICAg
ICBtX2xheWVySW5mby5jaGlsZHJlbi5jbGVhcigpOworICAgICAgICBtX2xheWVySW5mby5maXhl
ZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBtX2xheWVySW5m
by5jaGlsZHJlbi5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiAxMTMxNzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9IDA7CiB9OwogfQogCkBAIC0x
MTMsNiArMTE0LDkgQEAgcHVibGljOgogICAgIEltYWdlKiBpbWFnZSgpIHsgcmV0dXJuIG1faW1h
Z2UuZ2V0KCk7IH0KICAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlKTsKIAor
ICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvVmlld3Bv
cnQ7IH0KKyAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQpIHsgbV9maXhl
ZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9CisKICAgICBHcmFwaGljc0xheWVyKiBtYXNrVGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRNYXNrVGFyZ2V0
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKSB7IG1fbWFza1RhcmdldCA9IGxheWVyOyB9CiAKQEAgLTE1
Myw2ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250ZW50TmVlZHNEaXNwbGF5IDog
MTsKICAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMgOiAxOwogICAgIGJvb2wgbV9pblVw
ZGF0ZU1vZGUgOiAyOworICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwogCiAgICAgdm9p
ZCBub3RpZnlDaGFuZ2UoKTsKICAgICB2b2lkIG5vdGlmeUNoYW5nZVJlY3Vyc2l2ZWx5KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiAxMTMxNzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMSw2ICs4MzEsOCBAQCB2b2lkIFdlYlBhZ2U6
OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMCiAgICAgLy8gQWx3YXlzIHJlc2V0IGV2ZW4gd2hl
biBlbXB0eS4KICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUodGFyZ2V0TGF5b3V0U2l6ZSk7
CiAKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uRW5hYmxlZCh0cnVlKTsKKwogICAgIC8vIFNjaGVkdWxlIGEgbGF5b3V0IHRv
IHVzZSB0aGUgbmV3IHRhcmdldCBzaXplLgogICAgIGlmICghdmlldy0+bGF5b3V0UGVuZGluZygp
KSB7CiAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cAkocmV2aXNpb24gMTEzMTc2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxNiBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQ
cm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgogI2luY2x1
ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tp
bmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Nyw2ICs3Miw3IEBAIExheWVyVHJlZUhv
c3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UKICAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
cyhmYWxzZSkKICAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX2NvbnRlbnRzU2Nh
bGUoMSkKKyAgICAsIG1fc2Nyb2xsUG9zaXRpb25PZkxhc3RVcGRhdGVXYXNTZW50KGZhbHNlKQog
I2VuZGlmCiAgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKICAgICAsIG1fc2hvdWxkU3lu
Y1Jvb3RMYXllcih0cnVlKQpAQCAtMjMyLDYgKzIzOCwxMCBAQCBib29sIExheWVyVHJlZUhvc3RR
dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRTeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKIHsKKyAgICBp
ZiAoIW1fc2Nyb2xsUG9zaXRpb25PZkxhc3RVcGRhdGVXYXNTZW50KSB7CisgICAgICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRVcGRhdGVTY3JvbGxQ
b3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSkpOworICAgICAgICBtX3Nj
cm9sbFBvc2l0aW9uT2ZMYXN0VXBkYXRlV2FzU2VudCA9IHRydWU7CisgICAgfQogICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUhvc3RQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpbmZvKSk7CiB9CkBAIC0y
NTIsNiArMjYyLDU0IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkZXRhY2hMYXllcihXZWJHcmEK
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRl
Q29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkpOwogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVP
ZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAg
ICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpc2lvbnMgaW4gUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCisgICAgUmVu
ZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBp
ZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzUG9zaXRp
b25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9
IEZpeGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXIt
PnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV2ViR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IHRvV2ViR3Jh
cGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNzTGF5ZXIt
PnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0
RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIHVw
ZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAgaWYgKHJl
bmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9y
dEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5kZXJMYXll
ci0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5
ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RR
dDo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhhc0ZpeGVkT2Jq
ZWN0cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxh
eWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0
b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7CisgICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7Cisg
ICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZz
ZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9
CisKIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiB7
CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC00NDUsNiArNTAzLDggQEAgdm9pZCBM
YXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50cwogICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOwogICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCiAgICAgICAgIG1fd2Vi
UGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7CisgICAgaWYgKGNvbnRlbnRz
UmVjdERpZENoYW5nZSkKKyAgICAgICAgbV9zY3JvbGxQb3NpdGlvbk9mTGFzdFVwZGF0ZVdhc1Nl
bnQgPSBmYWxzZTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbmRlck5leHRGcmFtZSgp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0
L0xheWVyVHJlZUhvc3RRdC5oCShyZXZpc2lvbiAxMTMxNzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc0LDYgKzc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRp
bmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lk
IGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0ZpeGVkTGF5ZXJzKCk7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBMYXllclRy
ZWVIb3N0UXQoV2ViUGFnZSopOwpAQCAtMTEyLDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzU3VzcGVuZGVkOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNS
ZWN0OwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyAgICBib29sIG1fc2Nyb2xsUG9zaXRp
b25PZkxhc3RVcGRhdGVXYXNTZW50OwogCiAgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJl
ZUNvbnRleHQ7CiAgICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsK
</data>
<flag name="review"
          id="140353"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135972</attachid>
            <date>2012-04-05 20:13:24 -0700</date>
            <delta_ts>2012-04-08 13:34:31 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>26146</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMzM5
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA0
LTA1ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0
cy9maXhlZC1wb3NpdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0wNSAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBwZXJmLW8tbWF0aWMgc2hvdWxkIGluY2x1
ZGUgdW5pdCBpbiBydW5zIEpTT04gcmVzcG9uc2VzCkluZGV4OiBNYW51YWxUZXN0cy9maXhlZC1w
b3NpdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0
bWwJKHJldmlzaW9uIDApCisrKyBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACis8aHRtbD48aGVhZD4KKworPG1ldGEgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBl
Ij4KKzxzdHlsZT4KKy5kMXtwb3NpdGlvbjpmaXhlZDt0b3A6NTAlO3JpZ2h0OjUwJTt6LWluZGV4
OjI7b3ZlcmZsb3c6aGlkZGVuO30KKy5kMntwb3NpdGlvbjpmaXhlZDtib3R0b206NWVtO2xlZnQ6
NTA7ei1pbmRleDoyO292ZXJmbG93OmhpZGRlbjt9CisubyB7YmFja2dyb3VuZDpncmVlbjtoZWln
aHQ6NDBweDt3aWR0aDoyMDBweDt9CisudCB7IHdpZHRoOjIwMDBweDsgaGVpZ2h0OjE5OHB4O2Jh
Y2tncm91bmQtY29sb3I6IGxpZ2h0Z3JheTsgYm9yZGVyOiAxcHggc29saWQgYmx1ZTt9Citib2R5
IHsgbWFyZ2luOiAwcHg7IH0KKzwvc3R5bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gcmVtb3ZlX2Zp
eGVkKCkKK3sKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImQxIikuc3R5bGUucG9zaXRpb24g
PSAic3RhdGljIjsKK30KKworZnVuY3Rpb24gY2hhbmdlX2ZpeGVkKCkKK3sKKyAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImQyIikuc3R5bGUuYm90dG9tID0gIjEwZW0iOworfQorCis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJHcmFkaWVudCI+Cis8ZGl2IGNsYXNzPSJkMSIgaWQ9
ImQxIj48ZGl2IGNsYXNzPSJvIj5UaGlzIGlzIGEgdGVzdDwvZGl2PjwvZGl2PgorPGRpdiBjbGFz
cz0iZDIiIGlkPSJkMiI+PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48L2Rpdj4K
KzxkaXYgY2xhc3M9InQiIG9uY2xpY2s9InJlbW92ZV9maXhlZCgpOyI+CiswMDAKKzwvZGl2Pgor
PGRpdiBjbGFzcz0idCI+CisyMDA8YnI+Cis8YnV0dG9uIG9uY2xpY2s9InJlbW92ZV9maXhlZCgp
OyI+cmVtb3ZlIGZpeGVkPC9idXR0b24+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorNDAwPGJy
PgorPGJ1dHRvbiBvbmNsaWNrPSJjaGFuZ2VfZml4ZWQoKTsiPmNoYW5nZSBmaXhlZDwvYnV0dG9u
PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzYwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4K
KzgwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEwMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0i
dCI+CisxMjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTQwMAorPC9kaXY+Cis8ZGl2IGNs
YXNzPSJ0Ij4KKzE2MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisxODAwCis8L2Rpdj4KKzxk
aXYgY2xhc3M9InQiPgorMjAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzIyMDAKKzwvZGl2
PgorPGRpdiBjbGFzcz0idCI+CisyNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjYwMAor
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzI4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cisz
MDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0
Ij4KKzM0MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszNjAwCis8L2Rpdj4KKzxkaXYgY2xh
c3M9InQiPgorMzgwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzQwMDAKKzwvZGl2PgorPC9i
b2R5PjwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzM5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA0
LTA1ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiB0aGUgc2V0
dGluZyBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgaXMgdHJ1
ZSwgd2UgdXBkYXRlCisgICAgICAgIHRoZSBwb3NpdGlvbiBvZiBmaXhlZCBsYXllcnMsIGFuZCBz
ZW5kIHVwZGF0ZXMgdG8gdGhlIFVJIHByb2Nlc3MgYXMgd2Ugc2Nyb2xsLgorICAgICAgICBCZWZv
cmUgcGFpbnRpbmcsIFRleHR1cmVNYXBwZXJMYXllciByZWNlaXZlcyBhIGRlbHRhIG9mIHRoZSBz
Y3JvbGwgcG9zaXRpb25zIGJldHdlZW4gdGhlIFVJIAorICAgICAgICBhbmQgdGhlIHdlYiBwcm9j
ZXNzZXMsIGFuZCBhZGp1c3RzIGl0cyB0cmFuc2Zvcm0gcG9zaXRpb24gYWNjb3JkaW5nbHkuCisK
KyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRpb25EZWx0YSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyTGF5ZXIpOgorCiAyMDEyLTA0LTA1ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBTdXBw
b3J0IHN0cmluZy5sZW5ndGggaW4ga2V5UGF0aHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAJKHJldmlzaW9uIDExMzM5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwMiw4ICsxNzAyLDExIEBAIHZvaWQgRnJhbWVWaWV3
OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmUKIHsKICAgICBJbnRTaXplIG9mZnNldCA9IHNjcm9s
bE9mZnNldCgpOwogICAgIFNjcm9sbFZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHZp
c2libGVDb250ZW50UmVjdCk7Ci0gICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAg
ICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lLT5w
YWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9u
RW5hYmxlZCgpKQorICAgICAgICAgICAgdXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5n
KCk7CiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOworICAgIH0KICAgICBmcmFtZSgp
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAkocmV2aXNpb24gMTEzMzk4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMSw1ICs1MTEsMTEgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OnN5bmNDb21wb3NpdGluZwogICAgIH0KIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6
OnNldFNjcm9sbFBvc2l0aW9uRGVsdGEoY29uc3QgSW50UG9pbnQmIGRlbHRhKQoreworICAgIG1f
c2Nyb2xsUG9zaXRpb25EZWx0YSA9IGRlbHRhOworICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9u
KG1fc3RhdGUucG9zICsgbV9zY3JvbGxQb3NpdGlvbkRlbHRhKTsKK30KKwogfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCShyZXZpc2lvbiAxMTMzOTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2JhY2tp
bmdTdG9yZTsgfQogICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKKyAg
ICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uRGVsdGEoY29uc3QgSW50UG9pbnQmKTsKKwogcHJpdmF0
ZToKICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpOwogICAgIHZvaWQgY29tcHV0
ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKQEAgLTIxNyw2ICsyMTksNyBAQCBwcml2YXRlOgogICAg
IFN0YXRlIG1fc3RhdGU7CiAgICAgVGV4dHVyZU1hcHBlciogbV90ZXh0dXJlTWFwcGVyOwogICAg
IFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKKyAgICBJbnRQb2ludCBtX3Nj
cm9sbFBvc2l0aW9uRGVsdGE7CiB9OwogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzM5
OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDYxIEBACisyMDEyLTA0LTA1ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4K
KworICAgICAgICBJbml0aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGlu
IFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVHVybiBvbiB0aGUgZmxhZyBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQgd2hlbiB1c2luZyBmaXhlZCBsYXlvdXQuCisgICAgICAgIEFzIHdlIHNjcm9sbCwg
d2Uga2VlcCB0cmFjayBvZiB0aGUgZGVsdGEgaW4gc2Nyb2xsIHBvc2l0aW9uIGJldHdlZW4gdGhl
IFVJIGFuZCB3ZWIgcHJvY2Vzc2VzLAorICAgICAgICBhbmQgYWRqdXN0IHRoZSBwb3NpdGlvbiBv
ZiBhbGwgdGhlIGZpeGVkIGxheWVycyBieSB0aGF0IGRlbHRhLgorICAgICAgICBXaGVuIFdlYkxh
eWVyVHJlZVJlbmRlcmVyIHJlY2VpdmVzIGEgbmV3IHNjcm9sbCBwb3NpdGlvbiBmcm9tIHRoZSB3
ZWIgcHJvY2VzcywgaXQga2VlcHMgaXQgYXMgcGVuZGluZywKKyAgICAgICAgYW5kIGNvbW1pdCB0
aGUgbmV3IHNjcm9sbCBwb3NpdGlvbiBpbiBmbHVzaExheWVyQ2hhbmdlcy4KKworICAgICAgICAq
IFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVT
aXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJO
ZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmRpZFVwZGF0
ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5
Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxh
eWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bm9ybWFsaXplZFNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpkaWRVcGRhdGVTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJD
aGFuZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAg
ICAgICAgKFdlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oOgorICAg
ICAgICAoV2ViR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpmaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6c2V0UmVzaXplc1RvQ29udGVudHNVc2luZ0xheW91dFNpemUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVGb3JMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0
Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExh
eWVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRl
bnRzUmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFF0KToKKwogMjAxMi0wNC0wNSAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIHdoZW4gc3dpdGNo
aW5nIHRvIGEgdGFiIHdpdGggcGx1Zy1pbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJMYXllclRyZWVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaAkocmV2aXNpb24gMTEzMzk4KQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw3IEBA
IHN0cnVjdCBXZWJMYXllckluZm8gewogICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7
CiAgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOwogICAgICAgICAgICAg
Ym9vbCBpc1Jvb3RMYXllcjogMTsKKyAgICAgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0IDog
MTsKICAgICAgICAgfTsKICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgIH07CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAko
cmV2aXNpb24gMTEzMzk4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhv
c3RQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTEgQEAgdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmRlc3Ryb3lEaXJlY3RseQogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtl
eSkpOwogfQogCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fcmVuZGVyZXItPnNldENvbnRlbnRz
U2l6ZShjb250ZW50c1NpemUpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3Qg
RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICBtX3JlbmRlcmVyLT5zZXRWaXNp
YmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlKTsKQEAgLTEzMSw2ICsxMzYsMTEgQEAgdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZQogICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRl
ck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwogfQog
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkVXBkYXRlU2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpkaWRVcGRhdGVTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwg
cG9zaXRpb24pKTsKK30KKwogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlQmFja2luZ1N0
b3JlcygpCiB7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCShyZXZpc2lvbiAxMTMzOTgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXApOwogICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNz
Q29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKICAgICB2b2lk
IHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiB0cmFqZWN0b3J5KTsKICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CiAgICAgdm9pZCBjcmVh
dGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBk
YXRlSW5mbyYpOwpAQCAtNjQsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZWNlaXZl
TGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICAgICB2b2lkIHVwZGF0ZVZp
ZXdwb3J0KCk7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIGRpZFVwZGF0
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbik7CiAgICAg
dm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICBXZWJMYXllclRyZWVSZW5kZXJlciogbGF5
ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTEzMzk4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MjgsNSArMjgsNiBAQCBtZXNzYWdlcyAtPiBMYXllclRyZWVIb3N0UHJveHkgewogICAgIENyZWF0
ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZSkKICAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uo
aW50NjRfdCBrZXkpCiAgICAgRGlkUmVuZGVyRnJhbWUoKQorICAgIERpZFVwZGF0ZVNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQogfQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAJKHJl
dmlzaW9uIDExMzM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDE3IEBAIHZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNhbGxPbk1haW5UcmUKICAgICAgICAgTWFpblRocmVhZEd1YXJkZWRJ
bnZva2VyPFdlYkxheWVyVHJlZVJlbmRlcmVyPjo6Y2FsbCh0aGlzLCBmdW5jdGlvbik7CiB9CiAK
K3N0YXRpYyBJbnRQb2ludCBub3JtYWxpemVkU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0
IEZsb2F0U2l6ZSYgY29udGVudFNpemUpCit7CisgICAgSW50U2l6ZSBzaXplKGNvbnRlbnRTaXpl
LndpZHRoKCksIGNvbnRlbnRTaXplLmhlaWdodCgpKTsKKyAgICBpbnQgc2Nyb2xsUG9zaXRpb25Y
ID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueCgpLCAwKTsKKyAgICBzY3JvbGxQb3NpdGlvblgg
PSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblgsIHNpemUud2lkdGgoKSAtIHZpc2libGVDb250ZW50
UmVjdC53aWR0aCgpKTsKKworICAgIGludCBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1heChzY3Jv
bGxQb3NpdGlvbi55KCksIDApOworICAgIHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWluKHNjcm9s
bFBvc2l0aW9uWSwgc2l6ZS5oZWlnaHQoKSAtIHZpc2libGVDb250ZW50UmVjdC5oZWlnaHQoKSk7
CisgICAgcmV0dXJuIEludFBvaW50KHNjcm9sbFBvc2l0aW9uWCwgc2Nyb2xsUG9zaXRpb25ZKTsK
K30KKwogV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJl
ZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KQogICAgIDogbV9sYXllclRyZWVIb3N0UHJv
eHkobGF5ZXJUcmVlSG9zdFByb3h5KQogICAgICwgbV9yb290TGF5ZXJJRCgwKQpAQCAtOTcsNiAr
MTA4LDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbgogICAgICAg
ICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6
T3BlbkdMTW9kZSk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9k
ZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwogCisgICAgYWRqdXN0UG9zaXRpb25G
b3JGaXhlZExheWVycygpOwogICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CiAgICAgR3JhcGhpY3NM
YXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwogICAgIGlmICghY3VycmVudFJv
b3RMYXllcikKQEAgLTE1NSw2ICsxNjcsMTEgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
cGFpbnRUb0dyYXBoaQogICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDAp
OwogfQogCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBjb250ZW50c1NpemUpCit7CisgICAgbV9jb250ZW50c1NpemUg
PSBjb250ZW50c1NpemU7Cit9CisKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpCiB7CiAgICAg
bV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKQEAgLTE2Nyw2ICsxODQsMjIgQEAgdm9pZCBX
ZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcgogICAgICAgICBtX2xheWVyVHJlZUhv
c3RQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpCit7CisgICAgaWYgKG1fZml4ZWRMYXll
cnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBzY3JvbGxQb3Np
dGlvbiA9IG5vcm1hbGl6ZWRTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9j
YXRpb24oKSwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7CisgICAgTGF5
ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXll
ck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnNlY29uZCktPnNldFNjcm9sbFBv
c2l0aW9uRGVsdGEoSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24ueCgpIC0gbV9yZW5kZXJlZENvbnRl
bnRzU2Nyb2xsUG9zaXRpb24ueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkgLSBtX3JlbmRlcmVkQ29u
dGVudHNTY3JvbGxQb3NpdGlvbi55KCkpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6ZGlkVXBkYXRlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQorewor
ICAgIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG5vcm1hbGl6ZWRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRz
U2l6ZSk7Cit9CisKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRl
cnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8pCiB7CiAgICAgV2ViTGF5ZXJJRCBpZCA9
IGxheWVySW5mby5pZDsKQEAgLTE4OSw2ICsyMjIsMTEgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6c3luY0xheWVyUGFyYQogICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZv
LmNvbnRlbnRzUmVjdCk7CiAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJh
d3NDb250ZW50KTsKIAorICAgIGlmIChsYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0KQorICAgICAg
ICBtX2ZpeGVkTGF5ZXJzLmFkZChsYXllckluZm8uaWQsIGxheWVyKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySW5mby5pZCk7CisKICAgICBhc3NpZ25JbWFn
ZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKIAogICAgIC8v
IE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KQEAgLTIzOSw2ICsyNzcsNyBAQCB2b2lk
IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcihXCiAKICAgICBsYXllci0+cmVtb3Zl
RnJvbVBhcmVudCgpOwogICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyAgICBtX2ZpeGVk
TGF5ZXJzLnJlbW92ZShsYXllcklEKTsKICAgICBkZWxldGUgbGF5ZXI7CiB9CiAKQEAgLTMzNyw2
ICszNzYsOCBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlCiAKIHZv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIHsKKyAgICBtX3Jl
bmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNT
Y3JvbGxQb3NpdGlvbjsKKwogICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShG
bG9hdFJlY3QoKSk7CiAgICAgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgJKHJldmlzaW9u
IDExMzM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHBh
aW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgcGFpbnRUb0dy
YXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKICAg
ICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCBkaWRVcGRh
dGVTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOwogCiAg
ICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2
b2lkKCk+Jik7CkBAIC04MCw4ICs4MiwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBz
aG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQogICAgIHZv
aWQgY2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIGFk
anVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJM
YXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgV2ViQ29yZTo6
RmxvYXRTaXplIG1fY29udGVudHNTaXplOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxl
Q29udGVudHNSZWN0OwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKIApAQCAtMTEwLDcgKzEx
NCwxMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRl
OwogCiAgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgTGF5ZXJNYXAgbV9maXhlZExheWVyczsK
ICAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9y
ZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9w
ZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwogfTsKIAogfTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAko
cmV2aXNpb24gMTEzMzk4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw5IEBAIHZvaWQgUVF1
aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQogICAgIFFTaXplRiBzY2FsZWRTaXplID0g
Y29udGVudHNTaXplICogY29udGVudHNTY2FsZTsKICAgICBxLT5zZXRTaXplKHNjYWxlZFNpemUp
OwogICAgIHZpZXdwb3J0SXRlbS0+dXBkYXRlQ29udGVudHNTaXplKHNjYWxlZFNpemUpOworICAg
IERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJl
YSgpOworICAgIGlmIChkcmF3aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFBy
b3h5KCkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKS0+c2V0Q29u
dGVudHNTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVu
dHNTaXplLmhlaWdodCgpKSk7CiB9CiAKIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp+UVF1aWNrV2Vi
UGFnZVByaXZhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAx
MTMzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdy
YXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIFdlYkdyYXBo
aWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGgKICAgICAsIG1fY29udGVudE5lZWRzRGlz
cGxheShmYWxzZSkKICAgICAsIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMoZmFsc2UpCiAgICAgLCBt
X2luVXBkYXRlTW9kZShmYWxzZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogI2lm
IFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICwgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50
KDApCiAgICAgLCBtX2NvbnRlbnRzU2NhbGUoMS5mKQpAQCAtNDIyLDYgKzQyMyw4IEBAIHZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICBpZiAoV2ViR3JhcGhpY3NM
YXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCiAgICAg
ICAgIHJlcGxpY2EtPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCisg
ICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jRml4ZWRMYXllcnMoKTsKKwogICAgIHN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQpAQCAtNDYwLDYgKzQ2Myw3IEBAIHZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICAgICAgbV9sYXllcklu
Zm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgICAgIG1fY29udGVudE5lZWRzRGlzcGxh
eSA9IGZhbHNlOwogICAgICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5jbGVhcigpOworICAgICAg
ICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKIAogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAg
ICAgICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVu
KClbaV0pKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiAxMTMzOTgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZv
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9
IDA7CiB9OwogfQogCkBAIC0xMTMsNiArMTE0LDkgQEAgcHVibGljOgogICAgIEltYWdlKiBpbWFn
ZSgpIHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoZG91YmxlKTsKIAorICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1
cm4gbV9maXhlZFRvVmlld3BvcnQ7IH0KKyAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29s
IGlzRml4ZWQpIHsgbV9maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9CisKICAgICBHcmFwaGlj
c0xheWVyKiBtYXNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGFyZ2V0OyB9CiAgICAg
dm9pZCBzZXRNYXNrVGFyZ2V0KEdyYXBoaWNzTGF5ZXIqIGxheWVyKSB7IG1fbWFza1RhcmdldCA9
IGxheWVyOyB9CiAKQEAgLTE1Myw2ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250
ZW50TmVlZHNEaXNwbGF5IDogMTsKICAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMgOiAx
OwogICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUgOiAyOworICAgIGJvb2wgbV9maXhlZFRvVmlld3Bv
cnQgOiAxOwogCiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKICAgICB2b2lkIG5vdGlmeUNoYW5n
ZVJlY3Vyc2l2ZWx5KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMTMzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNSw2ICs4MzUs
OCBAQCB2b2lkIFdlYlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMCiAgICAgLy8gQWx3
YXlzIHJlc2V0IGV2ZW4gd2hlbiBlbXB0eS4KICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUo
dGFyZ2V0TGF5b3V0U2l6ZSk7CiAKKyAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCh0cnVlKTsKKwogICAgIC8vIFNj
aGVkdWxlIGEgbGF5b3V0IHRvIHVzZSB0aGUgbmV3IHRhcmdldCBzaXplLgogICAgIGlmICghdmll
dy0+bGF5b3V0UGVuZGluZygpKSB7CiAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmNwcAkocmV2aXNpb24gMTEzMzk4KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDExICszMiwxNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgi
CisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhp
Y3NMYXllci5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2V0dGluZ3MuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Nyw2ICs3
Miw3IEBAIExheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UKICAgICAsIG1f
d2FpdGluZ0ZvclVJUHJvY2VzcyhmYWxzZSkKICAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCiAg
ICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKKyAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9u
VXBkYXRlKHRydWUpCiAjZW5kaWYKICAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQogICAg
ICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRydWUpCkBAIC0yMzIsNiArMjM4LDEwIEBAIGJvb2wg
TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckMKIAogdm9pZCBMYXllclRyZWVIb3N0
UXQ6OmRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJiBp
bmZvKQogeworICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgeworICAg
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGlkVXBk
YXRlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkpKTsKKyAg
ICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICB9CiAg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGluZm8pKTsK
IH0KQEAgLTI1Miw2ICsyNjIsNTQgQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OmRldGFjaExheWVy
KFdlYkdyYQogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5
OjpEZWxldGVDb21wb3NpdGluZ0xheWVyKGxheWVyLT5pZCgpKSk7CiB9CiAKK3N0YXRpYyB2b2lk
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVy
KQoreworICAgIC8vIFRoZXNlIGNvbmRpdGlvbnMgbXVzdCBtYXRjaCB0aGUgY29uZGlzaW9ucyBp
biBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbi4K
KyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygp
OworICAgIGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHls
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+
aXNQb3NpdGlvbmVkKCkgfHwgcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0
aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5k
ZXJMYXllci0+cmVuZGVyZXIoKS0+Y29udGFpbmVyKCktPmlzUmVuZGVyVmlldygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0g
dG9XZWJHcmFwaGljc0xheWVyKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7CisgICAgZ3JhcGhp
Y3NMYXllci0+c2V0Rml4ZWRUb1ZpZXdwb3J0KHRydWUpOworfQorCitzdGF0aWMgdm9pZCB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7
CisgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihyZW5kZXJMYXllcik7CisKKyAg
ICBpZiAocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJv
bVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7CisgICAgaWYgKHJl
bmRlckxheWVyLT5uZXh0U2libGluZygpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JMYXllcihyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpzeW5jRml4ZWRMYXllcnMoKQoreworICAgIGlmICghbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpIHx8ICFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkt
PmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+aGFz
Rml4ZWRPYmplY3RzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVyKiByb290
UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKS0+
Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKKyAgICBBU1NFUlQocm9vdFJlbmRlckxh
eWVyKTsKKyAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVw
ZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKTsKK30KKwogdm9pZCBMYXllclRyZWVIb3N0UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCkKIHsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKQEAgLTQ0NSw2ICs1MDMsOCBA
QCB2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRzCiAgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7CiAgICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAg
ICAgbV93ZWJQYWdlLT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyZWN0KTsKKyAgICBpZiAo
Y29udGVudHNSZWN0RGlkQ2hhbmdlKQorICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlv
blVwZGF0ZSA9IHRydWU7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZW5kZXJOZXh0RnJh
bWUoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJl
ZUhvc3RRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuaAkocmV2aXNpb24gMTEzMzk4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JMYXllcihjb25zdCBXZWJMYXllckluZm8mKTsKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVh
bCB2b2lkIHN5bmNGaXhlZExheWVycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5
ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKQEAgLTExMiw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1N1c3BlbmRlZDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZUNvbnRl
bnRzUmVjdDsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisgICAgYm9vbCBtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKIAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRy
ZWVDb250ZXh0OwogICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136157</attachid>
            <date>2012-04-08 13:34:31 -0700</date>
            <delta_ts>2012-04-10 05:56:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>26561</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMzU1
MSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA0
LTA4ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0
cy9maXhlZC1wb3NpdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0wNyAgUm9iIEJ1aXMgIDxy
YnVpc0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBBZGQgQmF0dGVyeSBTdGF0dXMg
QVBJIHN1cHBvcnQKSW5kZXg6IE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTWFudWFsVGVzdHMvZml4ZWQtcG9zaXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysr
IE1hbnVhbFRlc3RzL2ZpeGVkLXBvc2l0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTIgQEAKKzxodG1sPjxoZWFkPgorCis8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9
d2luZG93cy0xMjUxIiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPgorPHN0eWxlPgorLmQxe3Bv
c2l0aW9uOmZpeGVkO3RvcDo1MCU7cmlnaHQ6NTAlO3otaW5kZXg6MjtvdmVyZmxvdzpoaWRkZW47
fQorLmQye3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTo1ZW07bGVmdDo1MDt6LWluZGV4OjI7b3ZlcmZs
b3c6aGlkZGVuO30KKy5vIHtiYWNrZ3JvdW5kOmdyZWVuO2hlaWdodDo0MHB4O3dpZHRoOjIwMHB4
O30KKy50IHsgd2lkdGg6MjAwMHB4OyBoZWlnaHQ6MTk4cHg7YmFja2dyb3VuZC1jb2xvcjogbGln
aHRncmF5OyBib3JkZXI6IDFweCBzb2xpZCBibHVlO30KK2JvZHkgeyBtYXJnaW46IDBweDsgfQor
PC9zdHlsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiByZW1vdmVfZml4ZWQoKQoreworICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZDEiKS5zdHlsZS5wb3NpdGlvbiA9ICJzdGF0aWMiOworfQorCitm
dW5jdGlvbiBjaGFuZ2VfZml4ZWQoKQoreworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZDIi
KS5zdHlsZS5ib3R0b20gPSAiMTBlbSI7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
Y2xhc3M9IkdyYWRpZW50Ij4KKzxkaXYgY2xhc3M9ImQxIiBpZD0iZDEiPjxkaXYgY2xhc3M9Im8i
PlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJkMiIgaWQ9ImQyIj48ZGl2
IGNsYXNzPSJvIj5UaGlzIGlzIGEgdGVzdDwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idCIgb25j
bGljaz0icmVtb3ZlX2ZpeGVkKCk7Ij4KKzAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzIw
MDxicj4KKzxidXR0b24gb25jbGljaz0icmVtb3ZlX2ZpeGVkKCk7Ij5yZW1vdmUgZml4ZWQ8L2J1
dHRvbj4KKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cis0MDA8YnI+Cis8YnV0dG9uIG9uY2xpY2s9
ImNoYW5nZV9maXhlZCgpOyI+Y2hhbmdlIGZpeGVkPC9idXR0b24+Cis8L2Rpdj4KKzxkaXYgY2xh
c3M9InQiPgorNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorODAwCis8L2Rpdj4KKzxkaXYg
Y2xhc3M9InQiPgorMTAwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzEyMDAKKzwvZGl2Pgor
PGRpdiBjbGFzcz0idCI+CisxNDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTYwMAorPC9k
aXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzE4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMDAw
Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMjIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4K
KzI0MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9
InQiPgorMjgwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzMwMDAKKzwvZGl2PgorPGRpdiBj
bGFzcz0idCI+CiszMjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzQwMAorPC9kaXY+Cis8
ZGl2IGNsYXNzPSJ0Ij4KKzM2MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CiszODAwCis8L2Rp
dj4KKzxkaXYgY2xhc3M9InQiPgorNDAwMAorPC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTEzNTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDQtMDggIFlhZWwgQWhhcm9uICA8
eWFlbC5haGFyb25Abm9raWEuY29tPgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZml4
ZWQgcG9zaXRpb24gZWxlbWVudHMgaW4gUXQgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE3ODYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHRoZSBzZXR0aW5nIGFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCBpcyB0cnVlLCB3ZSB1cGRhdGUKKyAgICAg
ICAgdGhlIHBvc2l0aW9uIG9mIGZpeGVkIGxheWVycywgYW5kIHNlbmQgdXBkYXRlcyB0byB0aGUg
VUkgcHJvY2VzcyBhcyB3ZSBzY3JvbGwuCisgICAgICAgIEJlZm9yZSBwYWludGluZywgVGV4dHVy
ZU1hcHBlckxheWVyIHJlY2VpdmVzIGEgZGVsdGEgb2YgdGhlIHNjcm9sbCBwb3NpdGlvbnMgYmV0
d2VlbiB0aGUgVUkgCisgICAgICAgIGFuZCB0aGUgd2ViIHByb2Nlc3NlcywgYW5kIGFkanVzdHMg
aXRzIHRyYW5zZm9ybSBwb3NpdGlvbiBhY2NvcmRpbmdseS4KKworICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxl
Q29udGVudFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpz
ZXRTY3JvbGxQb3NpdGlvbkRlbHRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaDoKKyAgICAgICAgKFRl
eHR1cmVNYXBwZXJMYXllcik6CisKIDIwMTItMDQtMDggIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFy
b2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciAhRU5BQkxFKENTU19GSUxU
RVJTKSAmJiBBU1NFUlRfRElTQUJMRUQgYWZ0ZXIgcjEwOTk1My4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDExMzU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwMiw4ICsxNzAyLDExIEBAIHZvaWQg
RnJhbWVWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmUKIHsKICAgICBJbnRTaXplIG9mZnNl
dCA9IHNjcm9sbE9mZnNldCgpOwogICAgIFNjcm9sbFZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRl
bnRSZWN0KHZpc2libGVDb250ZW50UmVjdCk7Ci0gICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSkKKyAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKSB7CisgICAgICAgIGlmICht
X2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgdXBkYXRlRml4ZWRFbGVtZW50c0FmdGVy
U2Nyb2xsaW5nKCk7CiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOworICAgIH0KICAg
ICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAkocmV2aXNpb24gMTEzNTUwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw1ICs1MTEsMTQgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZwogICAgIH0KIH0KIAordm9pZCBUZXh0dXJlTWFw
cGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uRGVsdGEoY29uc3QgSW50UG9pbnQmIGRlbHRhKQor
eworICAgIC8vIGRlbHRhIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNjcm9sbCBvZmZz
ZXQgaW4gdGhlIHVpIHByb2Nlc3MgYW5kIHRoZSBzY3JvbGwgb2Zmc2V0CisgICAgLy8gaW4gdGhl
IHdlYiBwcm9jZXNzLiBXZSBhZGQgdGhpcyBkZWx0YSB0byB0aGUgcG9zaXRpb24gb2YgZml4ZWQg
bGF5ZXJzLCB0byBtYWtlCisgICAgLy8gc3VyZSB0aGF0IHRoZXkgZG8gbm90IG1vdmUgd2hpbGUg
c2Nyb2xsaW5nLgorICAgIG1fc2Nyb2xsUG9zaXRpb25EZWx0YSA9IGRlbHRhOworICAgIG1fdHJh
bnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zICsgbV9zY3JvbGxQb3NpdGlvbkRlbHRhKTsK
K30KKwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCShyZXZpc2lvbiAx
MTM1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsOCBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUo
KSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZTsgfQogICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVz
UmVjdXJzaXZlKCk7CiAKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uRGVsdGEoY29uc3QgSW50
UG9pbnQmKTsKKwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigp
OwogICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKQEAgLTIxNyw2ICsyMTks
NyBAQCBwcml2YXRlOgogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgVGV4dHVyZU1hcHBlciogbV90
ZXh0dXJlTWFwcGVyOwogICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsK
KyAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uRGVsdGE7CiB9OwogCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDExMzU1MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA0LTA4ICBZYWVsIEFoYXJvbiAgPHlhZWwu
YWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBv
c2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVHVybiBvbiB0aGUgZmxhZyBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgd2hlbiB1c2luZyBmaXhlZCBsYXlvdXQuCisgICAg
ICAgIEFzIHdlIHNjcm9sbCwgd2Uga2VlcCB0cmFjayBvZiB0aGUgZGVsdGEgaW4gc2Nyb2xsIHBv
c2l0aW9uIGJldHdlZW4gdGhlIFVJIGFuZCB3ZWIgcHJvY2Vzc2VzLAorICAgICAgICBhbmQgYWRq
dXN0IHRoZSBwb3NpdGlvbiBvZiBhbGwgdGhlIGZpeGVkIGxheWVycyBieSB0aGF0IGRlbHRhLgor
ICAgICAgICBXaGVuIFdlYkxheWVyVHJlZVJlbmRlcmVyIHJlY2VpdmVzIGEgbmV3IHNjcm9sbCBw
b3NpdGlvbiBmcm9tIHRoZSB3ZWIgcHJvY2VzcywgaXQga2VlcHMgaXQgYXMgcGVuZGluZywKKyAg
ICAgICAgYW5kIGNvbW1pdCB0aGUgbmV3IHNjcm9sbCBwb3NpdGlvbiBpbiBmbHVzaExheWVyQ2hh
bmdlcy4KKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBhZGRyZXNzIHNjcm9sbGluZyBvdmVy
c2hvb3QgYW5kIGl0IGRvZXMgbm90IGZpeCB0aGUgd3JvbmcgcG9zaXRpb25pbmcKKyAgICAgICAg
dGhhdCBvY2N1cnMgd2hlbiB3ZSB6b29tLiBUaGVzZSBpc3N1ZXMgd2lsbCBiZSBhZGRyZXNzZWQg
aW4gZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAg
IChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9z
dFByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OmJvdW5kZWRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbnRHTENv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVu
dHNTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBv
c2l0aW9uRm9yRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5k
ZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcyk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkxheWVyVHJlZVJlbmRlcmVyLmg6CisgICAgICAgIChXZWJMYXllclRyZWVSZW5kZXJlcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydCk6
CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFJlc2l6ZXNUb0Nv
bnRlbnRzVXNpbmdMYXlvdXRTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpM
YXllclRyZWVIb3N0UXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZFN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZz
ZXRGcm9tVmlld3BvcnRGb3JTZWxmKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFF0OjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaDoKKyAgICAgICAgKExheWVyVHJlZUhvc3RR
dCk6CisKIDIwMTItMDQtMDcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgW0NNYWtlXSBDbGVhbnVwIFdURiBpbmNsdWRlIGRpcmVjdG9yaWVzCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHJldmlzaW9uIDExMzU1
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICAgICAg
ICAgIGJvb2wgcHJlc2VydmVzM0QgOiAxOwogICAgICAgICAgICAgYm9vbCBjb250ZW50TmVlZHNE
aXNwbGF5IDogMTsKICAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAgICAgICAg
ICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVk
IGludCBmbGFnczsKICAgICB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5jcHAJKHJldmlzaW9uIDExMzU1MCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNiArMTIwLDExIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95RGlyZWN0bHkK
ICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUlt
YWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXkpKTsKIH0KIAordm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAg
ICBtX3JlbmRlcmVyLT5zZXRDb250ZW50c1NpemUoY29udGVudHNTaXplKTsKK30KKwogdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7
CiAgICAgbV9yZW5kZXJlci0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCBzY2FsZSk7CkBA
IC0xMzEsNiArMTM2LDExIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJOZXh0RnJh
bWUKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5
LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Cit9CisKIHZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlB1cmdl
QmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAko
cmV2aXNpb24gMTEzNTUwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhv
c3RQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwKTsK
ICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCk7CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CisgICAgdm9pZCBz
ZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRW
aXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeSk7CiAgICAgdm9pZCBkaWRSZW5k
ZXJGcmFtZSgpOwogICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKQEAgLTY0LDYgKzY1LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKik7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZvaWQgcmVuZGVyTmV4dEZy
YW1lKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9zaXRpb24pOwogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAgICAg
V2ViTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJlci5nZXQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDExMzU1
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI4LDUgKzI4LDYgQEAgbWVzc2FnZXMgLT4gTGF5ZXJU
cmVlSG9zdFByb3h5IHsKICAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCiAgICAgRGVzdHJv
eURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQogICAgIERpZFJlbmRlckZyYW1l
KCkKKyAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb3NpdGlv
bikKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJl
ZVJlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxMTM1NTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw2ICs3MywxNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjYWxsT25NYWluVHJlCiAg
ICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxXZWJMYXllclRyZWVSZW5kZXJlcj46OmNh
bGwodGhpcywgZnVuY3Rpb24pOwogfQogCitzdGF0aWMgSW50UG9pbnQgYm91bmRlZFNjcm9sbFBv
c2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50UmVjdCYgdmlz
aWJsZUNvbnRlbnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplKQoreworICAgIElu
dFNpemUgc2l6ZShjb250ZW50U2l6ZS53aWR0aCgpLCBjb250ZW50U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgaW50IHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLngoKSwgMCk7
CisgICAgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25YLCBzaXplLndp
ZHRoKCkgLSB2aXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSk7CisKKyAgICBpbnQgc2Nyb2xsUG9z
aXRpb25ZID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKKyAgICBzY3JvbGxQb3Np
dGlvblkgPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblksIHNpemUuaGVpZ2h0KCkgLSB2aXNpYmxl
Q29udGVudFJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRQb2ludChzY3JvbGxQb3NpdGlv
blgsIHNjcm9sbFBvc2l0aW9uWSk7Cit9CisKIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpXZWJMYXll
clRyZWVSZW5kZXJlcihMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkKICAg
ICA6IG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKICAgICAsIG1fcm9v
dExheWVySUQoMCkKQEAgLTk3LDYgKzEwOCw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnBhaW50VG9DdXJyZW4KICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6
Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwogICAgIEFTU0VSVChtX3RleHR1cmVN
YXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsK
IAorICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKICAgICBzeW5jUmVtb3RlQ29u
dGVudCgpOwogICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIo
KTsKICAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCkBAIC0xNTUsNiArMTY3LDExIEBAIHZvaWQg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGkKICAgICBtX3RleHR1cmVNYXBwZXIt
PnNldEdyYXBoaWNzQ29udGV4dCgwKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQor
eworICAgIG1fY29udGVudHNTaXplID0gY29udGVudHNTaXplOworfQorCiB2b2lkIFdlYkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qs
IGZsb2F0IHNjYWxlKQogewogICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CkBAIC0x
NjcsNiArMTg0LDIyIEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3IK
ICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKK3Zv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQor
eworICAgIGlmIChtX2ZpeGVkTGF5ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24obV92aXNp
YmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250
ZW50c1NpemUpOworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVu
ZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT5z
ZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhKEludFBvaW50KHNjcm9sbFBvc2l0aW9uLngo
KSAtIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9zaXRpb24u
eSgpIC0gbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24ueSgpKSk7Cit9CisKK3ZvaWQg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbikKK3sKKyAgICBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9z
aXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIG1fdmlzaWJsZUNvbnRlbnRz
UmVjdCwgbV9jb250ZW50c1NpemUpOworfQorCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpz
eW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQogewogICAg
IFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CkBAIC0xODksNiArMjIyLDExIEBAIHZvaWQg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmEKICAgICBsYXllci0+c2V0Q29udGVu
dHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOwogICAgIGxheWVyLT5zZXREcmF3c0NvbnRl
bnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CiAKKyAgICBpZiAobGF5ZXJJbmZvLmZpeGVkVG9W
aWV3cG9ydCkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQobGF5ZXJJbmZvLmlkLCBsYXllcik7
CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllckluZm8uaWQpOwor
CiAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCk7CiAKICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCkBAIC0yMzks
NiArMjc3LDcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIoVwogCiAg
ICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJ
RCk7CisgICAgbV9maXhlZExheWVycy5yZW1vdmUobGF5ZXJJRCk7CiAgICAgZGVsZXRlIGxheWVy
OwogfQogCkBAIC0zMzcsNiArMzc2LDggQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y29t
bWl0VGlsZU9wZQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdl
cygpCiB7CisgICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdS
ZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CisKICAgICBtX3Jvb3RMYXllci0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwogICAgIGNvbW1pdFRpbGVPcGVyYXRpb25zKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5oCShyZXZpc2lvbiAxMTM1NTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAg
ICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCk7CiAgICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0
Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUpOwor
ICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IHBvc2l0aW9uKTsKIAogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwpAQCAtODAsOCArODIsMTAgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgcGFpbnRDb250ZW50cyhj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSB7IH0KICAgICB2b2lkIGNhbGxPbk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+
Jik7CisgICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7CiAKICAgICB0eXBl
ZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFw
OworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
CiAKQEAgLTExMCw3ICsxMTQsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4g
bV9sYXllcnNUb0RlbGV0ZTsKIAogICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIExheWVyTWFw
IG1fZml4ZWRMYXllcnM7CiAgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIFdlYkNv
cmU6OkludFBvaW50IG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOworICAgIFdlYkNv
cmU6OkludFBvaW50IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKIH07
CiAKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZS5jcHAJKHJldmlzaW9uIDExMzU1MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsx
MzksOSBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKCkKICAgICBRU2l6
ZUYgc2NhbGVkU2l6ZSA9IGNvbnRlbnRzU2l6ZSAqIGNvbnRlbnRzU2NhbGU7CiAgICAgcS0+c2V0
U2l6ZShzY2FsZWRTaXplKTsKICAgICB2aWV3cG9ydEl0ZW0tPnVwZGF0ZUNvbnRlbnRzU2l6ZShz
Y2FsZWRTaXplKTsKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKTsKKyAgICBpZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEt
PmxheWVyVHJlZUhvc3RQcm94eSgpKQorICAgICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9z
dFByb3h5KCktPnNldENvbnRlbnRzU2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoY29udGVudHNTaXpl
LndpZHRoKCksIGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSkpOwogfQogCiBRUXVpY2tXZWJQYWdlUHJp
dmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcAkocmV2aXNpb24gMTEzNTUwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNiAr
ODUsNyBAQCBXZWJHcmFwaGljc0xheWVyOjpXZWJHcmFwaGljc0xheWVyKEdyYXBoCiAgICAgLCBt
X2NvbnRlbnROZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX2hhc1BlbmRpbmdBbmltYXRpb25z
KGZhbHNlKQogICAgICwgbV9pblVwZGF0ZU1vZGUoZmFsc2UpCisgICAgLCBtX2ZpeGVkVG9WaWV3
cG9ydChmYWxzZSkKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICAsIG1fd2ViR3Jh
cGhpY3NMYXllckNsaWVudCgwKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEuZikKQEAgLTQyMiw2
ICs0MjMsOCBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0CiAgICAg
aWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGlj
YUxheWVyKCkpKQogICAgICAgICByZXBsaWNhLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKIAorICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0ZpeGVkTGF5
ZXJzKCk7CisKICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKQEAgLTQ2
MCw2ICs0NjMsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0CiAg
ICAgICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOwogICAgICAgICBtX2Nv
bnRlbnROZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4u
Y2xlYXIoKTsKKyAgICAgICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1Zp
ZXdwb3J0KCk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2Vi
TGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkocmV2
aXNpb24gMTEzNTUwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNv
bnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5
ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0ZpeGVkTGF5ZXJzKCkgPSAwOwogfTsKIH0KIApAQCAtMTEzLDYgKzExNCw5IEBAIHB1YmxpYzoK
ICAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBu
b3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CiAKKyAgICBib29sIGZpeGVkVG9WaWV3cG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhl
ZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsg
fQorCiAgICAgR3JhcGhpY3NMYXllciogbWFza1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
a1RhcmdldDsgfQogICAgIHZvaWQgc2V0TWFza1RhcmdldChHcmFwaGljc0xheWVyKiBsYXllcikg
eyBtX21hc2tUYXJnZXQgPSBsYXllcjsgfQogCkBAIC0xNTMsNiArMTU3LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheSA6IDE7CiAgICAgYm9vbCBtX2hhc1BlbmRp
bmdBbmltYXRpb25zIDogMTsKICAgICBib29sIG1faW5VcGRhdGVNb2RlIDogMjsKKyAgICBib29s
IG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKIAogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CiAgICAg
dm9pZCBub3RpZnlDaGFuZ2VSZWN1cnNpdmVseSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTEzNTUwKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MzUsNiArODM1LDggQEAgdm9pZCBXZWJQYWdlOjpzZXRSZXNpemVzVG9Db250ZW50c1Vz
aW5nTAogICAgIC8vIEFsd2F5cyByZXNldCBldmVuIHdoZW4gZW1wdHkuCiAgICAgdmlldy0+c2V0
Rml4ZWRMYXlvdXRTaXplKHRhcmdldExheW91dFNpemUpOwogCisgICAgbV9wYWdlLT5zZXR0aW5n
cygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQodHJ1
ZSk7CisKICAgICAvLyBTY2hlZHVsZSBhIGxheW91dCB0byB1c2UgdGhlIG5ldyB0YXJnZXQgc2l6
ZS4KICAgICBpZiAoIXZpZXctPmxheW91dFBlbmRpbmcoKSkgewogICAgICAgICB2aWV3LT5zZXRO
ZWVkc0xheW91dCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0
L0xheWVyVHJlZUhvc3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHJldmlzaW9uIDExMzU1MCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTYgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNjcsNiArNzIsNyBAQCBMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdChX
ZWJQYWdlCiAgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MoZmFsc2UpCiAgICAgLCBtX2lzU3Vz
cGVuZGVkKGZhbHNlKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQogI2VuZGlmCiAgICAgLCBtX3Nob3VsZFN5bmNG
cmFtZShmYWxzZSkKICAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQpAQCAtMjMyLDYg
KzIzOCwxMCBAQCBib29sIExheWVyVHJlZUhvc3RRdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDCiAKIHZv
aWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0
IFdlYkxheWVySW5mbyYgaW5mbykKIHsKKyAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRp
b25VcGRhdGUpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0UHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5s
b2NhdGlvbigpKSk7CisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0g
ZmFsc2U7CisgICAgfQogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5
ZXJTdGF0ZShpbmZvKSk7CiB9CkBAIC0yNTIsNiArMjYyLDU0IEBAIHZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpkZXRhY2hMYXllcihXZWJHcmEKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkpOwog
fQogCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxh
eWVyKiByZW5kZXJMYXllcikKK3sKKyAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2gg
dGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0
aW5nRm9yUG9zaXRpb24uCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVy
TGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgp
OworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5
ZXItPnJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRl
clZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFj
a2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVy
KCkpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30KKwor
c3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIq
IHJlbmRlckxheWVyKQoreworICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVu
ZGVyTGF5ZXIpOworCisgICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAg
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxk
KCkpOworICAgIGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRl
T2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAgICBpZiAo
IW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCktPmhhc0ZpeGVkT2JqZWN0cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29u
dGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7CisgICAgQVNT
RVJUKHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVy
TGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiB7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBA
IC00NDUsNiArNTAzLDggQEAgdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50
cwogICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVk
TGF5b3V0KCkpCiAgICAgICAgIG1fd2ViUGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qo
cmVjdCk7CisgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgbV9zaG91bGRT
ZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RR
dDo6cmVuZGVyTmV4dEZyYW1lKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgJKHJldmlzaW9uIDExMzU1MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJik7
CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIq
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKIAogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7CkBAIC0xMTIsNiArMTEzLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTdXNwZW5kZWQ7CiAgICAgV2ViQ29yZTo6SW50UmVj
dCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAg
IGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CiAKICAgICBMYXllclRyZWVD
b250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKICAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwo=
</data>
<flag name="review"
          id="140864"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136441</attachid>
            <date>2012-04-10 05:56:29 -0700</date>
            <delta_ts>2012-04-10 12:47:26 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>81786.patch</filename>
            <type>text/plain</type>
            <size>26558</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDExMzY1
OSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA0
LTA4ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KKworICAgICAgICBJbml0
aWFsIHN1cHBvcnQgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzIGluIFF0IFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTm9hbSBSb3NlbnRoYWwuCisKKyAgICAgICAgKiBNYW51YWxUZXN0
cy9maXhlZC1wb3NpdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0wNiAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBVcGRhdGUgcGVyZi1vLW1hdGljIGNvbmZp
Zy5qcyBwZXIgdXBzdHJlYW0gY2hhbmdlLgpJbmRleDogTWFudWFsVGVzdHMvZml4ZWQtcG9zaXRp
b24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBNYW51YWxUZXN0cy9maXhlZC1wb3NpdGlvbi5odG1sCShy
ZXZpc2lvbiAwKQorKysgTWFudWFsVGVzdHMvZml4ZWQtcG9zaXRpb24uaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+PGhlYWQ+CisKKzxtZXRhIGNvbnRlbnQ9InRleHQv
aHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSI+Cis8
c3R5bGU+CisuZDF7cG9zaXRpb246Zml4ZWQ7dG9wOjUwJTtyaWdodDo1MCU7ei1pbmRleDoyO292
ZXJmbG93OmhpZGRlbjt9CisuZDJ7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjVlbTtsZWZ0OjUwO3ot
aW5kZXg6MjtvdmVyZmxvdzpoaWRkZW47fQorLm8ge2JhY2tncm91bmQ6Z3JlZW47aGVpZ2h0OjQw
cHg7d2lkdGg6MjAwcHg7fQorLnQgeyB3aWR0aDoyMDAwcHg7IGhlaWdodDoxOThweDtiYWNrZ3Jv
dW5kLWNvbG9yOiBsaWdodGdyYXk7IGJvcmRlcjogMXB4IHNvbGlkIGJsdWU7fQorYm9keSB7IG1h
cmdpbjogMHB4OyB9Cis8L3N0eWxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHJlbW92ZV9maXhlZCgp
Cit7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkMSIpLnN0eWxlLnBvc2l0aW9uID0gInN0
YXRpYyI7Cit9CisKK2Z1bmN0aW9uIGNoYW5nZV9maXhlZCgpCit7CisgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJkMiIpLnN0eWxlLmJvdHRvbSA9ICIxMGVtIjsKK30KKworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBjbGFzcz0iR3JhZGllbnQiPgorPGRpdiBjbGFzcz0iZDEiIGlkPSJkMSI+
PGRpdiBjbGFzcz0ibyI+VGhpcyBpcyBhIHRlc3Q8L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9ImQy
IiBpZD0iZDIiPjxkaXYgY2xhc3M9Im8iPlRoaXMgaXMgYSB0ZXN0PC9kaXY+PC9kaXY+Cis8ZGl2
IGNsYXNzPSJ0IiBvbmNsaWNrPSJyZW1vdmVfZml4ZWQoKTsiPgorMDAwCis8L2Rpdj4KKzxkaXYg
Y2xhc3M9InQiPgorMjAwPGJyPgorPGJ1dHRvbiBvbmNsaWNrPSJyZW1vdmVfZml4ZWQoKTsiPnJl
bW92ZSBmaXhlZDwvYnV0dG9uPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzQwMDxicj4KKzxi
dXR0b24gb25jbGljaz0iY2hhbmdlX2ZpeGVkKCk7Ij5jaGFuZ2UgZml4ZWQ8L2J1dHRvbj4KKzwv
ZGl2PgorPGRpdiBjbGFzcz0idCI+Cis2MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cis4MDAK
KzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisxMDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgor
MTIwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzE0MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0i
dCI+CisxNjAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMTgwMAorPC9kaXY+Cis8ZGl2IGNs
YXNzPSJ0Ij4KKzIwMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+CisyMjAwCis8L2Rpdj4KKzxk
aXYgY2xhc3M9InQiPgorMjQwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzI2MDAKKzwvZGl2
PgorPGRpdiBjbGFzcz0idCI+CisyODAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzAwMAor
PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0Ij4KKzMyMDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cisz
NDAwCis8L2Rpdj4KKzxkaXYgY2xhc3M9InQiPgorMzYwMAorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0
Ij4KKzM4MDAKKzwvZGl2PgorPGRpdiBjbGFzcz0idCI+Cis0MDAwCis8L2Rpdj4KKzwvYm9keT48
L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTM2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0wNC0wOCAg
WWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAgSW5pdGlhbCBz
dXBwb3J0IGZvciBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBpbiBRdCBXZWJLaXQyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTc4NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5vYW0gUm9zZW50aGFsLgorCisgICAgICAgIFdoZW4gdGhlIHNldHRpbmcg
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkIGlzIHRydWUsIHdl
IHVwZGF0ZQorICAgICAgICB0aGUgcG9zaXRpb24gb2YgZml4ZWQgbGF5ZXJzLCBhbmQgc2VuZCB1
cGRhdGVzIHRvIHRoZSBVSSBwcm9jZXNzIGFzIHdlIHNjcm9sbC4KKyAgICAgICAgQmVmb3JlIHBh
aW50aW5nLCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVjZWl2ZXMgYSBkZWx0YSBvZiB0aGUgc2Nyb2xs
IHBvc2l0aW9ucyBiZXR3ZWVuIHRoZSBVSSAKKyAgICAgICAgYW5kIHRoZSB3ZWIgcHJvY2Vzc2Vz
LCBhbmQgYWRqdXN0cyBpdHMgdHJhbnNmb3JtIHBvc2l0aW9uIGFjY29yZGluZ2x5LgorCisgICAg
ICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpz
ZXRGaXhlZFZpc2libGVDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uRGVsdGEpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5o
OgorICAgICAgICAoVGV4dHVyZU1hcHBlckxheWVyKToKKwogMjAxMi0wNC0wOSAgQWxleGV5IFBy
b3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBXZWJQcm9jZXNzIGRp
ZXMgZHVlIHRvIG1fcHJvY2Vzcy0+Y2hlY2tVUkxSZWNlaXZlZEZyb21XZWJQcm9jZXNzKHVybCkg
ZHJvcHBpbmcgYSBmaWxlIFVSTApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2
aXNpb24gMTEzNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzAyLDggKzE3MDIsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVk
VmlzaWJsZUNvbnRlbnRSZQogewogICAgIEludFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7
CiAgICAgU2Nyb2xsVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZUNvbnRl
bnRSZWN0KTsKLSAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgIGlmIChvZmZz
ZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpIHsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKS0+c2V0
dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkp
CisgICAgICAgICAgICB1cGRhdGVGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmcoKTsKICAgICAg
ICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgfQogICAgIGZyYW1lKCktPmxvYWRlcigp
LT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAxMTM2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTExLDUgKzUxMSwxNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c3luY0Nv
bXBvc2l0aW5nCiAgICAgfQogfQogCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c2V0U2Nyb2xs
UG9zaXRpb25EZWx0YShjb25zdCBJbnRQb2ludCYgZGVsdGEpCit7CisgICAgLy8gZGVsdGEgaXMg
dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2Nyb2xsIG9mZnNldCBpbiB0aGUgdWkgcHJvY2Vz
cyBhbmQgdGhlIHNjcm9sbCBvZmZzZXQKKyAgICAvLyBpbiB0aGUgd2ViIHByb2Nlc3MuIFdlIGFk
ZCB0aGlzIGRlbHRhIHRvIHRoZSBwb3NpdGlvbiBvZiBmaXhlZCBsYXllcnMsIHRvIG1ha2UKKyAg
ICAvLyBzdXJlIHRoYXQgdGhleSBkbyBub3QgbW92ZSB3aGlsZSBzY3JvbGxpbmcuCisgICAgbV9z
Y3JvbGxQb3NpdGlvbkRlbHRhID0gZGVsdGE7CisgICAgbV90cmFuc2Zvcm0uc2V0UG9zaXRpb24o
bV9zdGF0ZS5wb3MgKyBtX3Njcm9sbFBvc2l0aW9uRGVsdGEpOworfQorCiB9CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgJKHJldmlzaW9uIDExMzY1OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIHsgcmV0dXJuIG1fYmFja2lu
Z1N0b3JlOyB9CiAgICAgdm9pZCBjbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKIAorICAg
IHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25EZWx0YShjb25zdCBJbnRQb2ludCYpOworCiBwcml2YXRl
OgogICAgIFRleHR1cmVNYXBwZXJMYXllciogcm9vdExheWVyKCk7CiAgICAgdm9pZCBjb21wdXRl
VHJhbnNmb3Jtc1JlY3Vyc2l2ZSgpOwpAQCAtMjE3LDYgKzIxOSw3IEBAIHByaXZhdGU6CiAgICAg
U3RhdGUgbV9zdGF0ZTsKICAgICBUZXh0dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXI7CiAgICAg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOworICAgIEludFBvaW50IG1fc2Ny
b2xsUG9zaXRpb25EZWx0YTsKIH07CiAKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTEzNjU5
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NjMgQEAKKzIwMTItMDQtMDggIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgor
CisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3IgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMgaW4g
UXQgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODE3ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOb2FtIFJvc2VudGhhbC4KKworICAgICAg
ICBUdXJuIG9uIHRoZSBmbGFnIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9u
RW5hYmxlZCB3aGVuIHVzaW5nIGZpeGVkIGxheW91dC4KKyAgICAgICAgQXMgd2Ugc2Nyb2xsLCB3
ZSBrZWVwIHRyYWNrIG9mIHRoZSBkZWx0YSBpbiBzY3JvbGwgcG9zaXRpb24gYmV0d2VlbiB0aGUg
VUkgYW5kIHdlYiBwcm9jZXNzZXMsCisgICAgICAgIGFuZCBhZGp1c3QgdGhlIHBvc2l0aW9uIG9m
IGFsbCB0aGUgZml4ZWQgbGF5ZXJzIGJ5IHRoYXQgZGVsdGEuCisgICAgICAgIFdoZW4gV2ViTGF5
ZXJUcmVlUmVuZGVyZXIgcmVjZWl2ZXMgYSBuZXcgc2Nyb2xsIHBvc2l0aW9uIGZyb20gdGhlIHdl
YiBwcm9jZXNzLCBpdCBrZWVwcyBpdCBhcyBwZW5kaW5nLAorICAgICAgICBhbmQgY29tbWl0IHRo
ZSBuZXcgc2Nyb2xsIHBvc2l0aW9uIGluIGZsdXNoTGF5ZXJDaGFuZ2VzLgorICAgICAgICBUaGlz
IHBhdGNoIGRvZXMgbm90IGFkZHJlc3Mgc2Nyb2xsaW5nIG92ZXJzaG9vdCBhbmQgaXQgZG9lcyBu
b3QgZml4IHRoZSB3cm9uZyBwb3NpdGlvbmluZworICAgICAgICB0aGF0IG9jY3VycyB3aGVuIHdl
IHpvb20uIFRoZXNlIGlzc3VlcyB3aWxsIGJlIGFkZHJlc3NlZCBpbiBmdXR1cmUgcGF0Y2hlcy4K
KworICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2
YXRlOjp1cGRhdGVTaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1Np
emUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Ym91bmRl
ZFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5j
TGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmRlbGV0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZs
dXNoTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVy
ZXIuaDoKKyAgICAgICAgKFdlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oOgorICAgICAgICAoV2ViR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpmaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkdyYXBo
aWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0UmVzaXplc1RvQ29udGVudHNVc2luZ0xheW91dFNp
emUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkU3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNl
bGYpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJv
bVZpZXdwb3J0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnN5
bmNGaXhlZExheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFF0KToKKwogMjAxMi0wNC0wOSAg
Tm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFtR
dF1bV0syXSBTeW5jIHRoZSBsYXllcidzIHN0YXRlIGFuZCB0aGUgbGF5ZXIncyBjaGlsZHJlbiBz
ZXBhcmF0ZWx5CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJ
KHJldmlzaW9uIDExMzY1OSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgc3RydWN0IFdlYkxheWVySW5m
byB7CiAgICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwogICAgICAgICAgICAgYm9v
bCBwcmVzZXJ2ZXMzRCA6IDE7CiAgICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOworICAg
ICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwogICAgICAgICB9OwogICAgICAgICB1
bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwCShyZXZpc2lvbiAxMTM2NTkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDYgKzEyNSwxMSBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURp
cmVjdGx5CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRl
c3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7CiB9CiAKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUp
Cit7CisgICAgbV9yZW5kZXJlci0+c2V0Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7Cit9CisK
IHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVj
dG9yKQogewogICAgIG1fcmVuZGVyZXItPnNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgc2Nh
bGUpOwpAQCAtMTM2LDYgKzE0MSwxMSBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVuZGVy
TmV4dEZyYW1lCiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7Cisg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdldCgpLCBwb3NpdGlvbikpOworfQorCiB2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0
OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFBy
b3h5LmgJKHJldmlzaW9uIDExMzY1OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXll
clRyZWVIb3N0UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
Y2xpcCk7CiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQpOwogICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOworICAg
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQg
c2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnkpOwogICAgIHZvaWQg
ZGlkUmVuZGVyRnJhbWUoKTsKICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7CkBAIC02NSw2ICs2Niw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOwogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICAgICB2b2lkIHJlbmRl
ck5leHRGcmFtZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKTsKICAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3Jlcygp
OwogICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lv
biAxMTM2NTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw1ICsyOSw2IEBAIG1lc3NhZ2VzIC0+
IExheWVyVHJlZUhvc3RQcm94eSB7CiAgICAgQ3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uo
aW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKQogICAg
IERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKICAgICBEaWRSZW5k
ZXJGcmFtZSgpCisgICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQg
cG9zaXRpb24pCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJM
YXllclRyZWVSZW5kZXJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAkocmV2aXNpb24gMTEzNjU5KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNiArNzMsMTcgQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y2FsbE9uTWFp
blRyZQogICAgICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8V2ViTGF5ZXJUcmVlUmVuZGVy
ZXI+OjpjYWxsKHRoaXMsIGZ1bmN0aW9uKTsKIH0KIAorc3RhdGljIEludFBvaW50IGJvdW5kZWRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFJl
Y3QmIHZpc2libGVDb250ZW50UmVjdCwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSkKK3sK
KyAgICBJbnRTaXplIHNpemUoY29udGVudFNpemUud2lkdGgoKSwgY29udGVudFNpemUuaGVpZ2h0
KCkpOworICAgIGludCBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi54
KCksIDApOworICAgIHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWCwg
c2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRoKCkpOworCisgICAgaW50IHNj
cm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLnkoKSwgMCk7CisgICAgc2Ny
b2xsUG9zaXRpb25ZID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25ZLCBzaXplLmhlaWdodCgpIC0g
dmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQoc2Nyb2xs
UG9zaXRpb25YLCBzY3JvbGxQb3NpdGlvblkpOworfQorCiBXZWJMYXllclRyZWVSZW5kZXJlcjo6
V2ViTGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJv
eHkpCiAgICAgOiBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0UHJveHkpCiAgICAg
LCBtX3Jvb3RMYXllcklEKDApCkBAIC05OCw2ICsxMDksNyBAQCB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpwYWludFRvQ3VycmVuCiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxl
cmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwogCiAgICAgc3luY1Jl
bW90ZUNvbnRlbnQoKTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7CiAgICAg
R3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwogICAgIGlmICgh
Y3VycmVudFJvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTQzLDYgKzE1NSwxMSBAQCB2
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpCiAgICAgbV90ZXh0dXJlTWFw
cGVyLT5zZXRHcmFwaGljc0NvbnRleHQoMCk7CiB9CiAKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGNvbnRlbnRzU2l6
ZSkKK3sKKyAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKK30KKwogdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBmbG9hdCBzY2FsZSkKIHsKICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwpA
QCAtMTU1LDYgKzE3MiwyMyBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3
cG9yCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQog
Cit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJz
KCkKK3sKKyAgICBpZiAobV9maXhlZExheWVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1f
dmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1f
Y29udGVudHNTaXplKTsKKworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5
ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVy
KGl0LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhKEludFBvaW50KHNjcm9sbFBvc2l0
aW9uLngoKSAtIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9z
aXRpb24ueSgpIC0gbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24ueSgpKSk7Cit9CisK
K3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIG1fdmlzaWJsZUNv
bnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworfQorCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXll
cklEPiYgY2hpbGRJRHMpCiB7CiAgICAgZW5zdXJlTGF5ZXIoaWQpOwpAQCAtMTk1LDYgKzIyOSwx
MSBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlCiAgICAgbGF5ZXIt
PnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKICAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwogCisgICAgaWYgKGxheWVySW5m
by5maXhlZFRvVmlld3BvcnQpCisgICAgICAgIG1fZml4ZWRMYXllcnMuYWRkKGlkLCBsYXllcik7
CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CisKICAgICBhc3Np
Z25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKIAog
ICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KQEAgLTIxMyw2ICsyNTIsNyBA
QCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcihXCiAKICAgICBsYXllci0+
cmVtb3ZlRnJvbVBhcmVudCgpOwogICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyAgICBt
X2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKICAgICBkZWxldGUgbGF5ZXI7CiB9CiAKQEAg
LTMxMSw2ICszNTEsOCBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3Bl
CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIHsKKyAg
ICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG1fcGVuZGluZ1JlbmRlcmVkQ29u
dGVudHNTY3JvbGxQb3NpdGlvbjsKKwogICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZShGbG9hdFJlY3QoKSk7CiAgICAgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKIApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgJKHJl
dmlzaW9uIDExMzY1OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgcGFp
bnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KTsKICAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1Np
emUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCBk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24p
OwogCiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25zdCBGdW5j
dGlvbjx2b2lkKCk+Jik7CkBAIC04MSw4ICs4MywxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQog
ICAgIHZvaWQgY2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2
b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxXZWJMYXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXplOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV92
aXNpYmxlQ29udGVudHNSZWN0OwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKIApAQCAtMTEx
LDcgKzExNSwxMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1Rv
RGVsZXRlOwogCiAgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgTGF5ZXJNYXAgbV9maXhlZExh
eWVyczsKICAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7CisgICAgV2ViQ29yZTo6SW50UG9p
bnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CisgICAgV2ViQ29yZTo6SW50UG9p
bnQgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwogfTsKIAogfTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcAkocmV2aXNpb24gMTEzNjU5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw5IEBAIHZv
aWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQogICAgIFFTaXplRiBzY2FsZWRT
aXplID0gY29udGVudHNTaXplICogY29udGVudHNTY2FsZTsKICAgICBxLT5zZXRTaXplKHNjYWxl
ZFNpemUpOwogICAgIHZpZXdwb3J0SXRlbS0+dXBkYXRlQ29udGVudHNTaXplKHNjYWxlZFNpemUp
OworICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3
aW5nQXJlYSgpOworICAgIGlmIChkcmF3aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVl
SG9zdFByb3h5KCkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKS0+
c2V0Q29udGVudHNTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShjb250ZW50c1NpemUud2lkdGgoKSwg
Y29udGVudHNTaXplLmhlaWdodCgpKSk7CiB9CiAKIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp+UVF1
aWNrV2ViUGFnZVByaXZhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCShyZXZp
c2lvbiAxMTM2NTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw3IEBAIFdl
YkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGgKICAgICA6IEdyYXBoaWNzTGF5
ZXIoY2xpZW50KQogICAgICwgbV9tYXNrVGFyZ2V0KDApCiAgICAgLCBtX2luVXBkYXRlTW9kZShm
YWxzZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9zaG91bGRVcGRh
dGVWaXNpYmxlUmVjdCh0cnVlKQogICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQog
ICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKQEAgLTM4Nyw2ICszODgsOCBAQCB2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0CiAgICAgaWYgKFdlYkdyYXBoaWNz
TGF5ZXIqIHJlcGxpY2EgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQogICAg
ICAgICByZXBsaWNhLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIAor
ICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0ZpeGVkTGF5ZXJzKCk7CisKICAgICBz
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKQEAgLTQxNSw2ICs0MTgsNyBAQCB2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAgICBpZiAoIW1fc2hvdWxk
U3luY0xheWVyU3RhdGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5bmNMYXllclN0
YXRlID0gZmFsc2U7CisgICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1Zp
ZXdwb3J0KCk7CiAKICAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7
CiAgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gMTEzNjU5KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsK
IH07CiB9CiAKQEAgLTExMCw2ICsxMTEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRTeW5jaHJv
bml6ZSgpOwogICAgIEltYWdlKiBpbWFnZSgpIHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KIAor
ICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvVmlld3Bv
cnQ7IH0KKyAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQpIHsgbV9maXhl
ZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9CisKICAgICBHcmFwaGljc0xheWVyKiBtYXNrVGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRNYXNrVGFyZ2V0
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKSB7IG1fbWFza1RhcmdldCA9IGxheWVyOyB9CiAKQEAgLTE1
MSw2ICsxNTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVj
dDogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0xheWVyU3RhdGU6IDE7CiAgICAgYm9vbCBtX3No
b3VsZFN5bmNDaGlsZHJlbjogMTsKKyAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKIAog
ICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
cmV2aXNpb24gMTEzNjU5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzUsNiArODM1LDggQEAgdm9pZCBXZWJQYWdl
OjpzZXRSZXNpemVzVG9Db250ZW50c1VzaW5nTAogICAgIC8vIEFsd2F5cyByZXNldCBldmVuIHdo
ZW4gZW1wdHkuCiAgICAgdmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKHRhcmdldExheW91dFNpemUp
OwogCisgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQodHJ1ZSk7CisKICAgICAvLyBTY2hlZHVsZSBhIGxheW91dCB0
byB1c2UgdGhlIG5ldyB0YXJnZXQgc2l6ZS4KICAgICBpZiAoIXZpZXctPmxheW91dFBlbmRpbmco
KSkgewogICAgICAgICB2aWV3LT5zZXROZWVkc0xheW91dCgpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5j
cHAJKHJldmlzaW9uIDExMzY1OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTYg
QEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNr
aW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjYsNiArNzEsNyBAQCBMYXllclRyZWVI
b3N0UXQ6OkxheWVyVHJlZUhvc3RRdChXZWJQYWdlCiAgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3MoZmFsc2UpCiAgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9jb250ZW50c1Nj
YWxlKDEpCisgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQogICAg
ICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIo
dHJ1ZSkKICAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UXQ6Omxh
eWVyRmx1c2hUaW1lckZpcmVkKQpAQCAtMjI4LDYgKzIzNCwxMCBAQCBib29sIExheWVyVHJlZUhv
c3RRdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzeW5jTGF5
ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGluZm8pCiB7CisgICAg
aWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAgICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSkpOworICAgICAgICBtX3Nob3Vs
ZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNlOworICAgIH0KICAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOwogfQpAQCAtMjU0
LDYgKzI2NCw1NCBAQCB2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGV0YWNoTGF5ZXIoV2ViR3JhCiAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlT2Zm
c2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCit7CisgICAg
Ly8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgorICAgIFJlbmRl
ckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CisgICAgaWYg
KCFiYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
ZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9u
ZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBG
aXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5y
ZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAgICBncmFwaGljc0xheWVyLT5z
ZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZy
b21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsKKworICAgIGlmIChyZW5k
ZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRG
b3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXIt
Pm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVy
KHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6
OnN5bmNGaXhlZExheWVycygpCit7CisgICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNl
dHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVj
dHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXll
ciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9y
KCktPnJvb3RSZW5kZXJMYXllcigpOworICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOworICAg
IGlmIChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0
RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworfQor
CiB2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogewog
ICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKQEAgLTQ0NSw2
ICs1MDMsOCBAQCB2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRzCiAgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7CiAgICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQo
KSkKICAgICAgICAgbV93ZWJQYWdlLT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyZWN0KTsK
KyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQorICAgICAgICBtX3Nob3VsZFNlbmRTY3Jv
bGxQb3NpdGlvblVwZGF0ZSA9IHRydWU7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpyZW5k
ZXJOZXh0RnJhbWUoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0
L0xheWVyVHJlZUhvc3RRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAkocmV2aXNpb24gMTEzNjU5KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciop
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKIAogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7CkBAIC0xMTMsNiArMTE0LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faXNTdXNwZW5kZWQ7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBt
X3Zpc2libGVDb250ZW50c1JlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJv
b2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CiAKICAgICBMYXllclRyZWVDb250
ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKICAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwo=
</data>
<flag name="commit-queue"
          id="141243"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>