<?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>72909</bug_id>
          
          <creation_ts>2011-11-21 13:35:27 -0800</creation_ts>
          <short_desc>[Chromium] Add method to WebViewImpl to extract zoom/scroll params for gesture events on touch devices</short_desc>
          <delta_ts>2012-02-16 21:34:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>0</everconfirmed>
          <reporter name="Varun Jain">varunjain</reporter>
          <assigned_to name="Varun Jain">varunjain</assigned_to>
          <cc>abarth</cc>
    
    <cc>aelias</cc>
    
    <cc>andreip</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>fsamuel</cc>
    
    <cc>jamesr</cc>
    
    <cc>johnme</cc>
    
    <cc>rjkroege</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>507178</commentid>
    <comment_count>0</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2011-11-21 13:35:27 -0800</bug_when>
    <thetext>[Chromium] Add method to WebViewImpl to extract zoom/scroll params for gesture events on touch devices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507179</commentid>
    <comment_count>1</comment_count>
      <attachid>116127</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2011-11-21 13:37:46 -0800</bug_when>
    <thetext>Created attachment 116127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507190</commentid>
    <comment_count>2</comment_count>
      <attachid>116128</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2011-11-21 13:52:52 -0800</bug_when>
    <thetext>Created attachment 116128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507196</commentid>
    <comment_count>3</comment_count>
      <attachid>116128</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 13:59:25 -0800</bug_when>
    <thetext>Comment on attachment 116128
Patch

Attachment 116128 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10475352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507296</commentid>
    <comment_count>4</comment_count>
      <attachid>116153</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2011-11-21 16:06:15 -0800</bug_when>
    <thetext>Created attachment 116153
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509456</commentid>
    <comment_count>5</comment_count>
      <attachid>116153</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-27 11:03:41 -0800</bug_when>
    <thetext>Comment on attachment 116153
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

this is a problem. there&apos;s a reasonable amount of non-trivial logic in here and it needs to be covered by some tests

&gt; Source/WebCore/platform/PlatformGestureEvent.h:59
&gt; +        , m_scale(0.0f)

we just say &apos;0&apos; for constants like this in WebKit. See http://www.webkit.org/coding/coding-style.html

&gt; Source/WebCore/platform/PlatformGestureEvent.h:85
&gt; +    void setDeltaX(float deltaX) { m_deltaX = deltaX; }
&gt; +    void setDeltaY(float deltaY) { m_deltaY = deltaY; }
&gt; +    void setScale(float scale) { m_scale = scale; }
&gt; +

this is somewhat weird - most of these PlatformXEvent types are wrappers around native events and only provide getters. where do we need to manipulate a PlatformGestureEvent directly?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:193
&gt; +static const float kMinDoubleTapZoomInRatio = 1.33f;
&gt; +static const float kMinScaleDifference = 0.01f;

trailing f&apos;s are not very useful here

where are these numbers coming from? can you add some comments indicating how these values were arrived at and what the process would be to change them?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:792
&gt; +    for (unsigned int  i = 0; i &lt; gestureEvents-&gt;size(); i++) {

double space here between &apos;int&apos; and &apos;i&apos;

we don&apos;t typically use &apos;unsigned int&apos; as a type for iteration. &apos;unsigned&apos; or size_t please

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:794
&gt; +            float scale = 1.f;

kill the .1f

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:816
&gt; +    IntPoint point = mainFrameImpl()-&gt;frameView()-&gt;windowToContents(WebCore::IntPoint(rect.x, rect.y));

the WebCore:: prefix isn&apos;t needed here

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:828
&gt; +        IntRect rect = node-&gt;Node::getRect(); // workaround ContainerNode::getRect transformation bug

what bug is this talking about? can you add a link to it and a FIXME?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:839
&gt; +      return 0.0f;

kill the .0f

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:843
&gt; +    minScale = std::max(minScale, (float) m_size.width / (contentSize.width / pageScaleFactor()));

drop the std::

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:848
&gt; +void WebViewImpl::getScaleAndScrollForHitRect(const WebRect&amp; hitRect, bool forDoubleTap, float* scale, WebPoint* scroll)

is it valid for &apos;scale&apos; to be NULL? if not can you make this a reference instead of a pointer?

same for scroll

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:865
&gt; +        const float minZoomInRatio = forDoubleTap ? kMinDoubleTapZoomInRatio : 1.0f;

.0f :(

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:875
&gt; +        *scale *= static_cast&lt;float&gt;(m_size.width) / rect.width;

are you sure this is the correct rounding?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:876
&gt; +        *scale = std::min(std::max(*scale, minScale), maxScale);

drop std::

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:910
&gt; +        rect.y = std::max((float) rect.y, hitRect.y + kTouchPointPadding - screenHeight);

drop std::

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:917
&gt; +        rect.x = std::max((float) rect.x, hitRect.x + kTouchPointPadding - screenWidth);

drop the std::. there&apos;s a using namespace std; at the top of this file

&gt; Source/WebKit/chromium/src/WebViewImpl.h:478
&gt; +    // Returns the bounding box of the block type node touched by the input
&gt; +    // point with the padding.
&gt; +    WebRect getBlockBounds(const WebRect&amp;, bool ignoreClipping);

we don&apos;t use the &apos;get&apos; prefix very much in WebKit. a more idomatic name for this might be &apos;calculateBlockBounds&apos;, or perhaps &apos;compute&apos; to be consistent with the following function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548854</commentid>
    <comment_count>6</comment_count>
      <attachid>125365</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-03 10:53:12 -0800</bug_when>
    <thetext>Created attachment 125365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548856</commentid>
    <comment_count>7</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-03 10:56:29 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=125365) [details]
&gt; Patch

Please hold off review... still working on writing tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548885</commentid>
    <comment_count>8</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-02-03 11:24:42 -0800</bug_when>
    <thetext>Andrei, John, could you take a look at this latest patch?  This upstreams code that you originally worked on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549867</commentid>
    <comment_count>9</comment_count>
      <attachid>125605</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 02:47:18 -0800</bug_when>
    <thetext>Created attachment 125605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549942</commentid>
    <comment_count>10</comment_count>
      <attachid>125605</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2012-02-06 06:11:54 -0800</bug_when>
    <thetext>Comment on attachment 125605
Patch

I only have some style nits:

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

&gt; Source/WebKit/chromium/ChangeLog:13
&gt; +        (WebKit::WebViewImpl::WidenRectWithinPageBounds):

any reason why this starts with a capital letter?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:818
&gt; +            PlatformGestureEvent&amp; oldPge = gestureEvents-&gt;at(i);

What&apos;s the &quot;old&quot; prefix meant to say?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:914
&gt; +void WebViewImpl::computeScaleAndScrollForHitRect(const WebRect&amp; hitRect, bool forDoubleTap, float&amp; scale, WebPoint&amp; scroll)

Here and in some other places: WebKit frowns on bool args. Can we use an enum?

https://lists.webkit.org/pipermail/webkit-dev/2010-December/015192.html

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:934
&gt; +        const float maxScale = deviceScaleFactor() * 1 /* font scale factor */;

Do we need the trailing comment?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:946
&gt; +            static_cast&lt;int&gt;(minimumMargin * rect.width / m_size.width));

Weird indent...should be 8 spaces I think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550016</commentid>
    <comment_count>11</comment_count>
      <attachid>125650</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 08:18:28 -0800</bug_when>
    <thetext>Created attachment 125650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550024</commentid>
    <comment_count>12</comment_count>
      <attachid>125654</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 08:31:25 -0800</bug_when>
    <thetext>Created attachment 125654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550027</commentid>
    <comment_count>13</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2012-02-06 08:36:09 -0800</bug_when>
    <thetext>LGTM

(In reply to comment #12)
&gt; Created an attachment (id=125654) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550037</commentid>
    <comment_count>14</comment_count>
      <attachid>125659</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 08:56:26 -0800</bug_when>
    <thetext>Created attachment 125659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550100</commentid>
    <comment_count>15</comment_count>
      <attachid>125659</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-06 10:55:50 -0800</bug_when>
    <thetext>Comment on attachment 125659
Patch

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

I thought that the WebKit gesture recognizer in chromium was deprecated and due to be deleted soon - I&apos;m very surprised to see new code using it. What&apos;s the story?

&gt; Source/WebCore/platform/PlatformGestureEvent.h:47
&gt; +    PlatformGestureEvent(Type type, const IntPoint&amp; position, const IntPoint&amp; globalPosition, double timestamp, float deltaX, float deltaY, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, float scale = 0.0f)

we don&apos;t use qualifiers like &quot;.0f&quot; in WebKit. See &quot;Floating point literals&quot; in http://www.webkit.org/coding/coding-style.html

what does it mean for a gesture event to have a scale? is this different from the page scale when the event happens?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:202
&gt; +static const float kDoubleTapZoomContentDefaultMargin = 5.0;
&gt; +static const float kDoubleTapZoomContentMinimumMargin = 2.0;

don&apos;t append the .0s here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550102</commentid>
    <comment_count>16</comment_count>
      <attachid>125659</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-06 10:57:21 -0800</bug_when>
    <thetext>Comment on attachment 125659
Patch

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

&gt; Source/WebKit/chromium/src/WebViewImpl.h:504
&gt; +    enum BoostedTextType {
&gt; +        NormalText,
&gt; +        BoostedText,
&gt; +    };

this looks like an unrelated change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550144</commentid>
    <comment_count>17</comment_count>
      <attachid>125679</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 11:41:36 -0800</bug_when>
    <thetext>Created attachment 125679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550147</commentid>
    <comment_count>18</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 11:43:37 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 125659 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125659&amp;action=review
&gt; 
&gt; I thought that the WebKit gesture recognizer in chromium was deprecated and due to be deleted soon - I&apos;m very surprised to see new code using it. What&apos;s the story?

You are correct.. I should be putting this under ENABLE(GESTURE_EVENTS) rather than GESTURE_RECOGNIZER. Fixed.


&gt; 
&gt; &gt; Source/WebCore/platform/PlatformGestureEvent.h:47
&gt; &gt; +    PlatformGestureEvent(Type type, const IntPoint&amp; position, const IntPoint&amp; globalPosition, double timestamp, float deltaX, float deltaY, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey, float scale = 0.0f)
&gt; 
&gt; we don&apos;t use qualifiers like &quot;.0f&quot; in WebKit. See &quot;Floating point literals&quot; in http://www.webkit.org/coding/coding-style.html

Done.

&gt; 
&gt; what does it mean for a gesture event to have a scale? is this different from the page scale when the event happens?

For certain gestures such as Double tap or pinch to zoom, one of the attributes is scale.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:202
&gt; &gt; +static const float kDoubleTapZoomContentDefaultMargin = 5.0;
&gt; &gt; +static const float kDoubleTapZoomContentMinimumMargin = 2.0;
&gt; 
&gt; don&apos;t append the .0s here

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550149</commentid>
    <comment_count>19</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 11:44:13 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 125659 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125659&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.h:504
&gt; &gt; +    enum BoostedTextType {
&gt; &gt; +        NormalText,
&gt; &gt; +        BoostedText,
&gt; &gt; +    };
&gt; 
&gt; this looks like an unrelated change

It is used in the computation of block bounds to zoom to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550278</commentid>
    <comment_count>20</comment_count>
      <attachid>125707</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 14:20:53 -0800</bug_when>
    <thetext>Created attachment 125707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550335</commentid>
    <comment_count>21</comment_count>
      <attachid>125707</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-02-06 15:15:03 -0800</bug_when>
    <thetext>Comment on attachment 125707
Patch

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

&gt; Source/WebCore/platform/PlatformGestureEvent.h:82
&gt; +    float m_scale;

I am concerned about this. startPageScaleAnimation (the ultimate target of what you&apos;re constructing) needs a point (existing field) and a scale (deltaX by convention)

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:632
&gt; +    if (event.type == WebInputEvent::GestureDoubleTap) {

I think this could be better. In particular, the end goal is for

if this WGE is a doubletap,
  compute the arguments needed for startPageScaleAnimation
  forward these arguments to the impl thread
else
  construct a PlatformGestureEvent and sent it to the EventHandler::handleGestureEvent

Since https://bugs.webkit.org/show_bug.cgi?id=77872 is still underway, this code for the time being should being construct a PlatformGestureEvent  as would be consumed by ScrollAnimatorNone::zoom

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:906
&gt; +void WebViewImpl::computeScaleAndScrollForHitRect(const WebRect&amp; hitRect, AutoZoomType zoomType, float&amp; scale, WebPoint&amp; scroll)

is there any way to make this whole function run on the impl thread? it would be a huge gain I think.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:994
&gt; +bool WebViewImpl::dispatchGestureEvent(PlatformGestureEvent&amp; pge)

because dispatchGestureEvent implies something specific in EventHandler, I&apos;d prefer a different name.

&gt; Source/WebKit/chromium/src/WebViewImpl.h:553
&gt; +    // Returns the bounding box of the block type node touched by the input

Aren&apos;t comments like these are atypical in WebCore? nit: need a period at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550367</commentid>
    <comment_count>22</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-02-06 15:47:35 -0800</bug_when>
    <thetext>I also have concerns about the event handling stuff, I think we should avoid adding fields of any kind to the event object.  I wrote more detailed comments at https://bugs.webkit.org/show_bug.cgi?id=77872 .  I think the event stuff could be removed from this CL and dealt with separately.

Another minor concern: the &quot;+ 12&quot; margin in the unit test seems too specific and brittle.  How about for things involving the margin, use EXPECT_NEAR(pageWidth / divWidth, scale, 0.1)?  That would be more robust to minor changes in the margin logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550373</commentid>
    <comment_count>23</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-02-06 15:52:27 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:906
&gt; &gt; +void WebViewImpl::computeScaleAndScrollForHitRect(const WebRect&amp; hitRect, AutoZoomType zoomType, float&amp; scale, WebPoint&amp; scroll)
&gt; 
&gt; is there any way to make this whole function run on the impl thread? it would be a huge gain I think.

Unfortunately, no.  The impl thread only knows about the layer tree, whereas this needs detailed information from the render tree.  We could precompute the rects and push it across the thread boundary, but this will be nontrivial to get right (Android browser did it and they spent a long time struggling with corner cases).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550394</commentid>
    <comment_count>24</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 16:20:52 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #21)
&gt; &gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:906
&gt; &gt; &gt; +void WebViewImpl::computeScaleAndScrollForHitRect(const WebRect&amp; hitRect, AutoZoomType zoomType, float&amp; scale, WebPoint&amp; scroll)
&gt; &gt; 
&gt; &gt; is there any way to make this whole function run on the impl thread? it would be a huge gain I think.
&gt; 
&gt; Unfortunately, no.  The impl thread only knows about the layer tree, whereas this needs detailed information from the render tree.  We could precompute the rects and push it across the thread boundary, but this will be nontrivial to get right (Android browser did it and they spent a long time struggling with corner cases).

Yes.. moving this to the impl thread would be very hard. We might be able to get everything but computeBlockBounds on to the impl thread but I think that would be useless because computeBlockBounds is the only expensive operation here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550424</commentid>
    <comment_count>25</comment_count>
      <attachid>125731</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 16:51:19 -0800</bug_when>
    <thetext>Created attachment 125731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550427</commentid>
    <comment_count>26</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-06 16:54:03 -0800</bug_when>
    <thetext>Hi All.... I have removed the gesture events related code from this CL. I think this code can be added in https://bugs.webkit.org/show_bug.cgi?id=77872 which actually adds support for the double tap gesture.
PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551299</commentid>
    <comment_count>27</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-07 13:26:08 -0800</bug_when>
    <thetext>ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551308</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-07 13:29:27 -0800</bug_when>
    <thetext>&gt; ping

https://lists.webkit.org/pipermail/webkit-dev/2012-January/019023.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551318</commentid>
    <comment_count>29</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-02-07 13:32:51 -0800</bug_when>
    <thetext>LGTM except the 12.0 number in the unit test I mentioned earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551327</commentid>
    <comment_count>30</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-07 13:45:18 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; LGTM except the 12.0 number in the unit test I mentioned earlier.

Hi Alexandre... the margins are all very well defined. The logic of including the margins is also deterministic. So I am not sure why the test would be brittle. Wouldnt it be better to have these parameters tested out exactly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551345</commentid>
    <comment_count>31</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-02-07 13:53:57 -0800</bug_when>
    <thetext>It&apos;s not a huge deal.  But personally, I prefer to avoid overspecific tests, particularly ones with nonobvious, semi-arbitrary parameters.  If someone made a minor change that changed the margin to e.g. 14.0, that&apos;s not necessarily incorrect and it&apos;s unnecessary for the test to go red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551402</commentid>
    <comment_count>32</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-07 14:37:08 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; It&apos;s not a huge deal.  But personally, I prefer to avoid overspecific tests, particularly ones with nonobvious, semi-arbitrary parameters.  If someone made a minor change that changed the margin to e.g. 14.0, that&apos;s not necessarily incorrect and it&apos;s unnecessary for the test to go red.

I think it is fair to require that legit changes to parameters also update the test. The test is there to protect against unrelated/unintentional changes. For example, it would be bad if the block bounds to zoom to are off by 5 pixels due to some unrelated CL.
I guess this is a matter of personal opinion.. I&apos;ll remove it if other also have hard feelings against :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552248</commentid>
    <comment_count>33</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-08 10:21:20 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; It&apos;s not a huge deal.  But personally, I prefer to avoid overspecific tests, particularly ones with nonobvious, semi-arbitrary parameters.  If someone made a minor change that changed the margin to e.g. 14.0, that&apos;s not necessarily incorrect and it&apos;s unnecessary for the test to go red.
&gt; 
&gt; I think it is fair to require that legit changes to parameters also update the test. The test is there to protect against unrelated/unintentional changes. For example, it would be bad if the block bounds to zoom to are off by 5 pixels due to some unrelated CL.
&gt; I guess this is a matter of personal opinion.. I&apos;ll remove it if other also have hard feelings against :)

@jamesr: I think everyone is ok with the current patch.. please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552316</commentid>
    <comment_count>34</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-02-08 11:20:40 -0800</bug_when>
    <thetext>This all looks good to me. 

varunjain@ could you add a bug for the changes needed to ::gestureEvent so that detail doesn&apos;t get overlooked?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552322</commentid>
    <comment_count>35</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-02-08 11:24:44 -0800</bug_when>
    <thetext>LGTM, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552335</commentid>
    <comment_count>36</comment_count>
      <attachid>125731</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-08 11:42:07 -0800</bug_when>
    <thetext>Comment on attachment 125731
Patch

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

I&apos;m glad you have tests.  However, there&apos;s a lot more logic here than tests and not all of it is very clear.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:202
&gt; +static const int kTouchPointPadding = 32;
&gt; +static const float kMinScaleDifference = 0.01;
&gt; +static const float kDoubleTapZoomContentDefaultMargin = 5;
&gt; +static const float kDoubleTapZoomContentMinimumMargin = 2;

this is incorrect naming style for WebKit - in WebKit, constants are named just like normal variables (no &quot;k&quot; prefix)

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:835
&gt; +    // Find the most boosted text node intersected by the hit test (if any).

this looks like a great candidate for being moved into its own function and tested separately

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:943
&gt; +        // Fit block to screen, respecting limits.
&gt; +        if (textType == NormalText)
&gt; +            scale = maxScale;
&gt; +        else {
&gt; +            scale *= static_cast&lt;float&gt;(m_size.width) / rect.width;
&gt; +            scale = min(scale, maxScale);
&gt; +        }

I&apos;m not sure why this logic makes sense - wouldn&apos;t you want to fix the block the same way no matter what the text size is?

I&apos;m also pretty sure this bit of logic is not covered by your tests.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:985
&gt; +        rect.x = max((float) rect.x, hitRect.x + kTouchPointPadding - screenWidth);

we never use c-style casts in webkit. use static_cast&lt;&gt; if you need to, or max&lt;float&gt;() to avoid it

&gt; Source/WebKit/chromium/tests/WebFrameTest.cpp:155
&gt; +TEST_F(WebFrameTest, DivAutoZoomParamsTest)

there&apos;s a lot more logic in WebViewImpl than there are test cases here. I can&apos;t find any tests for the logic to find the text with the largest font size, for example.

&gt; Source/WebKit/chromium/tests/WebFrameTest.cpp:184
&gt; +    EXPECT_FLOAT_EQ(pageWidth / (divWidth + 12.0 /* margin */), scale);

where does 12 come from? that&apos;s a pretty bizarre number to have in the middle of this test and I can&apos;t find it anywhere else</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554102</commentid>
    <comment_count>37</comment_count>
      <attachid>126521</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-10 09:13:30 -0800</bug_when>
    <thetext>Created attachment 126521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554109</commentid>
    <comment_count>38</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-10 09:19:14 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 125731 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125731&amp;action=review
&gt; 
&gt; I&apos;m glad you have tests.  However, there&apos;s a lot more logic here than tests and not all of it is very clear.

added more tests.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:202
&gt; &gt; +static const int kTouchPointPadding = 32;
&gt; &gt; +static const float kMinScaleDifference = 0.01;
&gt; &gt; +static const float kDoubleTapZoomContentDefaultMargin = 5;
&gt; &gt; +static const float kDoubleTapZoomContentMinimumMargin = 2;
&gt; 
&gt; this is incorrect naming style for WebKit - in WebKit, constants are named just like normal variables (no &quot;k&quot; prefix)

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:835
&gt; &gt; +    // Find the most boosted text node intersected by the hit test (if any).
&gt; 
&gt; this looks like a great candidate for being moved into its own function and tested separately

extracted it out to another function. But I want to keep it private, so I cannot test this separately. But it should not matter because the new tests I added cover all of this code.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:943
&gt; &gt; +        // Fit block to screen, respecting limits.
&gt; &gt; +        if (textType == NormalText)
&gt; &gt; +            scale = maxScale;
&gt; &gt; +        else {
&gt; &gt; +            scale *= static_cast&lt;float&gt;(m_size.width) / rect.width;
&gt; &gt; +            scale = min(scale, maxScale);
&gt; &gt; +        }
&gt; 
&gt; I&apos;m not sure why this logic makes sense - wouldn&apos;t you want to fix the block the same way no matter what the text size is?

I think the goal here is that if the hit rect contains a text node that has unscaled fonts then we want to zoom to device scale factor atleast so that we are guaranteed to get legible font size.
If the rect already contains boosted fonts then we simply zoom enough to bring the div width equal to page width.

&gt; 
&gt; I&apos;m also pretty sure this bit of logic is not covered by your tests.

Added tests to cover specifically this part.


&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:985
&gt; &gt; +        rect.x = max((float) rect.x, hitRect.x + kTouchPointPadding - screenWidth);
&gt; 
&gt; we never use c-style casts in webkit. use static_cast&lt;&gt; if you need to, or max&lt;float&gt;() to avoid it

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/tests/WebFrameTest.cpp:155
&gt; &gt; +TEST_F(WebFrameTest, DivAutoZoomParamsTest)
&gt; 
&gt; there&apos;s a lot more logic in WebViewImpl than there are test cases here. I can&apos;t find any tests for the logic to find the text with the largest font size, for example.

Added test.


&gt; 
&gt; &gt; Source/WebKit/chromium/tests/WebFrameTest.cpp:184
&gt; &gt; +    EXPECT_FLOAT_EQ(pageWidth / (divWidth + 12.0 /* margin */), scale);
&gt; 
&gt; where does 12 come from? that&apos;s a pretty bizarre number to have in the middle of this test and I can&apos;t find it anywhere else

Removed the margin and using EXPECT_NEAR as aelias suggested :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554113</commentid>
    <comment_count>39</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-10 09:23:20 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; This all looks good to me. 
&gt; 
&gt; varunjain@ could you add a bug for the changes needed to ::gestureEvent so that detail doesn&apos;t get overlooked?

created https://bugs.webkit.org/show_bug.cgi?id=78363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554128</commentid>
    <comment_count>40</comment_count>
      <attachid>126521</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-10 09:51:19 -0800</bug_when>
    <thetext>Comment on attachment 126521
Patch

Attachment 126521 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11447746</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554143</commentid>
    <comment_count>41</comment_count>
      <attachid>126531</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-10 10:17:25 -0800</bug_when>
    <thetext>Created attachment 126531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554146</commentid>
    <comment_count>42</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-10 10:18:25 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 126521 [details])
&gt; Attachment 126521 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/11447746

new patch fixes build failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556022</commentid>
    <comment_count>43</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-13 23:57:52 -0800</bug_when>
    <thetext>I&apos;m not sure how we plan to proceed with the font boosting code yet and would like to consult with some people first about what our plan is.  Without some idea of what the big picture is I don&apos;t feel comfortable approving bits and pieces of it.

If you think there&apos;s a useful subset of this patch without that feel free to post it and I&apos;d be happy to review.  Otherwise this will have to wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556033</commentid>
    <comment_count>44</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-14 00:07:04 -0800</bug_when>
    <thetext>We probably want to handle the font boosting related code separately.  It&apos;s likely going to need some reworking before we land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556401</commentid>
    <comment_count>45</comment_count>
      <attachid>126531</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-14 10:47:19 -0800</bug_when>
    <thetext>Comment on attachment 126531
Patch

Clearing review? flag from this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556515</commentid>
    <comment_count>46</comment_count>
      <attachid>127023</attachid>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-14 12:55:06 -0800</bug_when>
    <thetext>Created attachment 127023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556517</commentid>
    <comment_count>47</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-14 12:57:02 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; I&apos;m not sure how we plan to proceed with the font boosting code yet and would like to consult with some people first about what our plan is.  Without some idea of what the big picture is I don&apos;t feel comfortable approving bits and pieces of it.
&gt; 
&gt; If you think there&apos;s a useful subset of this patch without that feel free to post it and I&apos;d be happy to review.  Otherwise this will have to wait.

Hi James..
I have removed the font scaling related bits. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558290</commentid>
    <comment_count>48</comment_count>
    <who name="Varun Jain">varunjain</who>
    <bug_when>2012-02-16 10:03:02 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; (In reply to comment #43)
&gt; &gt; I&apos;m not sure how we plan to proceed with the font boosting code yet and would like to consult with some people first about what our plan is.  Without some idea of what the big picture is I don&apos;t feel comfortable approving bits and pieces of it.
&gt; &gt; 
&gt; &gt; If you think there&apos;s a useful subset of this patch without that feel free to post it and I&apos;d be happy to review.  Otherwise this will have to wait.
&gt; 
&gt; Hi James..
&gt; I have removed the font scaling related bits. PTAL.

@jamesr: friendly reminder.. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558837</commentid>
    <comment_count>49</comment_count>
      <attachid>127023</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-16 20:01:49 -0800</bug_when>
    <thetext>Comment on attachment 127023
Patch

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558891</commentid>
    <comment_count>50</comment_count>
      <attachid>127023</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-16 21:34:12 -0800</bug_when>
    <thetext>Comment on attachment 127023
Patch

Clearing flags on attachment: 127023

Committed r108027: &lt;http://trac.webkit.org/changeset/108027&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558892</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-16 21:34:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116127</attachid>
            <date>2011-11-21 13:37:46 -0800</date>
            <delta_ts>2011-11-21 13:52:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20111121163741.patch</filename>
            <type>text/plain</type>
            <size>11864</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk4YmU4OTQwOThkODJk
ZTdmZjI3Y2Y5ZmQ3MjhhNmY4NThlNDMwOC4uMzNiYjM3Mzg2MWVkOTBmYTk0ZmMyYWMyYzJlMTgy
YjUyOTUzNzRlOCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTExLTIxICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICog
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtR2VzdHVyZUV2ZW50OjpQbGF0Zm9ybUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUdlc3R1cmVFdmVudDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1HZXN0dXJlRXZlbnQ6OnNldERlbHRhWCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6c2V0RGVsdGFZKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVy
ZUV2ZW50OjpzZXRTY2FsZSk6CisKIDIwMTEtMTEtMTcgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZp
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIG9ubGluZURl
dGVjdGlvbkVuYWJsZWQgZnJvbSBQcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA4M2E2ZmQyM2FlODQ3ZTQzMTk1NzczZDdmMjI1NDczZTc0YmQ2M2EzLi4zNTIwZjRmNDY1
YWJhZjgxYTAwNGJlYzUxNGM3ZjAwMjA1MjMzOWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTExLTIxICBWYXJ1biBKYWluICA8dmFydW5qYWluQGdv
b2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQgbWV0aG9kIHRvIFdlYlZpZXdJbXBs
IHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBnZXN0dXJlIGV2ZW50cyBvbiB0b3Vj
aCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRv
dWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0QmxvY2tCb3VuZHMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0RHBpU2NhbGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZU92ZXJ2aWV3U2NhbGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZVNjYWxlV2l0aGluTGltaXRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmdldFNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdCk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTEtMTEtMTcgIFZzZXZvbG9kIFZsYXNvdiAgPHZz
ZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIG9ubGlu
ZURldGVjdGlvbkVuYWJsZWQgZnJvbSBQcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgKaW5kZXggODMzYzZhMzdhZGQ3Yjk3YzkwNzI4
OTdkMWY1MDEwMTAyYWE3OWY5MC4uMzRlOWFjNTRkNmUyZWJkYjBhMDk1NWQ3ZGQ3YjI1MDgwMTcz
MzZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJl
RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVu
dC5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3RpbWVzdGFtcCh0aW1l
c3RhbXApCiAgICAgICAgICwgbV9kZWx0YVgoZGVsdGFYKQogICAgICAgICAsIG1fZGVsdGFZKGRl
bHRhWSkKKyAgICAgICAgLCBtX3NjYWxlKDAuMGYpCiAgICAgICAgICwgbV9zaGlmdEtleShzaGlm
dEtleSkKICAgICAgICAgLCBtX2N0cmxLZXkoY3RybEtleSkKICAgICAgICAgLCBtX2FsdEtleShh
bHRLZXkpCkBAIC03MiwxMSArNzMsMTYgQEAgcHVibGljOgogCiAgICAgZmxvYXQgZGVsdGFYKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWx0YVg7IH0KICAgICBmbG9hdCBkZWx0YVkoKSBjb25zdCB7IHJl
dHVybiBtX2RlbHRhWTsgfQorICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2Fs
ZTsgfQogICAgIGJvb2wgc2hpZnRLZXkoKSBjb25zdCB7IHJldHVybiBtX3NoaWZ0S2V5OyB9CiAg
ICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9CiAgICAgYm9vbCBh
bHRLZXkoKSBjb25zdCB7IHJldHVybiBtX2FsdEtleTsgfQogICAgIGJvb2wgbWV0YUtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YUtleTsgfQogCisgICAgdm9pZCBzZXREZWx0YVgoZmxvYXQgZGVs
dGFYKSB7IG1fZGVsdGFYID0gZGVsdGFYOyB9CisgICAgdm9pZCBzZXREZWx0YVkoZmxvYXQgZGVs
dGFZKSB7IG1fZGVsdGFZID0gZGVsdGFZOyB9CisgICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2Fs
ZSkgeyBtX3NjYWxlID0gc2NhbGU7IH0KKwogcHJvdGVjdGVkOgogICAgIFR5cGUgbV90eXBlOwog
ICAgIEludFBvaW50IG1fcG9zaXRpb247CkBAIC04NCw2ICs5MCw3IEBAIHByb3RlY3RlZDoKICAg
ICBkb3VibGUgbV90aW1lc3RhbXA7CiAgICAgZmxvYXQgbV9kZWx0YVg7CiAgICAgZmxvYXQgbV9k
ZWx0YVk7CisgICAgZmxvYXQgbV9zY2FsZTsKICAgICBib29sIG1fc2hpZnRLZXk7CiAgICAgYm9v
bCBtX2N0cmxLZXk7CiAgICAgYm9vbCBtX2FsdEtleTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBiODc5OTVkZjA1MGViZjQwZjMyY2RlNmZmZmE4YmNi
ZjA1YWQ2OTgxLi43NzFkMmRkZmM2YTIyNzJmMTIzODNjYjQ5ZTgwNWExYTk5ODAwODg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xODgsNiArMTg4
LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbXBvc2l0b3JDb250ZXh0
QXR0cmlidXRlcygpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBp
bnQga1RvdWNoUG9pbnRQYWRkaW5nID0gMTY7CitzdGF0aWMgY29uc3QgZmxvYXQga01pbkRvdWJs
ZVRhcFpvb21JblJhdGlvID0gMS4zM2Y7CitzdGF0aWMgY29uc3QgZmxvYXQga01pblNjYWxlRGlm
ZmVyZW5jZSA9IDAuMDFmOworCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC03ODUsMTQgKzc4OSwxNTkgQEAgYm9vbCBXZWJWaWV3SW1wbDo6dG91Y2hF
dmVudChjb25zdCBXZWJUb3VjaEV2ZW50JiBldmVudCkKIAogI2lmIEVOQUJMRShHRVNUVVJFX1JF
Q09HTklaRVIpCiAgICAgT3duUHRyPFZlY3RvcjxXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVFdmVu
dD4gPiBnZXN0dXJlRXZlbnRzKG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2ZW50
Rm9yR2VzdHVyZXModG91Y2hFdmVudEJ1aWxkZXIsIGRlZmF1bHRQcmV2ZW50ZWQpKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGludCAgaSA9IDA7IGkgPCBnZXN0dXJlRXZlbnRzLT5zaXplKCk7IGkrKykK
KyAgICBmb3IgKHVuc2lnbmVkIGludCAgaSA9IDA7IGkgPCBnZXN0dXJlRXZlbnRzLT5zaXplKCk7
IGkrKykgeworICAgICAgICBpZiAoZ2VzdHVyZUV2ZW50cy0+YXQoaSkudHlwZSgpID09IFdlYkNv
cmU6OlBsYXRmb3JtR2VzdHVyZUV2ZW50OjpEb3VibGVUYXBUeXBlKSB7CisgICAgICAgICAgICBm
bG9hdCBzY2FsZSA9IDEuZjsKKyAgICAgICAgICAgIFdlYlBvaW50IHNjcm9sbDsKKyAgICAgICAg
ICAgIFdlYlJlY3QgaGl0UmVjdChnZXN0dXJlRXZlbnRzLT5hdChpKS5wb3NpdGlvbigpLngoKSwg
Z2VzdHVyZUV2ZW50cy0+YXQoaSkucG9zaXRpb24oKS55KCksIDAsIDApOworICAgICAgICAgICAg
Z2V0U2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGhpdFJlY3QsIHRydWUsICZzY2FsZSwgJnNjcm9s
bCk7CisgICAgICAgICAgICBnZXN0dXJlRXZlbnRzLT5hdChpKS5zZXRTY2FsZShzY2FsZSk7Cisg
ICAgICAgICAgICBnZXN0dXJlRXZlbnRzLT5hdChpKS5zZXREZWx0YVgoc2Nyb2xsLngpOworICAg
ICAgICAgICAgZ2VzdHVyZUV2ZW50cy0+YXQoaSkuc2V0RGVsdGFZKHNjcm9sbC55KTsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWYsICVmLCAlZlxuIiwgc2NhbGUsIHNjcm9sbC54LCBz
Y3JvbGwueSk7CisgICAgICAgIH0KICAgICAgICAgbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudHMtPmF0KGkpKTsK
KyAgICB9CiAjZW5kaWYKIAogICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOwogfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorV2ViUmVjdCBXZWJWaWV3SW1wbDo6
Z2V0QmxvY2tCb3VuZHMoY29uc3QgV2ViUmVjdCYgcmVjdCwgYm9vbCBpZ25vcmVDbGlwcGluZykK
K3sKKyAgICBpZiAoIW1haW5GcmFtZUltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYlJlY3QoKTsK
KyAgICAvLyBVc2UgdGhlIHJlY3QtYmFzZWQgaGl0IHRlc3QgdG8gZmluZCB0aGUgbm9kZS4KKyAg
ICBJbnRQb2ludCBwb2ludCA9IG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCktPndpbmRvd1Rv
Q29udGVudHMoV2ViQ29yZTo6SW50UG9pbnQocmVjdC54LCByZWN0LnkpKTsKKyAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdCA9IG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkt
PmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LAorICAgICAgICAgICAgZmFsc2UsIGlnbm9yZUNs
aXBwaW5nLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksCisgICAgICAgICAgICBJbnRTaXplKHJlY3Qud2lkdGgs
IHJlY3QuaGVpZ2h0KSk7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBXZWJSZWN0KCk7CisgICAgLy8g
RmluZCB0aGUgYmxvY2sgdHlwZSBub2RlIGJhc2VkIG9uIHRoZSBoaXQgbm9kZS4KKyAgICB3aGls
ZSAobm9kZSAmJiAoIW5vZGUtPnJlbmRlcmVyKCkgfHwgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxp
bmUoKSkpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgLy8gUmV0dXJu
IHRoZSBib3VuZGluZyBib3ggaW4gdGhlIHdpbmRvdyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBp
ZiAobm9kZSkgeworICAgICAgICBJbnRSZWN0IHJlY3QgPSBub2RlLT5Ob2RlOjpnZXRSZWN0KCk7
IC8vIHdvcmthcm91bmQgQ29udGFpbmVyTm9kZTo6Z2V0UmVjdCB0cmFuc2Zvcm1hdGlvbiBidWcK
KyAgICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAg
ICAgcmV0dXJuIGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgfQor
ICAgIHJldHVybiBXZWJSZWN0KCk7Cit9CisKK2Zsb2F0IFdlYlZpZXdJbXBsOjpnZXREcGlTY2Fs
ZSgpCit7CisgICAgLy8gRklYTUU6IGdldCByZWFsIERQSSBzY2FsZS4KKyAgICByZXR1cm4gMTsK
K30KKworZmxvYXQgV2ViVmlld0ltcGw6OmNvbXB1dGVPdmVydmlld1NjYWxlKCkKK3sKKyAgICBX
ZWJLaXQ6OldlYlNpemUgY29udGVudFNpemUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCk7
CisgICAgaWYgKGNvbnRlbnRTaXplLmlzRW1wdHkoKSB8fCBtX3NpemUuaXNFbXB0eSgpKQorICAg
ICAgcmV0dXJuIDAuMGY7CisKKyAgICBmbG9hdCBtaW5TY2FsZSA9IG1fbWluaW11bVBhZ2VTY2Fs
ZUZhY3RvciAqIGdldERwaVNjYWxlKCk7CisgICAgLy8gQWxzbyBib3VuZCB6b29tLW91dCB0byBu
b3QgYmUgbGFyZ2VyIHRoYW4gdGhlIGRvY3VtZW50IHNpemUuCisgICAgbWluU2NhbGUgPSBzdGQ6
Om1heChtaW5TY2FsZSwgKGZsb2F0KSBtX3NpemUud2lkdGggLyAoY29udGVudFNpemUud2lkdGgg
LyBwYWdlU2NhbGVGYWN0b3IoKSkpOworCisgICAgcmV0dXJuIG1pblNjYWxlOworfQorCitmbG9h
dCBXZWJWaWV3SW1wbDo6Y29tcHV0ZVNjYWxlV2l0aGluTGltaXRzKGZsb2F0IHNjYWxlKQorewor
ICAgIGZsb2F0IGRwaVNjYWxlID0gZ2V0RHBpU2NhbGUoKTsKKyAgICBmbG9hdCBtaW5TY2FsZSA9
IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciAqIGRwaVNjYWxlOworICAgIGZsb2F0IG1heFNjYWxl
ID0gbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yICogZHBpU2NhbGU7CisKKyAgICAvLyBBbHNvIGJv
dW5kIHpvb20tb3V0IHRvIG5vdCBiZSBsYXJnZXIgdGhhbiB0aGUgZG9jdW1lbnQgc2l6ZS4KKyAg
ICBXZWJLaXQ6OldlYlNpemUgY29udGVudFNpemUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXpl
KCk7CisgICAgaWYgKCFjb250ZW50U2l6ZS5pc0VtcHR5KCkgJiYgIW1fc2l6ZS5pc0VtcHR5KCkp
CisgICAgICAgIG1pblNjYWxlID0gc3RkOjptYXgobWluU2NhbGUsIChmbG9hdCkgbV9zaXplLndp
ZHRoIC8gKGNvbnRlbnRTaXplLndpZHRoIC8gcGFnZVNjYWxlRmFjdG9yKCkpKTsKKworICAgIHJl
dHVybiBzdGQ6Om1pbihzdGQ6Om1heChzY2FsZSwgbWluU2NhbGUpLCBtYXhTY2FsZSk7Cit9CisK
K3ZvaWQgV2ViVmlld0ltcGw6OmdldFNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChjb25zdCBXZWJS
ZWN0JiBoaXRSZWN0LCBib29sIGZvckRvdWJsZVRhcCwgZmxvYXQqIHNjYWxlLCBXZWJQb2ludCog
c2Nyb2xsKQoreworICAgICpzY2FsZSA9IHBhZ2VTY2FsZUZhY3RvcigpOworICAgIHNjcm9sbC0+
eCA9IHNjcm9sbC0+eSA9IDA7CisgICAgV2ViUmVjdCB0YXJnZXRSZWN0ID0gaGl0UmVjdDsKKyAg
ICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHRhcmdldFJlY3Qud2lkdGggPSB0
YXJnZXRSZWN0LmhlaWdodCA9IGtUb3VjaFBvaW50UGFkZGluZzsKKworICAgIFdlYlJlY3QgcmVj
dCA9IGdldEJsb2NrQm91bmRzKHRhcmdldFJlY3QsICFmb3JEb3VibGVUYXApOworCisgICAgY29u
c3QgZmxvYXQgb3ZlcnZpZXdTY2FsZSA9IGNvbXB1dGVPdmVydmlld1NjYWxlKCk7CisgICAgYm9v
bCBzY2FsZVVuY2hhbmdlZCA9IHRydWU7CisgICAgZmxvYXQgZHBpU2NhbGUgPSBnZXREcGlTY2Fs
ZSgpOworICAgIGlmICghcmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhlIG1pbmltdW0g
em9vbSBpbiBsaW1pdCBpcyB0byBtYWtlIHN1cmUgZG91YmxlLXRhcHBpbmcKKyAgICAgICAgLy8g
YWx3YXlzIHpvb21zIGluIGEgYml0LCBldmVuIG9uIG1vYmlsZSBzaXRlcyAvIHdoZW4gb24gdGFi
bGV0LAorICAgICAgICAvLyBhbmQgd2hlbiB0YXBwaW5nIG9uIGZ1bGwtd2lkdGggZGl2cy4KKyAg
ICAgICAgY29uc3QgZmxvYXQgbWluWm9vbUluUmF0aW8gPSBmb3JEb3VibGVUYXAgPyBrTWluRG91
YmxlVGFwWm9vbUluUmF0aW8gOiAxLjBmOworICAgICAgICBjb25zdCBmbG9hdCBtaW5TY2FsZSA9
IG92ZXJ2aWV3U2NhbGUgKiBtaW5ab29tSW5SYXRpbzsKKworICAgICAgICAvLyBQYWdlcyBzaG91
bGQgYmUgYXMgbGVnaWJsZSBhcyBvbiBkZXNrdG9wIHdoZW4gYXQgZHBpX3NjYWxlXywgc28gbm8K
KyAgICAgICAgLy8gbmVlZCB0byB6b29tIGluIGZ1cnRoZXIgd2hlbiBhdXRvbWF0aWNhbGx5IGRl
dGVybWluaW5nIHpvb20gbGV2ZWwKKyAgICAgICAgLy8gKGFmdGVyIGRvdWJsZSB0YXAsIGZpbmQg
aW4gcGFnZSwgZXRjKSwgdGhvdWdoIHRoZSB1c2VyIHNob3VsZCBzdGlsbAorICAgICAgICAvLyBi
ZSBhbGxvd2VkIHRvIG1hbnVhbGx5IHBpbmNoIHpvb20gaW4gZnVydGhlciBpZiB0aGV5IGRlc2ly
ZS4KKyAgICAgICAgY29uc3QgZmxvYXQgbWF4U2NhbGUgPSBzdGQ6Om1heChtaW5TY2FsZSwgZHBp
U2NhbGUpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0byBzY3JlZW4sIHJlc3BlY3RpbmcgbGlt
aXRzLgorICAgICAgICAqc2NhbGUgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS53aWR0aCkg
LyByZWN0LndpZHRoOworICAgICAgICAqc2NhbGUgPSBzdGQ6Om1pbihzdGQ6Om1heCgqc2NhbGUs
IG1pblNjYWxlKSwgbWF4U2NhbGUpOworICAgICAgICAqc2NhbGUgPSBjb21wdXRlU2NhbGVXaXRo
aW5MaW1pdHMoKnNjYWxlKTsKKworICAgICAgICBzY2FsZVVuY2hhbmdlZCA9IGZhYnMocGFnZVNj
YWxlRmFjdG9yKCkgLSAqc2NhbGUpIDwga01pblNjYWxlRGlmZmVyZW5jZTsKKyAgICB9CisKKyAg
ICBpZiAoZm9yRG91YmxlVGFwKSB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBzY2Fs
ZVVuY2hhbmdlZCkgeworICAgICAgICAgICAgLy8gWm9vbSBvdXQgdG8gb3ZlcnZpZXcgbW9kZS4K
KyAgICAgICAgICAgIGlmIChvdmVydmlld1NjYWxlKQorICAgICAgICAgICAgICAgICpzY2FsZSA9
IG92ZXJ2aWV3U2NhbGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEtlZXAgY3VycmVudCBzY2FsZSAo
bm8gbmVlZCB0byBzY3JvbGwgYXMgeCx5IHdpbGwgbm9ybWFsbHkgYWxyZWFkeQorICAgICAgICAv
LyBiZSB2aXNpYmxlKS4gRklYTUU6IFJldmlzaXQgdGhpcyBpZiBpdCBpc24ndCBhbHdheXMgdHJ1
ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGJl
aW5nIGNhbGxlZCBmb3IgYXV0byB6b29tIGR1cmluZyBmaW5kIGluIHBhZ2UsCisgICAgLy8gdGhl
biBpZiB0aGUgdXNlciBtYW51YWxseSB6b29tcyBpbiBpdCdkIGJlIG5pY2UgdG8gcHJlc2VydmUg
dGhlIHJlbGF0aXZlCisgICAgLy8gaW5jcmVhc2UgaW4gem9vbSB0aGV5IGNhdXNlZCAoaWYgdGhl
eSB6b29tIG91dCB0aGVuIGl0J3Mgb2sgdG8gem9vbQorICAgIC8vIHRoZW0gYmFjayBpbiBhZ2Fp
bikuIFRoaXMgaXNuJ3QgY29tcGF0aWJsZSB3aXRoIG91ciBjdXJyZW50IGRvdWJsZS10YXAgem9v
bQorICAgIC8vIHN0cmF0ZWd5IChmaXR0aW5nIHRoZSBjb250YWluaW5nIGJsb2NrIHRvIHRoZSBz
Y3JlZW4pIHRob3VnaC4KKworICAgIGZsb2F0IHNjcmVlbkhlaWdodCA9IG1fc2l6ZS5oZWlnaHQg
LyAqc2NhbGUgKiBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBzY3JlZW5XaWR0aCA9IG1f
c2l6ZS53aWR0aCAvICpzY2FsZSAqIHBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgLy8gU2Nyb2xs
IHRvIHZlcnRpY2FsbHkgYWxpZ24gdGhlIGJsb2NrLgorICAgIGlmIChyZWN0LmhlaWdodCA8IHNj
cmVlbkhlaWdodCkgeworICAgICAgICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBzaG9ydCBibG9ja3Mu
CisgICAgICAgIHJlY3QueSAtPSAwLjUgKiAoc2NyZWVuSGVpZ2h0IC0gcmVjdC5oZWlnaHQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEVuc3VyZSBwb3NpdGlvbiB3ZSdyZSB6b29taW5nIHRv
ICgrIHBhZGRpbmcpIGlzbid0IG9mZiBib3R0b20gb2Ygc2NyZWVuLgorICAgICAgICByZWN0Lnkg
PSBzdGQ6Om1heCgoZmxvYXQpIHJlY3QueSwgaGl0UmVjdC55ICsga1RvdWNoUG9pbnRQYWRkaW5n
IC0gc2NyZWVuSGVpZ2h0KTsKKyAgICB9IC8vIE90aGVyd2lzZSB0b3AgYWxpZ24gdGhlIGJsb2Nr
LgorCisgICAgLy8gRG8gdGhlIHNhbWUgdGhpbmcgZm9yIGhvcml6b250YWwgYWxpZ25tZW50Lgor
ICAgIGlmIChyZWN0LndpZHRoIDwgc2NyZWVuV2lkdGgpCisgICAgICAgIHJlY3QueCAtPSAwLjUg
KiAoc2NyZWVuV2lkdGggLSByZWN0LndpZHRoKTsKKyAgICBlbHNlCisgICAgICAgIHJlY3QueCA9
IHN0ZDo6bWF4KChmbG9hdCkgcmVjdC54LCBoaXRSZWN0LnggKyBrVG91Y2hQb2ludFBhZGRpbmcg
LSBzY3JlZW5XaWR0aCk7CisKKyAgICBzY3JvbGwtPnggPSByZWN0Lng7CisgICAgc2Nyb2xsLT55
ID0gcmVjdC55OworfQorI2VuZGlmCisKIHZvaWQgV2ViVmlld0ltcGw6Om51bWJlck9mV2hlZWxF
dmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCBudW1iZXJPZldoZWVsSGFuZGxlcnMpCiB7CiAg
ICAgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzID0gbnVtYmVyT2ZXaGVlbEhhbmRsZXJzID4gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGFkY2I4MmYxYjRk
NmI0MjJjMjZiMzUzNmYzNjk5MzJlN2U1ZDcxYTAuLjNjNWMyOGU4ZGZkYTdiNzNkOGRhMGZmODEy
N2MwMDJmMmM1OTBjMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aApAQCAtNDcxLDYgKzQ3MSwyNCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmVl
Vmlld3BvcnQoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKKwor
ICAgIC8vIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgYmxvY2sgdHlwZSBub2RlIHRv
dWNoZWQgYnkgdGhlIGlucHV0CisgICAgLy8gcG9pbnQgd2l0aCB0aGUgcGFkZGluZy4KKyAgICBX
ZWJSZWN0IGdldEJsb2NrQm91bmRzKGNvbnN0IFdlYlJlY3QmLCBib29sIGlnbm9yZUNsaXBwaW5n
KTsKKworICAgIC8vIEdldCBjdXJyZW50IERQSSBzY2FsZS4KKyAgICBmbG9hdCBnZXREcGlTY2Fs
ZSgpOworCisgICAgLy8gR2V0IHRoZSBzY2FsZSB3aGVuIHRoZSBkb2N1bWVudCBpcyBmdWxseSB6
b29tZWQgb3V0IChtaW5pbXVtIHNjYWxlKS4KKyAgICBmbG9hdCBjb21wdXRlT3ZlcnZpZXdTY2Fs
ZSgpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgc2NhbGUgd2l0aGluIG1pbi9tYXggbGltaXRzLgor
ICAgIGZsb2F0IGNvbXB1dGVTY2FsZVdpdGhpbkxpbWl0cyhmbG9hdCBzY2FsZSk7CisKKyAgICB2
b2lkIGdldFNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChjb25zdCBXZWJSZWN0JiBoaXRSZWN0LCBi
b29sIGZvckRvdWJsZVRhcCwgZmxvYXQqIHNjYWxlLCBXZWJQb2ludCogc2Nyb2xsKTsKKyNlbmRp
ZgorCiAgICAgV2ViVmlld0NsaWVudCogbV9jbGllbnQ7CiAgICAgV2ViQXV0b2ZpbGxDbGllbnQq
IG1fYXV0b2ZpbGxDbGllbnQ7CiAgICAgV2ViUGVybWlzc2lvbkNsaWVudCogbV9wZXJtaXNzaW9u
Q2xpZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116128</attachid>
            <date>2011-11-21 13:52:52 -0800</date>
            <delta_ts>2011-11-21 16:06:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20111121165247.patch</filename>
            <type>text/plain</type>
            <size>10956</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk4YmU4OTQwOThkODJk
ZTdmZjI3Y2Y5ZmQ3MjhhNmY4NThlNDMwOC4uMzNiYjM3Mzg2MWVkOTBmYTk0ZmMyYWMyYzJlMTgy
YjUyOTUzNzRlOCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTExLTIxICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICog
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtR2VzdHVyZUV2ZW50OjpQbGF0Zm9ybUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUdlc3R1cmVFdmVudDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1HZXN0dXJlRXZlbnQ6OnNldERlbHRhWCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6c2V0RGVsdGFZKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVy
ZUV2ZW50OjpzZXRTY2FsZSk6CisKIDIwMTEtMTEtMTcgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZp
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIG9ubGluZURl
dGVjdGlvbkVuYWJsZWQgZnJvbSBQcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA4M2E2ZmQyM2FlODQ3ZTQzMTk1NzczZDdmMjI1NDczZTc0YmQ2M2EzLi40NWU2NDc5MjEw
YmE5ZDY1MzdmMTM1OGZhNDBiMTRmNjBiNWExNmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTExLTIxICBWYXJ1biBKYWluICA8dmFydW5qYWluQGdv
b2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQgbWV0aG9kIHRvIFdlYlZpZXdJbXBs
IHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBnZXN0dXJlIGV2ZW50cyBvbiB0b3Vj
aCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRv
dWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0QmxvY2tCb3VuZHMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZU92ZXJ2aWV3U2NhbGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0U2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0xMS0xNyAgVnNldm9sb2Qg
Vmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZW1vdmUgb25saW5lRGV0ZWN0aW9uRW5hYmxlZCBmcm9tIFByZWZlcmVuY2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaAppbmRleCA4MzNjNmEzN2Fk
ZDdiOTdjOTA3Mjg5N2QxZjUwMTAxMDJhYTc5ZjkwLi4zNGU5YWM1NGQ2ZTJlYmRiMGEwOTU1ZDdk
ZDdiMjUwODAxNzMzNmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybUdlc3R1cmVFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZUV2ZW50LmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fdGlt
ZXN0YW1wKHRpbWVzdGFtcCkKICAgICAgICAgLCBtX2RlbHRhWChkZWx0YVgpCiAgICAgICAgICwg
bV9kZWx0YVkoZGVsdGFZKQorICAgICAgICAsIG1fc2NhbGUoMC4wZikKICAgICAgICAgLCBtX3No
aWZ0S2V5KHNoaWZ0S2V5KQogICAgICAgICAsIG1fY3RybEtleShjdHJsS2V5KQogICAgICAgICAs
IG1fYWx0S2V5KGFsdEtleSkKQEAgLTcyLDExICs3MywxNiBAQCBwdWJsaWM6CiAKICAgICBmbG9h
dCBkZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWDsgfQogICAgIGZsb2F0IGRlbHRhWSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVsdGFZOyB9CisgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzaGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hp
ZnRLZXk7IH0KICAgICBib29sIGN0cmxLZXkoKSBjb25zdCB7IHJldHVybiBtX2N0cmxLZXk7IH0K
ICAgICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9CiAgICAgYm9vbCBt
ZXRhS2V5KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9CiAKKyAgICB2b2lkIHNldERlbHRh
WChmbG9hdCBkZWx0YVgpIHsgbV9kZWx0YVggPSBkZWx0YVg7IH0KKyAgICB2b2lkIHNldERlbHRh
WShmbG9hdCBkZWx0YVkpIHsgbV9kZWx0YVkgPSBkZWx0YVk7IH0KKyAgICB2b2lkIHNldFNjYWxl
KGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2FsZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVHlw
ZSBtX3R5cGU7CiAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKQEAgLTg0LDYgKzkwLDcgQEAgcHJv
dGVjdGVkOgogICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsKICAgICBmbG9hdCBtX2RlbHRhWDsKICAg
ICBmbG9hdCBtX2RlbHRhWTsKKyAgICBmbG9hdCBtX3NjYWxlOwogICAgIGJvb2wgbV9zaGlmdEtl
eTsKICAgICBib29sIG1fY3RybEtleTsKICAgICBib29sIG1fYWx0S2V5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGI4Nzk5NWRmMDUwZWJmNDBmMzJj
ZGU2ZmZmYThiY2JmMDVhZDY5ODEuLmVhNDM2Yzg0YmI5ZDRhNDJhYWU2YWM4MWYzODMxZTRjNTlh
ZmJlODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAg
LTE4OCw2ICsxODgsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ2V0Q29tcG9z
aXRvckNvbnRleHRBdHRyaWJ1dGVzKCkKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAorc3Rh
dGljIGNvbnN0IGludCBrVG91Y2hQb2ludFBhZGRpbmcgPSAxNjsKK3N0YXRpYyBjb25zdCBmbG9h
dCBrTWluRG91YmxlVGFwWm9vbUluUmF0aW8gPSAxLjMzZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBr
TWluU2NhbGVEaWZmZXJlbmNlID0gMC4wMWY7CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTc4NSwxNCArNzg5LDEzOSBAQCBib29sIFdlYlZpZXdJ
bXBsOjp0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmIGV2ZW50KQogCiAjaWYgRU5BQkxF
KEdFU1RVUkVfUkVDT0dOSVpFUikKICAgICBPd25QdHI8VmVjdG9yPFdlYkNvcmU6OlBsYXRmb3Jt
R2VzdHVyZUV2ZW50PiA+IGdlc3R1cmVFdmVudHMobV9nZXN0dXJlUmVjb2duaXplci0+cHJvY2Vz
c1RvdWNoRXZlbnRGb3JHZXN0dXJlcyh0b3VjaEV2ZW50QnVpbGRlciwgZGVmYXVsdFByZXZlbnRl
ZCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ICBpID0gMDsgaSA8IGdlc3R1cmVFdmVudHMtPnNp
emUoKTsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaW50ICBpID0gMDsgaSA8IGdlc3R1cmVFdmVu
dHMtPnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChnZXN0dXJlRXZlbnRzLT5hdChpKS50eXBl
KCkgPT0gV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlRXZlbnQ6OkRvdWJsZVRhcFR5cGUpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHNjYWxlID0gMS5mOworICAgICAgICAgICAgV2ViUG9pbnQgc2Nyb2xs
OworICAgICAgICAgICAgV2ViUmVjdCBoaXRSZWN0KGdlc3R1cmVFdmVudHMtPmF0KGkpLnBvc2l0
aW9uKCkueCgpLCBnZXN0dXJlRXZlbnRzLT5hdChpKS5wb3NpdGlvbigpLnkoKSwgMCwgMCk7Cisg
ICAgICAgICAgICBnZXRTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoaGl0UmVjdCwgdHJ1ZSwgJnNj
YWxlLCAmc2Nyb2xsKTsKKyAgICAgICAgICAgIGdlc3R1cmVFdmVudHMtPmF0KGkpLnNldFNjYWxl
KHNjYWxlKTsKKyAgICAgICAgICAgIGdlc3R1cmVFdmVudHMtPmF0KGkpLnNldERlbHRhWChzY3Jv
bGwueCk7CisgICAgICAgICAgICBnZXN0dXJlRXZlbnRzLT5hdChpKS5zZXREZWx0YVkoc2Nyb2xs
LnkpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlZiwgJWYsICVmXG4iLCBzY2FsZSwg
c2Nyb2xsLngsIHNjcm9sbC55KTsKKyAgICAgICAgfQogICAgICAgICBtYWluRnJhbWVJbXBsKCkt
PmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50
cy0+YXQoaSkpOworICAgIH0KICNlbmRpZgogCiAgICAgcmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7
CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCitXZWJSZWN0IFdl
YlZpZXdJbXBsOjpnZXRCbG9ja0JvdW5kcyhjb25zdCBXZWJSZWN0JiByZWN0LCBib29sIGlnbm9y
ZUNsaXBwaW5nKQoreworICAgIGlmICghbWFpbkZyYW1lSW1wbCgpKQorICAgICAgICByZXR1cm4g
V2ViUmVjdCgpOworICAgIC8vIFVzZSB0aGUgcmVjdC1iYXNlZCBoaXQgdGVzdCB0byBmaW5kIHRo
ZSBub2RlLgorICAgIEludFBvaW50IHBvaW50ID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXco
KS0+d2luZG93VG9Db250ZW50cyhXZWJDb3JlOjpJbnRQb2ludChyZWN0LngsIHJlY3QueSkpOwor
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVu
dEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsCisgICAgICAgICAgICBmYWxz
ZSwgaWdub3JlQ2xpcHBpbmcsIERvbnRIaXRUZXN0U2Nyb2xsYmFycywgSGl0VGVzdFJlcXVlc3Q6
OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSwKKyAgICAgICAgICAgIEludFNpemUo
cmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpKTsKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIFdlYlJlY3Qo
KTsKKyAgICAvLyBGaW5kIHRoZSBibG9jayB0eXBlIG5vZGUgYmFzZWQgb24gdGhlIGhpdCBub2Rl
LgorICAgIHdoaWxlIChub2RlICYmICghbm9kZS0+cmVuZGVyZXIoKSB8fCBub2RlLT5yZW5kZXJl
cigpLT5pc0lubGluZSgpKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAg
ICAvLyBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCBpbiB0aGUgd2luZG93IGNvb3JkaW5hdGUgc3lz
dGVtLgorICAgIGlmIChub2RlKSB7CisgICAgICAgIEludFJlY3QgcmVjdCA9IG5vZGUtPk5vZGU6
OmdldFJlY3QoKTsgLy8gd29ya2Fyb3VuZCBDb250YWluZXJOb2RlOjpnZXRSZWN0IHRyYW5zZm9y
bWF0aW9uIGJ1ZworICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgICAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0
KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYlJlY3QoKTsKK30KKworZmxvYXQgV2ViVmlld0ltcGw6
OmNvbXB1dGVPdmVydmlld1NjYWxlKCkKK3sKKyAgICBXZWJLaXQ6OldlYlNpemUgY29udGVudFNp
emUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCk7CisgICAgaWYgKGNvbnRlbnRTaXplLmlz
RW1wdHkoKSB8fCBtX3NpemUuaXNFbXB0eSgpKQorICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBm
bG9hdCBtaW5TY2FsZSA9IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciAqIGRldmljZVNjYWxlRmFj
dG9yKCk7CisgICAgLy8gQWxzbyBib3VuZCB6b29tLW91dCB0byBub3QgYmUgbGFyZ2VyIHRoYW4g
dGhlIGRvY3VtZW50IHNpemUuCisgICAgbWluU2NhbGUgPSBzdGQ6Om1heChtaW5TY2FsZSwgKGZs
b2F0KSBtX3NpemUud2lkdGggLyAoY29udGVudFNpemUud2lkdGggLyBwYWdlU2NhbGVGYWN0b3Io
KSkpOworCisgICAgcmV0dXJuIG1pblNjYWxlOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpnZXRT
Y2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0UmVjdCwgYm9vbCBmb3JE
b3VibGVUYXAsIGZsb2F0KiBzY2FsZSwgV2ViUG9pbnQqIHNjcm9sbCkKK3sKKyAgICAqc2NhbGUg
PSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBzY3JvbGwtPnggPSBzY3JvbGwtPnkgPSAwOworICAg
IFdlYlJlY3QgdGFyZ2V0UmVjdCA9IGhpdFJlY3Q7CisgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICB0YXJnZXRSZWN0LndpZHRoID0gdGFyZ2V0UmVjdC5oZWlnaHQgPSBrVG91
Y2hQb2ludFBhZGRpbmc7CisKKyAgICBXZWJSZWN0IHJlY3QgPSBnZXRCbG9ja0JvdW5kcyh0YXJn
ZXRSZWN0LCAhZm9yRG91YmxlVGFwKTsKKworICAgIGNvbnN0IGZsb2F0IG92ZXJ2aWV3U2NhbGUg
PSBjb21wdXRlT3ZlcnZpZXdTY2FsZSgpOworICAgIGJvb2wgc2NhbGVVbmNoYW5nZWQgPSB0cnVl
OworICAgIGZsb2F0IGRwaVNjYWxlID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBpZiAoIXJl
Y3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFRoZSBtaW5pbXVtIHpvb20gaW4gbGltaXQgaXMg
dG8gbWFrZSBzdXJlIGRvdWJsZS10YXBwaW5nCisgICAgICAgIC8vIGFsd2F5cyB6b29tcyBpbiBh
IGJpdCwgZXZlbiBvbiBtb2JpbGUgc2l0ZXMgLyB3aGVuIG9uIHRhYmxldCwKKyAgICAgICAgLy8g
YW5kIHdoZW4gdGFwcGluZyBvbiBmdWxsLXdpZHRoIGRpdnMuCisgICAgICAgIGNvbnN0IGZsb2F0
IG1pblpvb21JblJhdGlvID0gZm9yRG91YmxlVGFwID8ga01pbkRvdWJsZVRhcFpvb21JblJhdGlv
IDogMS4wZjsKKyAgICAgICAgY29uc3QgZmxvYXQgbWluU2NhbGUgPSBvdmVydmlld1NjYWxlICog
bWluWm9vbUluUmF0aW87CisKKyAgICAgICAgLy8gUGFnZXMgc2hvdWxkIGJlIGFzIGxlZ2libGUg
YXMgb24gZGVza3RvcCB3aGVuIGF0IGRwaV9zY2FsZV8sIHNvIG5vCisgICAgICAgIC8vIG5lZWQg
dG8gem9vbSBpbiBmdXJ0aGVyIHdoZW4gYXV0b21hdGljYWxseSBkZXRlcm1pbmluZyB6b29tIGxl
dmVsCisgICAgICAgIC8vIChhZnRlciBkb3VibGUgdGFwLCBmaW5kIGluIHBhZ2UsIGV0YyksIHRo
b3VnaCB0aGUgdXNlciBzaG91bGQgc3RpbGwKKyAgICAgICAgLy8gYmUgYWxsb3dlZCB0byBtYW51
YWxseSBwaW5jaCB6b29tIGluIGZ1cnRoZXIgaWYgdGhleSBkZXNpcmUuCisgICAgICAgIGNvbnN0
IGZsb2F0IG1heFNjYWxlID0gc3RkOjptYXgobWluU2NhbGUsIGRwaVNjYWxlKTsKKworICAgICAg
ICAvLyBGaXQgYmxvY2sgdG8gc2NyZWVuLCByZXNwZWN0aW5nIGxpbWl0cy4KKyAgICAgICAgKnNj
YWxlICo9IHN0YXRpY19jYXN0PGZsb2F0PihtX3NpemUud2lkdGgpIC8gcmVjdC53aWR0aDsKKyAg
ICAgICAgKnNjYWxlID0gc3RkOjptaW4oc3RkOjptYXgoKnNjYWxlLCBtaW5TY2FsZSksIG1heFNj
YWxlKTsKKyAgICAgICAgKnNjYWxlID0gY29tcHV0ZVBhZ2VTY2FsZUZhY3RvcldpdGhpbkxpbWl0
cygqc2NhbGUpOworCisgICAgICAgIHNjYWxlVW5jaGFuZ2VkID0gZmFicyhwYWdlU2NhbGVGYWN0
b3IoKSAtICpzY2FsZSkgPCBrTWluU2NhbGVEaWZmZXJlbmNlOworICAgIH0KKworICAgIGlmIChm
b3JEb3VibGVUYXApIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8IHNjYWxlVW5jaGFu
Z2VkKSB7CisgICAgICAgICAgICAvLyBab29tIG91dCB0byBvdmVydmlldyBtb2RlLgorICAgICAg
ICAgICAgaWYgKG92ZXJ2aWV3U2NhbGUpCisgICAgICAgICAgICAgICAgKnNjYWxlID0gb3ZlcnZp
ZXdTY2FsZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
cmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gS2VlcCBjdXJyZW50IHNjYWxlIChubyBuZWVk
IHRvIHNjcm9sbCBhcyB4LHkgd2lsbCBub3JtYWxseSBhbHJlYWR5CisgICAgICAgIC8vIGJlIHZp
c2libGUpLiBGSVhNRTogUmV2aXNpdCB0aGlzIGlmIGl0IGlzbid0IGFsd2F5cyB0cnVlLgorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYmVpbmcgY2Fs
bGVkIGZvciBhdXRvIHpvb20gZHVyaW5nIGZpbmQgaW4gcGFnZSwKKyAgICAvLyB0aGVuIGlmIHRo
ZSB1c2VyIG1hbnVhbGx5IHpvb21zIGluIGl0J2QgYmUgbmljZSB0byBwcmVzZXJ2ZSB0aGUgcmVs
YXRpdmUKKyAgICAvLyBpbmNyZWFzZSBpbiB6b29tIHRoZXkgY2F1c2VkIChpZiB0aGV5IHpvb20g
b3V0IHRoZW4gaXQncyBvayB0byB6b29tCisgICAgLy8gdGhlbSBiYWNrIGluIGFnYWluKS4gVGhp
cyBpc24ndCBjb21wYXRpYmxlIHdpdGggb3VyIGN1cnJlbnQgZG91YmxlLXRhcCB6b29tCisgICAg
Ly8gc3RyYXRlZ3kgKGZpdHRpbmcgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHNjcmVlbikg
dGhvdWdoLgorCisgICAgZmxvYXQgc2NyZWVuSGVpZ2h0ID0gbV9zaXplLmhlaWdodCAvICpzY2Fs
ZSAqIHBhZ2VTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IHNjcmVlbldpZHRoID0gbV9zaXplLndp
ZHRoIC8gKnNjYWxlICogcGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBTY3JvbGwgdG8gdmVy
dGljYWxseSBhbGlnbiB0aGUgYmxvY2suCisgICAgaWYgKHJlY3QuaGVpZ2h0IDwgc2NyZWVuSGVp
Z2h0KSB7CisgICAgICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIHNob3J0IGJsb2Nrcy4KKyAgICAg
ICAgcmVjdC55IC09IDAuNSAqIChzY3JlZW5IZWlnaHQgLSByZWN0LmhlaWdodCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gRW5zdXJlIHBvc2l0aW9uIHdlJ3JlIHpvb21pbmcgdG8gKCsgcGFk
ZGluZykgaXNuJ3Qgb2ZmIGJvdHRvbSBvZiBzY3JlZW4uCisgICAgICAgIHJlY3QueSA9IHN0ZDo6
bWF4KChmbG9hdCkgcmVjdC55LCBoaXRSZWN0LnkgKyBrVG91Y2hQb2ludFBhZGRpbmcgLSBzY3Jl
ZW5IZWlnaHQpOworICAgIH0gLy8gT3RoZXJ3aXNlIHRvcCBhbGlnbiB0aGUgYmxvY2suCisKKyAg
ICAvLyBEbyB0aGUgc2FtZSB0aGluZyBmb3IgaG9yaXpvbnRhbCBhbGlnbm1lbnQuCisgICAgaWYg
KHJlY3Qud2lkdGggPCBzY3JlZW5XaWR0aCkKKyAgICAgICAgcmVjdC54IC09IDAuNSAqIChzY3Jl
ZW5XaWR0aCAtIHJlY3Qud2lkdGgpOworICAgIGVsc2UKKyAgICAgICAgcmVjdC54ID0gc3RkOjpt
YXgoKGZsb2F0KSByZWN0LngsIGhpdFJlY3QueCArIGtUb3VjaFBvaW50UGFkZGluZyAtIHNjcmVl
bldpZHRoKTsKKworICAgIHNjcm9sbC0+eCA9IHJlY3QueDsKKyAgICBzY3JvbGwtPnkgPSByZWN0
Lnk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJWaWV3SW1wbDo6bnVtYmVyT2ZXaGVlbEV2ZW50SGFu
ZGxlcnNDaGFuZ2VkKHVuc2lnbmVkIG51bWJlck9mV2hlZWxIYW5kbGVycykKIHsKICAgICBtX2hh
dmVXaGVlbEV2ZW50SGFuZGxlcnMgPSBudW1iZXJPZldoZWVsSGFuZGxlcnMgPiAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYWRjYjgyZjFiNGQ2YjQyMmMy
NmIzNTM2ZjM2OTkzMmU3ZTVkNzFhMC4uM2ZlYTZiZmQ2MjQ1ZWZlNzU4ODQ5NzliZjQ0MWQ2NTM5
ZmRkODE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC00
NzEsNiArNDcxLDE4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVMYXllclRyZWVWaWV3cG9y
dCgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorCisgICAgLy8g
UmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBibG9jayB0eXBlIG5vZGUgdG91Y2hlZCBi
eSB0aGUgaW5wdXQKKyAgICAvLyBwb2ludCB3aXRoIHRoZSBwYWRkaW5nLgorICAgIFdlYlJlY3Qg
Z2V0QmxvY2tCb3VuZHMoY29uc3QgV2ViUmVjdCYsIGJvb2wgaWdub3JlQ2xpcHBpbmcpOworCisg
ICAgLy8gR2V0IHRoZSBzY2FsZSB3aGVuIHRoZSBkb2N1bWVudCBpcyBmdWxseSB6b29tZWQgb3V0
IChtaW5pbXVtIHNjYWxlKS4KKyAgICBmbG9hdCBjb21wdXRlT3ZlcnZpZXdTY2FsZSgpOworCisg
ICAgdm9pZCBnZXRTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0UmVj
dCwgYm9vbCBmb3JEb3VibGVUYXAsIGZsb2F0KiBzY2FsZSwgV2ViUG9pbnQqIHNjcm9sbCk7Cisj
ZW5kaWYKKwogICAgIFdlYlZpZXdDbGllbnQqIG1fY2xpZW50OwogICAgIFdlYkF1dG9maWxsQ2xp
ZW50KiBtX2F1dG9maWxsQ2xpZW50OwogICAgIFdlYlBlcm1pc3Npb25DbGllbnQqIG1fcGVybWlz
c2lvbkNsaWVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116153</attachid>
            <date>2011-11-21 16:06:15 -0800</date>
            <delta_ts>2012-02-03 10:53:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20111121190610.patch</filename>
            <type>text/plain</type>
            <size>10883</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk4YmU4OTQwOThkODJk
ZTdmZjI3Y2Y5ZmQ3MjhhNmY4NThlNDMwOC4uMzNiYjM3Mzg2MWVkOTBmYTk0ZmMyYWMyYzJlMTgy
YjUyOTUzNzRlOCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTExLTIxICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICog
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtR2VzdHVyZUV2ZW50OjpQbGF0Zm9ybUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUdlc3R1cmVFdmVudDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1HZXN0dXJlRXZlbnQ6OnNldERlbHRhWCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6c2V0RGVsdGFZKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVy
ZUV2ZW50OjpzZXRTY2FsZSk6CisKIDIwMTEtMTEtMTcgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZp
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIG9ubGluZURl
dGVjdGlvbkVuYWJsZWQgZnJvbSBQcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA4M2E2ZmQyM2FlODQ3ZTQzMTk1NzczZDdmMjI1NDczZTc0YmQ2M2EzLi40NWU2NDc5MjEw
YmE5ZDY1MzdmMTM1OGZhNDBiMTRmNjBiNWExNmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTExLTIxICBWYXJ1biBKYWluICA8dmFydW5qYWluQGdv
b2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQgbWV0aG9kIHRvIFdlYlZpZXdJbXBs
IHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBnZXN0dXJlIGV2ZW50cyBvbiB0b3Vj
aCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRv
dWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0QmxvY2tCb3VuZHMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZU92ZXJ2aWV3U2NhbGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z2V0U2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0xMS0xNyAgVnNldm9sb2Qg
Vmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBS
ZW1vdmUgb25saW5lRGV0ZWN0aW9uRW5hYmxlZCBmcm9tIFByZWZlcmVuY2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaAppbmRleCA4MzNjNmEzN2Fk
ZDdiOTdjOTA3Mjg5N2QxZjUwMTAxMDJhYTc5ZjkwLi4zNGU5YWM1NGQ2ZTJlYmRiMGEwOTU1ZDdk
ZDdiMjUwODAxNzMzNmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybUdlc3R1cmVFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZUV2ZW50LmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fdGlt
ZXN0YW1wKHRpbWVzdGFtcCkKICAgICAgICAgLCBtX2RlbHRhWChkZWx0YVgpCiAgICAgICAgICwg
bV9kZWx0YVkoZGVsdGFZKQorICAgICAgICAsIG1fc2NhbGUoMC4wZikKICAgICAgICAgLCBtX3No
aWZ0S2V5KHNoaWZ0S2V5KQogICAgICAgICAsIG1fY3RybEtleShjdHJsS2V5KQogICAgICAgICAs
IG1fYWx0S2V5KGFsdEtleSkKQEAgLTcyLDExICs3MywxNiBAQCBwdWJsaWM6CiAKICAgICBmbG9h
dCBkZWx0YVgoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWDsgfQogICAgIGZsb2F0IGRlbHRhWSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVsdGFZOyB9CisgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzaGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hp
ZnRLZXk7IH0KICAgICBib29sIGN0cmxLZXkoKSBjb25zdCB7IHJldHVybiBtX2N0cmxLZXk7IH0K
ICAgICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9CiAgICAgYm9vbCBt
ZXRhS2V5KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9CiAKKyAgICB2b2lkIHNldERlbHRh
WChmbG9hdCBkZWx0YVgpIHsgbV9kZWx0YVggPSBkZWx0YVg7IH0KKyAgICB2b2lkIHNldERlbHRh
WShmbG9hdCBkZWx0YVkpIHsgbV9kZWx0YVkgPSBkZWx0YVk7IH0KKyAgICB2b2lkIHNldFNjYWxl
KGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2FsZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVHlw
ZSBtX3R5cGU7CiAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKQEAgLTg0LDYgKzkwLDcgQEAgcHJv
dGVjdGVkOgogICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsKICAgICBmbG9hdCBtX2RlbHRhWDsKICAg
ICBmbG9hdCBtX2RlbHRhWTsKKyAgICBmbG9hdCBtX3NjYWxlOwogICAgIGJvb2wgbV9zaGlmdEtl
eTsKICAgICBib29sIG1fY3RybEtleTsKICAgICBib29sIG1fYWx0S2V5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGI4Nzk5NWRmMDUwZWJmNDBmMzJj
ZGU2ZmZmYThiY2JmMDVhZDY5ODEuLjBmNThlY2RjMTNiM2Q5OTk0Y2Q0NjI5NDc5YjlmMzQwODI1
YjM5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAg
LTE4OCw2ICsxODgsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ2V0Q29tcG9z
aXRvckNvbnRleHRBdHRyaWJ1dGVzKCkKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAorc3Rh
dGljIGNvbnN0IGludCBrVG91Y2hQb2ludFBhZGRpbmcgPSAxNjsKK3N0YXRpYyBjb25zdCBmbG9h
dCBrTWluRG91YmxlVGFwWm9vbUluUmF0aW8gPSAxLjMzZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBr
TWluU2NhbGVEaWZmZXJlbmNlID0gMC4wMWY7CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTc4NSwxNCArNzg5LDEzOCBAQCBib29sIFdlYlZpZXdJ
bXBsOjp0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmIGV2ZW50KQogCiAjaWYgRU5BQkxF
KEdFU1RVUkVfUkVDT0dOSVpFUikKICAgICBPd25QdHI8VmVjdG9yPFdlYkNvcmU6OlBsYXRmb3Jt
R2VzdHVyZUV2ZW50PiA+IGdlc3R1cmVFdmVudHMobV9nZXN0dXJlUmVjb2duaXplci0+cHJvY2Vz
c1RvdWNoRXZlbnRGb3JHZXN0dXJlcyh0b3VjaEV2ZW50QnVpbGRlciwgZGVmYXVsdFByZXZlbnRl
ZCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ICBpID0gMDsgaSA8IGdlc3R1cmVFdmVudHMtPnNp
emUoKTsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaW50ICBpID0gMDsgaSA8IGdlc3R1cmVFdmVu
dHMtPnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChnZXN0dXJlRXZlbnRzLT5hdChpKS50eXBl
KCkgPT0gV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlRXZlbnQ6OkRvdWJsZVRhcFR5cGUpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHNjYWxlID0gMS5mOworICAgICAgICAgICAgV2ViUG9pbnQgc2Nyb2xs
OworICAgICAgICAgICAgV2ViUmVjdCBoaXRSZWN0KGdlc3R1cmVFdmVudHMtPmF0KGkpLnBvc2l0
aW9uKCkueCgpLCBnZXN0dXJlRXZlbnRzLT5hdChpKS5wb3NpdGlvbigpLnkoKSwgMCwgMCk7Cisg
ICAgICAgICAgICBnZXRTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoaGl0UmVjdCwgdHJ1ZSwgJnNj
YWxlLCAmc2Nyb2xsKTsKKyAgICAgICAgICAgIGdlc3R1cmVFdmVudHMtPmF0KGkpLnNldFNjYWxl
KHNjYWxlKTsKKyAgICAgICAgICAgIGdlc3R1cmVFdmVudHMtPmF0KGkpLnNldERlbHRhWChzY3Jv
bGwueCk7CisgICAgICAgICAgICBnZXN0dXJlRXZlbnRzLT5hdChpKS5zZXREZWx0YVkoc2Nyb2xs
LnkpOworICAgICAgICB9CiAgICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnRzLT5hdChpKSk7CisgICAg
fQogI2VuZGlmCiAKICAgICByZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKK1dlYlJlY3QgV2ViVmlld0ltcGw6OmdldEJs
b2NrQm91bmRzKGNvbnN0IFdlYlJlY3QmIHJlY3QsIGJvb2wgaWdub3JlQ2xpcHBpbmcpCit7Cisg
ICAgaWYgKCFtYWluRnJhbWVJbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJSZWN0KCk7CisgICAg
Ly8gVXNlIHRoZSByZWN0LWJhc2VkIGhpdCB0ZXN0IHRvIGZpbmQgdGhlIG5vZGUuCisgICAgSW50
UG9pbnQgcG9pbnQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKFdlYkNvcmU6OkludFBvaW50KHJlY3QueCwgcmVjdC55KSk7CisgICAgSGl0VGVzdFJlc3Vs
dCByZXN1bHQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRU
ZXN0UmVzdWx0QXRQb2ludChwb2ludCwKKyAgICAgICAgICAgIGZhbHNlLCBpZ25vcmVDbGlwcGlu
ZywgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVz
dFJlcXVlc3Q6OlJlYWRPbmx5LAorICAgICAgICAgICAgSW50U2l6ZShyZWN0LndpZHRoLCByZWN0
LmhlaWdodCkpOworICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gV2ViUmVjdCgpOworICAgIC8vIEZpbmQg
dGhlIGJsb2NrIHR5cGUgbm9kZSBiYXNlZCBvbiB0aGUgaGl0IG5vZGUuCisgICAgd2hpbGUgKG5v
ZGUgJiYgKCFub2RlLT5yZW5kZXJlcigpIHx8IG5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkp
KQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIC8vIFJldHVybiB0aGUg
Ym91bmRpbmcgYm94IGluIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgaWYgKG5v
ZGUpIHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gbm9kZS0+Tm9kZTo6Z2V0UmVjdCgpOyAvLyB3
b3JrYXJvdW5kIENvbnRhaW5lck5vZGU6OmdldFJlY3QgdHJhbnNmb3JtYXRpb24gYnVnCisgICAg
ICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgICAgIHJl
dHVybiBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgIH0KKyAgICBy
ZXR1cm4gV2ViUmVjdCgpOworfQorCitmbG9hdCBXZWJWaWV3SW1wbDo6Y29tcHV0ZU92ZXJ2aWV3
U2NhbGUoKQoreworICAgIFdlYktpdDo6V2ViU2l6ZSBjb250ZW50U2l6ZSA9IG1haW5GcmFtZSgp
LT5jb250ZW50c1NpemUoKTsKKyAgICBpZiAoY29udGVudFNpemUuaXNFbXB0eSgpIHx8IG1fc2l6
ZS5pc0VtcHR5KCkpCisgICAgICByZXR1cm4gMC4wZjsKKworICAgIGZsb2F0IG1pblNjYWxlID0g
bV9taW5pbXVtUGFnZVNjYWxlRmFjdG9yICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAvLyBB
bHNvIGJvdW5kIHpvb20tb3V0IHRvIG5vdCBiZSBsYXJnZXIgdGhhbiB0aGUgZG9jdW1lbnQgc2l6
ZS4KKyAgICBtaW5TY2FsZSA9IHN0ZDo6bWF4KG1pblNjYWxlLCAoZmxvYXQpIG1fc2l6ZS53aWR0
aCAvIChjb250ZW50U2l6ZS53aWR0aCAvIHBhZ2VTY2FsZUZhY3RvcigpKSk7CisKKyAgICByZXR1
cm4gbWluU2NhbGU7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmdldFNjYWxlQW5kU2Nyb2xsRm9y
SGl0UmVjdChjb25zdCBXZWJSZWN0JiBoaXRSZWN0LCBib29sIGZvckRvdWJsZVRhcCwgZmxvYXQq
IHNjYWxlLCBXZWJQb2ludCogc2Nyb2xsKQoreworICAgICpzY2FsZSA9IHBhZ2VTY2FsZUZhY3Rv
cigpOworICAgIHNjcm9sbC0+eCA9IHNjcm9sbC0+eSA9IDA7CisgICAgV2ViUmVjdCB0YXJnZXRS
ZWN0ID0gaGl0UmVjdDsKKyAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHRh
cmdldFJlY3Qud2lkdGggPSB0YXJnZXRSZWN0LmhlaWdodCA9IGtUb3VjaFBvaW50UGFkZGluZzsK
KworICAgIFdlYlJlY3QgcmVjdCA9IGdldEJsb2NrQm91bmRzKHRhcmdldFJlY3QsICFmb3JEb3Vi
bGVUYXApOworCisgICAgY29uc3QgZmxvYXQgb3ZlcnZpZXdTY2FsZSA9IGNvbXB1dGVPdmVydmll
d1NjYWxlKCk7CisgICAgYm9vbCBzY2FsZVVuY2hhbmdlZCA9IHRydWU7CisgICAgZmxvYXQgZHBp
U2NhbGUgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGlmICghcmVjdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gVGhlIG1pbmltdW0gem9vbSBpbiBsaW1pdCBpcyB0byBtYWtlIHN1cmUgZG91
YmxlLXRhcHBpbmcKKyAgICAgICAgLy8gYWx3YXlzIHpvb21zIGluIGEgYml0LCBldmVuIG9uIG1v
YmlsZSBzaXRlcyAvIHdoZW4gb24gdGFibGV0LAorICAgICAgICAvLyBhbmQgd2hlbiB0YXBwaW5n
IG9uIGZ1bGwtd2lkdGggZGl2cy4KKyAgICAgICAgY29uc3QgZmxvYXQgbWluWm9vbUluUmF0aW8g
PSBmb3JEb3VibGVUYXAgPyBrTWluRG91YmxlVGFwWm9vbUluUmF0aW8gOiAxLjBmOworICAgICAg
ICBjb25zdCBmbG9hdCBtaW5TY2FsZSA9IG92ZXJ2aWV3U2NhbGUgKiBtaW5ab29tSW5SYXRpbzsK
KworICAgICAgICAvLyBQYWdlcyBzaG91bGQgYmUgYXMgbGVnaWJsZSBhcyBvbiBkZXNrdG9wIHdo
ZW4gYXQgZHBpX3NjYWxlXywgc28gbm8KKyAgICAgICAgLy8gbmVlZCB0byB6b29tIGluIGZ1cnRo
ZXIgd2hlbiBhdXRvbWF0aWNhbGx5IGRldGVybWluaW5nIHpvb20gbGV2ZWwKKyAgICAgICAgLy8g
KGFmdGVyIGRvdWJsZSB0YXAsIGZpbmQgaW4gcGFnZSwgZXRjKSwgdGhvdWdoIHRoZSB1c2VyIHNo
b3VsZCBzdGlsbAorICAgICAgICAvLyBiZSBhbGxvd2VkIHRvIG1hbnVhbGx5IHBpbmNoIHpvb20g
aW4gZnVydGhlciBpZiB0aGV5IGRlc2lyZS4KKyAgICAgICAgY29uc3QgZmxvYXQgbWF4U2NhbGUg
PSBzdGQ6Om1heChtaW5TY2FsZSwgZHBpU2NhbGUpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0
byBzY3JlZW4sIHJlc3BlY3RpbmcgbGltaXRzLgorICAgICAgICAqc2NhbGUgKj0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fc2l6ZS53aWR0aCkgLyByZWN0LndpZHRoOworICAgICAgICAqc2NhbGUgPSBz
dGQ6Om1pbihzdGQ6Om1heCgqc2NhbGUsIG1pblNjYWxlKSwgbWF4U2NhbGUpOworICAgICAgICAq
c2NhbGUgPSBjb21wdXRlUGFnZVNjYWxlRmFjdG9yV2l0aGluTGltaXRzKCpzY2FsZSk7CisKKyAg
ICAgICAgc2NhbGVVbmNoYW5nZWQgPSBmYWJzKHBhZ2VTY2FsZUZhY3RvcigpIC0gKnNjYWxlKSA8
IGtNaW5TY2FsZURpZmZlcmVuY2U7CisgICAgfQorCisgICAgaWYgKGZvckRvdWJsZVRhcCkgewor
ICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgc2NhbGVVbmNoYW5nZWQpIHsKKyAgICAgICAg
ICAgIC8vIFpvb20gb3V0IHRvIG92ZXJ2aWV3IG1vZGUuCisgICAgICAgICAgICBpZiAob3ZlcnZp
ZXdTY2FsZSkKKyAgICAgICAgICAgICAgICAqc2NhbGUgPSBvdmVydmlld1NjYWxlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChyZWN0LmlzRW1wdHkoKSkg
eworICAgICAgICAvLyBLZWVwIGN1cnJlbnQgc2NhbGUgKG5vIG5lZWQgdG8gc2Nyb2xsIGFzIHgs
eSB3aWxsIG5vcm1hbGx5IGFscmVhZHkKKyAgICAgICAgLy8gYmUgdmlzaWJsZSkuIEZJWE1FOiBS
ZXZpc2l0IHRoaXMgaWYgaXQgaXNuJ3QgYWx3YXlzIHRydWUuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBiZWluZyBjYWxsZWQgZm9yIGF1dG8gem9v
bSBkdXJpbmcgZmluZCBpbiBwYWdlLAorICAgIC8vIHRoZW4gaWYgdGhlIHVzZXIgbWFudWFsbHkg
em9vbXMgaW4gaXQnZCBiZSBuaWNlIHRvIHByZXNlcnZlIHRoZSByZWxhdGl2ZQorICAgIC8vIGlu
Y3JlYXNlIGluIHpvb20gdGhleSBjYXVzZWQgKGlmIHRoZXkgem9vbSBvdXQgdGhlbiBpdCdzIG9r
IHRvIHpvb20KKyAgICAvLyB0aGVtIGJhY2sgaW4gYWdhaW4pLiBUaGlzIGlzbid0IGNvbXBhdGli
bGUgd2l0aCBvdXIgY3VycmVudCBkb3VibGUtdGFwIHpvb20KKyAgICAvLyBzdHJhdGVneSAoZml0
dGluZyB0aGUgY29udGFpbmluZyBibG9jayB0byB0aGUgc2NyZWVuKSB0aG91Z2guCisKKyAgICBm
bG9hdCBzY3JlZW5IZWlnaHQgPSBtX3NpemUuaGVpZ2h0IC8gKnNjYWxlICogcGFnZVNjYWxlRmFj
dG9yKCk7CisgICAgZmxvYXQgc2NyZWVuV2lkdGggPSBtX3NpemUud2lkdGggLyAqc2NhbGUgKiBw
YWdlU2NhbGVGYWN0b3IoKTsKKworICAgIC8vIFNjcm9sbCB0byB2ZXJ0aWNhbGx5IGFsaWduIHRo
ZSBibG9jay4KKyAgICBpZiAocmVjdC5oZWlnaHQgPCBzY3JlZW5IZWlnaHQpIHsKKyAgICAgICAg
Ly8gVmVydGljYWxseSBjZW50ZXIgc2hvcnQgYmxvY2tzLgorICAgICAgICByZWN0LnkgLT0gMC41
ICogKHNjcmVlbkhlaWdodCAtIHJlY3QuaGVpZ2h0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBFbnN1cmUgcG9zaXRpb24gd2UncmUgem9vbWluZyB0byAoKyBwYWRkaW5nKSBpc24ndCBvZmYg
Ym90dG9tIG9mIHNjcmVlbi4KKyAgICAgICAgcmVjdC55ID0gc3RkOjptYXgoKGZsb2F0KSByZWN0
LnksIGhpdFJlY3QueSArIGtUb3VjaFBvaW50UGFkZGluZyAtIHNjcmVlbkhlaWdodCk7CisgICAg
fSAvLyBPdGhlcndpc2UgdG9wIGFsaWduIHRoZSBibG9jay4KKworICAgIC8vIERvIHRoZSBzYW1l
IHRoaW5nIGZvciBob3Jpem9udGFsIGFsaWdubWVudC4KKyAgICBpZiAocmVjdC53aWR0aCA8IHNj
cmVlbldpZHRoKQorICAgICAgICByZWN0LnggLT0gMC41ICogKHNjcmVlbldpZHRoIC0gcmVjdC53
aWR0aCk7CisgICAgZWxzZQorICAgICAgICByZWN0LnggPSBzdGQ6Om1heCgoZmxvYXQpIHJlY3Qu
eCwgaGl0UmVjdC54ICsga1RvdWNoUG9pbnRQYWRkaW5nIC0gc2NyZWVuV2lkdGgpOworCisgICAg
c2Nyb2xsLT54ID0gcmVjdC54OworICAgIHNjcm9sbC0+eSA9IHJlY3QueTsKK30KKyNlbmRpZgor
CiB2b2lkIFdlYlZpZXdJbXBsOjpudW1iZXJPZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5z
aWduZWQgbnVtYmVyT2ZXaGVlbEhhbmRsZXJzKQogewogICAgIG1faGF2ZVdoZWVsRXZlbnRIYW5k
bGVycyA9IG51bWJlck9mV2hlZWxIYW5kbGVycyA+IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCBhZGNiODJmMWI0ZDZiNDIyYzI2YjM1MzZmMzY5OTMyZTdl
NWQ3MWEwLi4zZmVhNmJmZDYyNDVlZmU3NTg4NDk3OWJmNDQxZDY1MzlmZGQ4MTRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTQ3MSw2ICs0NzEsMTggQEAg
cHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCisKKyAgICAvLyBSZXR1cm5zIHRoZSBib3Vu
ZGluZyBib3ggb2YgdGhlIGJsb2NrIHR5cGUgbm9kZSB0b3VjaGVkIGJ5IHRoZSBpbnB1dAorICAg
IC8vIHBvaW50IHdpdGggdGhlIHBhZGRpbmcuCisgICAgV2ViUmVjdCBnZXRCbG9ja0JvdW5kcyhj
b25zdCBXZWJSZWN0JiwgYm9vbCBpZ25vcmVDbGlwcGluZyk7CisKKyAgICAvLyBHZXQgdGhlIHNj
YWxlIHdoZW4gdGhlIGRvY3VtZW50IGlzIGZ1bGx5IHpvb21lZCBvdXQgKG1pbmltdW0gc2NhbGUp
LgorICAgIGZsb2F0IGNvbXB1dGVPdmVydmlld1NjYWxlKCk7CisKKyAgICB2b2lkIGdldFNjYWxl
QW5kU2Nyb2xsRm9ySGl0UmVjdChjb25zdCBXZWJSZWN0JiBoaXRSZWN0LCBib29sIGZvckRvdWJs
ZVRhcCwgZmxvYXQqIHNjYWxlLCBXZWJQb2ludCogc2Nyb2xsKTsKKyNlbmRpZgorCiAgICAgV2Vi
Vmlld0NsaWVudCogbV9jbGllbnQ7CiAgICAgV2ViQXV0b2ZpbGxDbGllbnQqIG1fYXV0b2ZpbGxD
bGllbnQ7CiAgICAgV2ViUGVybWlzc2lvbkNsaWVudCogbV9wZXJtaXNzaW9uQ2xpZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125365</attachid>
            <date>2012-02-03 10:53:12 -0800</date>
            <delta_ts>2012-02-06 02:47:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120203135311.patch</filename>
            <type>text/plain</type>
            <size>15942</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTVkNTZiZjY4YTcyNTUw
NGE3NGQwZjJiM2MyY2U5NGJjNjgwOTVjMC4uMWQzNmY5NDU5OTQ5NDI2MzhjMDY1NzM2NTNmZTQ0
MGVhYWUxNjU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAyLTAzICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3RzIC0tZ3Rlc3RfZmls
dGVyPVdlYkZyYW1lVGVzdC5EaXZBdXRvWm9vbVBhcmFtc1Rlc3QKKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OnNjYWxlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUV2ZW50OjpzZXREZWx0YVgpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlRXZlbnQ6OnNldERlbHRhWSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVFdmVudDo6c2V0U2NhbGUpOgorCiAyMDEyLTAy
LTAyICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUdXJuIG9u
IENTUyBGaWx0ZXJzIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzQ3
ZDZhZWQ3NjUxNDZlZDg3YjBkZTk3MWI2Mjc5MmY2NTAyNWIxZC4uNGEyNzkyNDNkZTliNDIxZmM2
ZjY3OGExNTNhODM3YTljZDdiMzY5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxMi0wMi0wMyAgVmFydW4gSmFpbiAgPHZhcnVuamFpbkBnb29nbGUuY29t
PgorCisgICAgICAgIFtDaHJvbWl1bV0gQWRkIG1ldGhvZCB0byBXZWJWaWV3SW1wbCB0byBleHRy
YWN0IHpvb20vc2Nyb2xsIHBhcmFtcyBmb3IgZ2VzdHVyZSBldmVudHMgb24gdG91Y2ggZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChzdGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6dG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6Y29tcHV0ZUJsb2NrQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmNvbXB1dGVPdmVydmlld1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OldpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdCk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJWaWV3SW1wbCk6CisgICAgICAgICogdGVzdHMvV2Vi
RnJhbWVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rp
dl90ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTAyICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4g
IDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAgIFVwZGF0ZSBlbnVtIG5hbWUgZm9y
IEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgKaW5kZXggZTMxM2JlNTBlMzkzMmY5Y2UxY2JjNTViNDAx
ZGEyNzYzMmE0NTQzMy4uMWQ2NWRiYjlhZmU1NzRjZTI2ZjQ3YzQxNGVmYWZlMjBjMmE3ZjViYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oCkBA
IC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2Jh
bFBvc2l0aW9uKQogICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKICAgICAgICAgLCBtX2RlbHRh
WShkZWx0YVkpCisgICAgICAgICwgbV9zY2FsZSgwLjBmKQogICAgIHsKICAgICB9CiAKQEAgLTU2
LDEyICs1NywxOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBkZWx0YVgoKSBjb25zdCB7IHJldHVy
biBtX2RlbHRhWDsgfQogICAgIGZsb2F0IGRlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsdGFZ
OyB9Ci0gICAgCisgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CisK
KyAgICB2b2lkIHNldERlbHRhWChmbG9hdCBkZWx0YVgpIHsgbV9kZWx0YVggPSBkZWx0YVg7IH0K
KyAgICB2b2lkIHNldERlbHRhWShmbG9hdCBkZWx0YVkpIHsgbV9kZWx0YVkgPSBkZWx0YVk7IH0K
KyAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2FsZTsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICBJbnRQb2ludCBtX2dsb2Jh
bFBvc2l0aW9uOwogICAgIGZsb2F0IG1fZGVsdGFYOwogICAgIGZsb2F0IG1fZGVsdGFZOworICAg
IGZsb2F0IG1fc2NhbGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggODRkZTc3MjljY2U1YWQ5MzZi
NTA2NmQ3NDFkNzFmZmNlZTUxMDg4Ni4uODk1Mjg5MWNiYmEyMDZlMmM2OWE0MzljM2I4Mjk3Y2I5
M2FiMmQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtMTkzLDYgKzE5MywxNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRDb21w
b3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKQogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCisv
LyBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBjb250cm9sIHBhcmFtZXRlcnMgZm9yIGF1dG9tYXRl
ZCBzY2FsaW5nIG9mIHdlYnBhZ2VzCisvLyAoc3VjaCBhcyBkdWUgdG8gYSBkb3VibGUgdGFwIGdl
c3R1cmUgb3IgZmluZCBpbiBwYWdlIGV0Yy4pLiBUaGlzIGFyZQorLy8gZXhwZXJpbWVudGFsbHkg
ZGV0ZXJtaW5lZC4KK3N0YXRpYyBjb25zdCBpbnQga1RvdWNoUG9pbnRQYWRkaW5nID0gMTY7Citz
dGF0aWMgY29uc3QgZmxvYXQga01pblNjYWxlRGlmZmVyZW5jZSA9IDAuMDE7CitzdGF0aWMgY29u
c3QgZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50RGVmYXVsdE1hcmdpbiA9IDUuMDsKK3N0YXRp
YyBjb25zdCBmbG9hdCBrRG91YmxlVGFwWm9vbUNvbnRlbnRNaW5pbXVtTWFyZ2luID0gMi4wOwor
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC04MDMs
MTQgKzgxMSwyMDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6dG91Y2hFdmVudChjb25zdCBXZWJUb3Vj
aEV2ZW50JiBldmVudCkKIAogI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCiAgICAgT3du
UHRyPFZlY3RvcjxXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVFdmVudD4gPiBnZXN0dXJlRXZlbnRz
KG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZXModG91Y2hF
dmVudEJ1aWxkZXIsIGRlZmF1bHRQcmV2ZW50ZWQpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCAg
aSA9IDA7IGkgPCBnZXN0dXJlRXZlbnRzLT5zaXplKCk7IGkrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGludCAgaSA9IDA7IGkgPCBnZXN0dXJlRXZlbnRzLT5zaXplKCk7IGkrKykgeworICAgICAgICBp
ZiAoZ2VzdHVyZUV2ZW50cy0+YXQoaSkudHlwZSgpID09IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6
Okdlc3R1cmVEb3VibGVUYXApIHsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gMTsKKyAgICAg
ICAgICAgIFdlYlBvaW50IHNjcm9sbDsKKyAgICAgICAgICAgIFdlYlJlY3QgaGl0UmVjdChnZXN0
dXJlRXZlbnRzLT5hdChpKS5wb3NpdGlvbigpLngoKSwgZ2VzdHVyZUV2ZW50cy0+YXQoaSkucG9z
aXRpb24oKS55KCksIDAsIDApOworICAgICAgICAgICAgY29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9y
SGl0UmVjdChoaXRSZWN0LCB0cnVlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICAgICAgICAgIGdlc3R1
cmVFdmVudHMtPmF0KGkpLnNldFNjYWxlKHNjYWxlKTsKKyAgICAgICAgICAgIGdlc3R1cmVFdmVu
dHMtPmF0KGkpLnNldERlbHRhWChzY3JvbGwueCk7CisgICAgICAgICAgICBnZXN0dXJlRXZlbnRz
LT5hdChpKS5zZXREZWx0YVkoc2Nyb2xsLnkpOworICAgICAgICB9CiAgICAgICAgIG1haW5GcmFt
ZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0
dXJlRXZlbnRzLT5hdChpKSk7CisgICAgfQogI2VuZGlmCiAKICAgICByZXR1cm4gZGVmYXVsdFBy
ZXZlbnRlZDsKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKK1dl
YlJlY3QgV2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyhjb25zdCBXZWJSZWN0JiByZWN0
LCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sJiBpc1VuYm9vc3RlZFRleHQpCit7CisgICAgaXNV
bmJvb3N0ZWRUZXh0ID0gZmFsc2U7CisgICAgaWYgKCFtYWluRnJhbWVJbXBsKCkpCisgICAgICAg
IHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBVc2UgdGhlIHJlY3QtYmFzZWQgaGl0IHRlc3Qg
dG8gZmluZCB0aGUgbm9kZS4KKyAgICBJbnRQb2ludCBwb2ludCA9IG1haW5GcmFtZUltcGwoKS0+
ZnJhbWVWaWV3KCktPndpbmRvd1RvQ29udGVudHMoV2ViQ29yZTo6SW50UG9pbnQocmVjdC54LCBy
ZWN0LnkpKTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1haW5GcmFtZUltcGwoKS0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LAorICAgICAg
ICAgICAgZmFsc2UsIGlnbm9yZUNsaXBwaW5nLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRl
c3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksCisgICAgICAgICAg
ICBJbnRTaXplKHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KSk7CisKKyAgICAvLyBGaW5kIHRoZSBt
b3N0IGJvb3N0ZWQgdGV4dCBub2RlIGludGVyc2VjdGVkIGJ5IHRoZSBoaXQgdGVzdCAoaWYgYW55
KS4KKyAgICBOb2RlKiBub2RlID0gMDsKKyAgICBmbG9hdCBncmVhdGVzdEJvb3N0aW5nRmFjdG9y
ID0gMDsKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IHJlc3Vs
dC5yZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQdHI8Tm9k
ZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgTm9kZSogY3VycmVudCA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYg
KGN1cnJlbnQtPmlzVGV4dE5vZGUoKSAmJiBjdXJyZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICBmbG9hdCBib29zdGluZ0ZhY3RvciA9IGN1cnJlbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8gY3VycmVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICAgICAgaWYgKGJvb3N0aW5nRmFjdG9yID4g
Z3JlYXRlc3RCb29zdGluZ0ZhY3RvcikgeworICAgICAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50
OworICAgICAgICAgICAgICAgIGlzVW5ib29zdGVkVGV4dCA9IGJvb3N0aW5nRmFjdG9yIDw9IDE7
CisgICAgICAgICAgICAgICAgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IGJvb3N0aW5nRmFjdG9y
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFub2RlKQorICAg
ICAgICBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworCisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm4gV2ViUmVjdCgpOworCisgICAgLy8gRmluZCB0aGUgYmxvY2sgdHlw
ZSBub2RlIGJhc2VkIG9uIHRoZSBoaXQgbm9kZS4KKyAgICB3aGlsZSAobm9kZSAmJiAoIW5vZGUt
PnJlbmRlcmVyKCkgfHwgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkpCisgICAgICAgIG5v
ZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGJvdW5kaW5nIGJv
eCBpbiB0aGUgd2luZG93IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGlmIChub2RlKSB7CisgICAg
ICAgIEludFJlY3QgcmVjdCA9IG5vZGUtPk5vZGU6OmdldFJlY3QoKTsKKyAgICAgICAgRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAgICAgcmV0dXJuIGZyYW1l
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgfQorICAgIHJldHVybiBXZWJS
ZWN0KCk7Cit9CisKK2Zsb2F0IFdlYlZpZXdJbXBsOjpjb21wdXRlT3ZlcnZpZXdTY2FsZSgpCit7
CisgICAgV2ViS2l0OjpXZWJTaXplIGNvbnRlbnRTaXplID0gbWFpbkZyYW1lKCktPmNvbnRlbnRz
U2l6ZSgpOworICAgIGlmIChjb250ZW50U2l6ZS5pc0VtcHR5KCkgfHwgbV9zaXplLmlzRW1wdHko
KSkKKyAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgbWluU2NhbGUgPSBtX21pbmltdW1QYWdl
U2NhbGVGYWN0b3IgKiBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIC8vIEFsc28gYm91bmQgem9v
bS1vdXQgdG8gbm90IGJlIGxhcmdlciB0aGFuIHRoZSBkb2N1bWVudCBzaXplLgorICAgIG1pblNj
YWxlID0gbWF4KG1pblNjYWxlLCAoZmxvYXQpIG1fc2l6ZS53aWR0aCAvIChjb250ZW50U2l6ZS53
aWR0aCAvIHBhZ2VTY2FsZUZhY3RvcigpKSk7CisKKyAgICByZXR1cm4gbWluU2NhbGU7Cit9CisK
K1dlYlJlY3QgV2ViVmlld0ltcGw6OldpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMoY29uc3QgV2Vi
UmVjdCYgc291cmNlLCBpbnQgdGFyZ2V0TWFyZ2luLCBpbnQgbWluaW11bU1hcmdpbikKK3sKKyAg
ICBXZWJTaXplIG1heFNpemU7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAgICBtYXhTaXpl
ID0gbWFpbkZyYW1lKCktPmNvbnRlbnRzU2l6ZSgpOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0
OworICAgIGlmIChtYWluRnJhbWUoKSkKKyAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gbWFpbkZyYW1l
KCktPnNjcm9sbE9mZnNldCgpOworICAgIGludCBsZWZ0TWFyZ2luID0gdGFyZ2V0TWFyZ2luOwor
ICAgIGludCByaWdodE1hcmdpbiA9IHRhcmdldE1hcmdpbjsKKworICAgIGNvbnN0IGludCBhYnNv
bHV0ZVNvdXJjZVggPSBzb3VyY2UueCArIHNjcm9sbE9mZnNldC53aWR0aCgpOworICAgIGlmIChs
ZWZ0TWFyZ2luID4gYWJzb2x1dGVTb3VyY2VYKSB7CisgICAgICAgIGxlZnRNYXJnaW4gPSBhYnNv
bHV0ZVNvdXJjZVg7CisgICAgICAgIHJpZ2h0TWFyZ2luID0gbWF4KGxlZnRNYXJnaW4sIG1pbmlt
dW1NYXJnaW4pOworICAgIH0KKworICAgIGNvbnN0IGludCBtYXhpbXVtUmlnaHRNYXJnaW4gPSBt
YXhTaXplLndpZHRoIC0gKHNvdXJjZS53aWR0aCArIGFic29sdXRlU291cmNlWCk7CisgICAgaWYg
KHJpZ2h0TWFyZ2luID4gbWF4aW11bVJpZ2h0TWFyZ2luKSB7CisgICAgICByaWdodE1hcmdpbiA9
IG1heGltdW1SaWdodE1hcmdpbjsKKyAgICAgIGxlZnRNYXJnaW4gPSBtaW4obGVmdE1hcmdpbiwg
bWF4KHJpZ2h0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKSk7CisgICAgfQorCisgICAgY29uc3QgaW50
IG5ld1dpZHRoID0gc291cmNlLndpZHRoICsgbGVmdE1hcmdpbiArIHJpZ2h0TWFyZ2luOworICAg
IGNvbnN0IGludCBuZXdYID0gc291cmNlLnggLSBsZWZ0TWFyZ2luOworCisgICAgQVNTRVJUKG5l
d1dpZHRoID49IDApOworICAgIEFTU0VSVChzY3JvbGxPZmZzZXQud2lkdGgoKSArIG5ld1ggKyBu
ZXdXaWR0aCA8PSBtYXhTaXplLndpZHRoKTsKKworICAgIHJldHVybiBXZWJSZWN0KG5ld1gsIHNv
dXJjZS55LCBuZXdXaWR0aCwgc291cmNlLmhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0UmVjdCwg
Ym9vbCBmb3JEb3VibGVUYXAsIGZsb2F0JiBzY2FsZSwgV2ViUG9pbnQmIHNjcm9sbCkKK3sKKyAg
ICBzY2FsZSA9IHBhZ2VTY2FsZUZhY3RvcigpOworICAgIHNjcm9sbC54ID0gc2Nyb2xsLnkgPSAw
OworICAgIFdlYlJlY3QgdGFyZ2V0UmVjdCA9IGhpdFJlY3Q7CisgICAgaWYgKHRhcmdldFJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICB0YXJnZXRSZWN0LndpZHRoID0gdGFyZ2V0UmVjdC5oZWlnaHQg
PSBrVG91Y2hQb2ludFBhZGRpbmc7CisKKyAgICBib29sIGlzVW5ib29zdGVkVGV4dCA9IGZhbHNl
OworCisgICAgV2ViUmVjdCByZWN0ID0gY29tcHV0ZUJsb2NrQm91bmRzKHRhcmdldFJlY3QsICFm
b3JEb3VibGVUYXAsIGlzVW5ib29zdGVkVGV4dCk7CisKKyAgICBjb25zdCBmbG9hdCBvdmVydmll
d1NjYWxlID0gbV9taW5pbXVtUGFnZVNjYWxlRmFjdG9yOworICAgIGJvb2wgc2NhbGVVbmNoYW5n
ZWQgPSB0cnVlOworICAgIGlmICghcmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gUGFnZXMg
c2hvdWxkIGJlIGFzIGxlZ2libGUgYXMgb24gZGVza3RvcCB3aGVuIGF0IGRwaSBzY2FsZSwgc28g
bm8KKyAgICAgICAgLy8gbmVlZCB0byB6b29tIGluIGZ1cnRoZXIgd2hlbiBhdXRvbWF0aWNhbGx5
IGRldGVybWluaW5nIHpvb20gbGV2ZWwKKyAgICAgICAgLy8gKGFmdGVyIGRvdWJsZSB0YXAsIGZp
bmQgaW4gcGFnZSwgZXRjKSwgdGhvdWdoIHRoZSB1c2VyIHNob3VsZCBzdGlsbAorICAgICAgICAv
LyBiZSBhbGxvd2VkIHRvIG1hbnVhbGx5IHBpbmNoIHpvb20gaW4gZnVydGhlciBpZiB0aGV5IGRl
c2lyZS4KKyAgICAgICAgLy8gRklYTUU6IEluY2x1ZGUgZm9udCBzY2FsZSBmYWN0b3Igb25jZSBp
dHMgYWRkZWQgdG8gc2V0dGluZ3MuCisgICAgICAgIGNvbnN0IGZsb2F0IG1heFNjYWxlID0gZGV2
aWNlU2NhbGVGYWN0b3IoKSAqIDEgLyogZm9udCBzY2FsZSBmYWN0b3IgKi87CisKKyAgICAgICAg
Y29uc3QgZmxvYXQgZGVmYXVsdE1hcmdpbiA9IGtEb3VibGVUYXBab29tQ29udGVudERlZmF1bHRN
YXJnaW4gKiBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBjb25zdCBmbG9hdCBtaW5pbXVt
TWFyZ2luID0ga0RvdWJsZVRhcFpvb21Db250ZW50TWluaW11bU1hcmdpbiAqIGRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgICAgIC8vIFdlIHdhbnQgdGhlIG1hcmdpbnMgdG8gaGF2ZSB0aGUgc2Ft
ZSBwaHlzaWNhbCBzaXplLCB3aGljaCBtZWFucyB3ZQorICAgICAgICAvLyBuZWVkIHRvIGV4cHJl
c3MgdGhlbSBpbiBwb3N0LXNjYWxlIHNpemUuIFRvIGRvIHRoYXQgd2UnZCBuZWVkIHRvIGtub3cK
KyAgICAgICAgLy8gdGhlIHNjYWxlIHdlJ3JlIHNjYWxpbmcgdG8sIGJ1dCB0aGF0IGRlcGVuZHMg
b24gdGhlIG1hcmdpbnMuIEluc3RlYWQKKyAgICAgICAgLy8gd2UgZXhwcmVzcyB0aGVtIGFzIGEg
ZnJhY3Rpb24gb2YgdGhlIHRhcmdldCByZWN0YW5nbGU6IHRoaXMgd2lsbCBiZQorICAgICAgICAv
LyBjb3JyZWN0IGlmIHdlIGVuZCB1cCBmdWxseSB6b29taW5nIHRvIGl0LCBhbmQgd29uJ3QgbWF0
dGVyIGlmIHdlCisgICAgICAgIC8vIGRvbid0LgorICAgICAgICByZWN0ID0gV2lkZW5SZWN0V2l0
aGluUGFnZUJvdW5kcyhyZWN0LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihkZWZhdWx0
TWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6ZS53aWR0aCksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KG1pbmltdW1NYXJnaW4gKiByZWN0LndpZHRoIC8gbV9zaXplLndpZHRoKSk7CisK
KyAgICAgICAgLy8gRml0IGJsb2NrIHRvIHNjcmVlbiwgcmVzcGVjdGluZyBsaW1pdHMuCisgICAg
ICAgIGlmIChpc1VuYm9vc3RlZFRleHQpCisgICAgICAgICAgICBzY2FsZSA9IG1heFNjYWxlOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNjYWxlICo9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3NpemUud2lkdGgpIC8gcmVjdC53aWR0aDsKKyAgICAgICAgICAgIHNjYWxlID0gbWluKHNjYWxl
LCBtYXhTY2FsZSk7CisgICAgICAgIH0KKyAgICAgICAgc2NhbGUgPSBjbGFtcFBhZ2VTY2FsZUZh
Y3RvclRvTGltaXRzKHNjYWxlKTsKKworICAgICAgICBzY2FsZVVuY2hhbmdlZCA9IGZhYnMocGFn
ZVNjYWxlRmFjdG9yKCkgLSBzY2FsZSkgPCBrTWluU2NhbGVEaWZmZXJlbmNlOworICAgIH0KKwor
ICAgIGlmIChmb3JEb3VibGVUYXApIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8IHNj
YWxlVW5jaGFuZ2VkKSB7CisgICAgICAgICAgICAvLyBab29tIG91dCB0byBvdmVydmlldyBtb2Rl
LgorICAgICAgICAgICAgaWYgKG92ZXJ2aWV3U2NhbGUpCisgICAgICAgICAgICAgICAgc2NhbGUg
PSBvdmVydmlld1NjYWxlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmIChyZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBLZWVwIGN1cnJlbnQgc2NhbGUg
KG5vIG5lZWQgdG8gc2Nyb2xsIGFzIHgseSB3aWxsIG5vcm1hbGx5IGFscmVhZHkKKyAgICAgICAg
Ly8gYmUgdmlzaWJsZSkuIEZJWE1FOiBSZXZpc2l0IHRoaXMgaWYgaXQgaXNuJ3QgYWx3YXlzIHRy
dWUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBi
ZWluZyBjYWxsZWQgZm9yIGF1dG8gem9vbSBkdXJpbmcgZmluZCBpbiBwYWdlLAorICAgIC8vIHRo
ZW4gaWYgdGhlIHVzZXIgbWFudWFsbHkgem9vbXMgaW4gaXQnZCBiZSBuaWNlIHRvIHByZXNlcnZl
IHRoZSByZWxhdGl2ZQorICAgIC8vIGluY3JlYXNlIGluIHpvb20gdGhleSBjYXVzZWQgKGlmIHRo
ZXkgem9vbSBvdXQgdGhlbiBpdCdzIG9rIHRvIHpvb20KKyAgICAvLyB0aGVtIGJhY2sgaW4gYWdh
aW4pLiBUaGlzIGlzbid0IGNvbXBhdGlibGUgd2l0aCBvdXIgY3VycmVudCBkb3VibGUtdGFwCisg
ICAgLy8gem9vbSBzdHJhdGVneSAoZml0dGluZyB0aGUgY29udGFpbmluZyBibG9jayB0byB0aGUg
c2NyZWVuKSB0aG91Z2guCisKKyAgICBmbG9hdCBzY3JlZW5IZWlnaHQgPSBtX3NpemUuaGVpZ2h0
IC8gc2NhbGUgKiBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBzY3JlZW5XaWR0aCA9IG1f
c2l6ZS53aWR0aCAvIHNjYWxlICogcGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBTY3JvbGwg
dG8gdmVydGljYWxseSBhbGlnbiB0aGUgYmxvY2suCisgICAgaWYgKHJlY3QuaGVpZ2h0IDwgc2Ny
ZWVuSGVpZ2h0KSB7CisgICAgICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIHNob3J0IGJsb2Nrcy4K
KyAgICAgICAgcmVjdC55IC09IDAuNSAqIChzY3JlZW5IZWlnaHQgLSByZWN0LmhlaWdodCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRW5zdXJlIHBvc2l0aW9uIHdlJ3JlIHpvb21pbmcgdG8g
KCsgcGFkZGluZykgaXNuJ3Qgb2ZmIHRoZSBib3R0b20gb2YKKyAgICAgICAgLy8gdGhlIHNjcmVl
bi4KKyAgICAgICAgcmVjdC55ID0gbWF4KChmbG9hdCkgcmVjdC55LCBoaXRSZWN0LnkgKyBrVG91
Y2hQb2ludFBhZGRpbmcgLSBzY3JlZW5IZWlnaHQpOworICAgIH0gLy8gT3RoZXJ3aXNlIHRvcCBh
bGlnbiB0aGUgYmxvY2suCisKKyAgICAvLyBEbyB0aGUgc2FtZSB0aGluZyBmb3IgaG9yaXpvbnRh
bCBhbGlnbm1lbnQuCisgICAgaWYgKHJlY3Qud2lkdGggPCBzY3JlZW5XaWR0aCkKKyAgICAgICAg
cmVjdC54IC09IDAuNSAqIChzY3JlZW5XaWR0aCAtIHJlY3Qud2lkdGgpOworICAgIGVsc2UKKyAg
ICAgICAgcmVjdC54ID0gbWF4KChmbG9hdCkgcmVjdC54LCBoaXRSZWN0LnggKyBrVG91Y2hQb2lu
dFBhZGRpbmcgLSBzY3JlZW5XaWR0aCk7CisKKyAgICBzY3JvbGwueCA9IHJlY3QueDsKKyAgICBz
Y3JvbGwueSA9IHJlY3QueTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlZpZXdJbXBsOjpudW1iZXJP
ZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQgbnVtYmVyT2ZXaGVlbEhhbmRsZXJz
KQogewogICAgIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyA9IG51bWJlck9mV2hlZWxIYW5kbGVy
cyA+IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBhMDM5
YTA5Y2ViODdjMjBlM2RhODQzMzMxZjFiZWFhZWQzZjRmMTMxLi40ZGEzYzkyN2UzNGRjNGMzYTkz
MmVkNjdmZTFlZTNhNzg2ZjdkOTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKQEAgLTQ2MCw2ICs0NjAsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoR0VTVFVS
RV9SRUNPR05JWkVSKQogICAgIHZvaWQgcmVzZXRHZXN0dXJlUmVjb2duaXplcigpOworICAgIHZv
aWQgY29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChjb25zdCBXZWJSZWN0JiBoaXRSZWN0
LCBib29sIGZvckRvdWJsZVRhcCwgZmxvYXQmIHNjYWxlLCBXZWJQb2ludCYgc2Nyb2xsKTsKICNl
bmRpZgogCiAgICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsKQEAg
LTUzMiw2ICs1MzMsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUxheWVyVHJlZVZpZXdw
b3J0KCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCisKKyAgICAv
LyBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGJsb2NrIHR5cGUgbm9kZSB0b3VjaGVk
IGJ5IHRoZSBpbnB1dAorICAgIC8vIHBvaW50IHdpdGggdGhlIHBhZGRpbmcuCisgICAgV2ViUmVj
dCBjb21wdXRlQmxvY2tCb3VuZHMoY29uc3QgV2ViUmVjdCYsIGJvb2wgaWdub3JlQ2xpcHBpbmcs
IGJvb2wmIGlzVW5ib29zdGVkVGV4dCk7CisKKyAgICAvLyBHZXQgdGhlIHNjYWxlIHdoZW4gdGhl
IGRvY3VtZW50IGlzIGZ1bGx5IHpvb21lZCBvdXQgKG1pbmltdW0gc2NhbGUpLgorICAgIGZsb2F0
IGNvbXB1dGVPdmVydmlld1NjYWxlKCk7CisKKyAgICBXZWJSZWN0IFdpZGVuUmVjdFdpdGhpblBh
Z2VCb3VuZHMoY29uc3QgV2ViUmVjdCYgc291cmNlLCBpbnQgdGFyZ2V0TWFyZ2luLCBpbnQgbWlu
aW11bU1hcmdpbik7CisjZW5kaWYKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQogICAgIHZvaWQg
cG9pbnRlckxvY2tNb3VzZUV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCmluZGV4IDA2YjI2
NDY5YTA1MTRlOTdmNzljOWNjZWQ5N2E0NDM5MmI2NjA2MjQuLjBiNjY4ZDYwNTNiZDgyZDkzYWFm
ZmU4N2Y4OWIzNjVlYTBlMDA5ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViRnJhbWVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYkZyYW1lVGVzdC5jcHAKQEAgLTE1MSw2ICsxNTEsMjAgQEAgVEVTVF9GKFdlYkZyYW1lVGVz
dCwgQ2hyb21lUGFnZU5vSmF2YXNjcmlwdCkKICAgICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmc6Om5w
b3MsIGNvbnRlbnQuZmluZCgiQ2xvYmJlcmVkIikpOwogfQogCitURVNUX0YoV2ViRnJhbWVUZXN0
LCBEaXZBdXRvWm9vbVBhcmFtc1Rlc3QpCit7CisgICAgcmVnaXN0ZXJNb2NrZWRIdHRwVVJMTG9h
ZCgiZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sIik7CisKKyAgICBX
ZWJWaWV3SW1wbCogd2ViVmlld0ltcGwgPSBzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KEZyYW1l
VGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJnZXRfc2NhbGVf
Zm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiLCB0cnVlKSk7CisgICAgd2ViVmlld0lt
cGwtPnNldERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIGZsb2F0IHNjYWxlOworICAgIFdlYlBv
aW50IHNjcm9sbDsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0
UmVjdChXZWJSZWN0KDI1MCwgMjUwLCAwLCAwKSwgdHJ1ZSwgc2NhbGUsIHNjcm9sbCk7CisKKyAg
ICBmcHJpbnRmKHN0ZGVyciwgIlNDQUxFOiAlZiwgU2Nyb2xsOiAlZCwgJWRcbiIsIHNjYWxlLCBz
Y3JvbGwueCwgc2Nyb2xsLnkpOworICAgIC8vIEZJWE1FOiBDb21wbGV0ZSB3cml0aW5nIHRoaXMg
dGVzdC4KK30KKwogY2xhc3MgVGVzdFJlbG9hZERvZXNudFJlZGlyZWN0V2ViRnJhbWVDbGllbnQg
OiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgV2ViTmF2aWdh
dGlvblBvbGljeSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9f
ZGl2X3Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2Nh
bGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU3YzA3MGNj
MDNlNTQ1ZmJiY2JlMDdlZTE1ZmVmODRiNzYyMGYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRv
X2Rpdl90ZXN0Lmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIDxk
aXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxl
ZnQ6IDBweDsgdG9wOiAwcHg7IHdpZHRoOiA2NDBweDsgaGVpZ2h0OiA0ODBweCI+CisgICAgICA8
cD5Ub3AgRGl2PC9wPgorICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7
IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMjAwcHg7IHRvcDogMjAwcHg7IHdpZHRoOiAyMDBw
eDsgaGVpZ2h0OiAxNTBweCI+CisgICAgICAgIDxwPkRpdiB0byB6b29tIHRvPC9wPgorICAgICAg
PC9kaXY+CisgICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125605</attachid>
            <date>2012-02-06 02:47:18 -0800</date>
            <delta_ts>2012-02-06 08:18:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120206054716.patch</filename>
            <type>text/plain</type>
            <size>18961</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTVkNTZiZjY4YTcyNTUw
NGE3NGQwZjJiM2MyY2U5NGJjNjgwOTVjMC4uZDMyZDE2MDZkNjY1NzE0MjAyMTNkYjgyMGMzYTZj
NzI5MGJjODY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTA2ICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3RzIC0tZ3Rlc3RfZmls
dGVyPVdlYkZyYW1lVGVzdC5EaXZBdXRvWm9vbVBhcmFtc1Rlc3QKKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OnNjYWxlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUV2ZW50
KToKKwogMjAxMi0wMi0wMiAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVHVybiBvbiBDU1MgRmlsdGVycyBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGM0N2Q2YWVkNzY1MTQ2ZWQ4N2IwZGU5NzFiNjI3OTJmNjUwMjViMWQuLmRkY2Zj
MjBkZjA0MWNmYWQyZDljNDhkZTI0NWJjYjg3YjY3MmE2OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDItMDYgIFZhcnVuIEphaW4gIDx2YXJ1bmph
aW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2QgdG8gV2ViVmll
d0ltcGwgdG8gZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUgZXZlbnRzIG9u
IHRvdWNoIGRldmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyOTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpXaWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QpOgor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorICAg
ICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHRlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9h
dXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0wMiAgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBVcGRh
dGUgZW51bSBuYW1lIGZvciBIaXRUZXN0UmVxdWVzdDo6UmVxdWVzdFR5cGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oCmluZGV4IGUzMTNiZTUwZTM5
MzJmOWNlMWNiYzU1YjQwMWRhMjc2MzJhNDU0MzMuLjI3YjM1N2NmNmE0MGZhZDFmMzM0Mzg3NTAy
YjIyZjJiNGI2MmMzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlRXZlbnQuaApAQCAtNDIsMTIgKzQyLDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci0gICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgZG91YmxlIHRpbWVzdGFtcCwg
ZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVksIGJvb2wgc2hpZnRLZXksIGJvb2wgY3RybEtleSwg
Ym9vbCBhbHRLZXksIGJvb2wgbWV0YUtleSkKKyAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudChUeXBl
IHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCBkb3VibGUgdGltZXN0YW1wLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgYm9v
bCBzaGlmdEtleSwgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5LCBmbG9h
dCBzY2FsZSA9IDAuMGYpCiAgICAgICAgIDogUGxhdGZvcm1FdmVudCh0eXBlLCBzaGlmdEtleSwg
Y3RybEtleSwgYWx0S2V5LCBtZXRhS2V5LCB0aW1lc3RhbXApCiAgICAgICAgICwgbV9wb3NpdGlv
bihwb3NpdGlvbikKICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQog
ICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKICAgICAgICAgLCBtX2RlbHRhWShkZWx0YVkpCisg
ICAgICAgICwgbV9zY2FsZShzY2FsZSkKICAgICB7CiAgICAgfQogCkBAIC01NiwxMiArNTcsMTQg
QEAgcHVibGljOgogCiAgICAgZmxvYXQgZGVsdGFYKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YVg7
IH0KICAgICBmbG9hdCBkZWx0YVkoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWTsgfQotICAgIAor
ICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9u
OwogICAgIGZsb2F0IG1fZGVsdGFYOwogICAgIGZsb2F0IG1fZGVsdGFZOworICAgIGZsb2F0IG1f
c2NhbGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggODRkZTc3MjljY2U1YWQ5MzZiNTA2NmQ3NDFk
NzFmZmNlZTUxMDg4Ni4uMWZhMDIxMTdhZTE3MTVjOGQzOGVjNjU3ZTc2MGJkOGZkZDczYWY3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTkzLDYg
KzE5MywxNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRDb21wb3NpdG9yQ29u
dGV4dEF0dHJpYnV0ZXMoKQogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCisvLyBUaGUgZm9s
bG93aW5nIGNvbnN0YW50cyBjb250cm9sIHBhcmFtZXRlcnMgZm9yIGF1dG9tYXRlZCBzY2FsaW5n
IG9mIHdlYnBhZ2VzCisvLyAoc3VjaCBhcyBkdWUgdG8gYSBkb3VibGUgdGFwIGdlc3R1cmUgb3Ig
ZmluZCBpbiBwYWdlIGV0Yy4pLiBUaGVzZSBhcmUKKy8vIGV4cGVyaW1lbnRhbGx5IGRldGVybWlu
ZWQuCitzdGF0aWMgY29uc3QgaW50IGtUb3VjaFBvaW50UGFkZGluZyA9IDMyOworc3RhdGljIGNv
bnN0IGZsb2F0IGtNaW5TY2FsZURpZmZlcmVuY2UgPSAwLjAxOworc3RhdGljIGNvbnN0IGZsb2F0
IGtEb3VibGVUYXBab29tQ29udGVudERlZmF1bHRNYXJnaW4gPSA1LjA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50TWluaW11bU1hcmdpbiA9IDIuMDsKKwogfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODAyLDE1ICs4MTAs
MTk2IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYg
ZXZlbnQpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFt
ZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50QnVpbGRlcik7
CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQotICAgIE93blB0cjxWZWN0b3I8V2Vi
Q29yZTo6UGxhdGZvcm1HZXN0dXJlRXZlbnQ+ID4gZ2VzdHVyZUV2ZW50cyhtX2dlc3R1cmVSZWNv
Z25pemVyLT5wcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmVzKHRvdWNoRXZlbnRCdWlsZGVyLCBk
ZWZhdWx0UHJldmVudGVkKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgIGkgPSAwOyBpIDwgZ2Vz
dHVyZUV2ZW50cy0+c2l6ZSgpOyBpKyspCi0gICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnRzLT5hdChp
KSk7CisgICAgT3duUHRyPFZlY3RvcjxQbGF0Zm9ybUdlc3R1cmVFdmVudD4gPiBnZXN0dXJlRXZl
bnRzKG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZXModG91
Y2hFdmVudEJ1aWxkZXIsIGRlZmF1bHRQcmV2ZW50ZWQpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGdlc3R1cmVFdmVudHMtPnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChnZXN0dXJl
RXZlbnRzLT5hdChpKS50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcCkg
eworICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSAxOworICAgICAgICAgICAgV2ViUG9pbnQgc2Ny
b2xsOworICAgICAgICAgICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIG9sZFBnZSA9IGdlc3R1cmVF
dmVudHMtPmF0KGkpOworICAgICAgICAgICAgV2ViUmVjdCBoaXRSZWN0KG9sZFBnZS5wb3NpdGlv
bigpLngoKSwgb2xkUGdlLnBvc2l0aW9uKCkueSgpLCAwLCAwKTsKKyAgICAgICAgICAgIGNvbXB1
dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoaGl0UmVjdCwgdHJ1ZSwgc2NhbGUsIHNjcm9sbCk7
CisgICAgICAgICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVHZXN0dXJlRXZlbnQoCisgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVu
dChvbGRQZ2UudHlwZSgpLCBvbGRQZ2UucG9zaXRpb24oKSwgb2xkUGdlLmdsb2JhbFBvc2l0aW9u
KCksIG9sZFBnZS50aW1lc3RhbXAoKSwKKyAgICAgICAgICAgICAgICAgIHNjcm9sbC54LCBzY3Jv
bGwueSwgb2xkUGdlLnNoaWZ0S2V5KCksIG9sZFBnZS5jdHJsS2V5KCksIG9sZFBnZS5hbHRLZXko
KSwgb2xkUGdlLm1ldGFLZXkoKSwgc2NhbGUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJl
RXZlbnQoZ2VzdHVyZUV2ZW50cy0+YXQoaSkpOworICAgIH0KICNlbmRpZgogCiAgICAgcmV0dXJu
IGRlZmF1bHRQcmV2ZW50ZWQ7CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09H
TklaRVIpCitXZWJSZWN0IFdlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMoY29uc3QgV2Vi
UmVjdCYgcmVjdCwgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCYgaXNVbmJvb3N0ZWRUZXh0KQor
eworICAgIGlzVW5ib29zdGVkVGV4dCA9IGZhbHNlOworICAgIGlmICghbWFpbkZyYW1lSW1wbCgp
KQorICAgICAgICByZXR1cm4gV2ViUmVjdCgpOworCisgICAgLy8gVXNlIHRoZSByZWN0LWJhc2Vk
IGhpdCB0ZXN0IHRvIGZpbmQgdGhlIG5vZGUuCisgICAgSW50UG9pbnQgcG9pbnQgPSBtYWluRnJh
bWVJbXBsKCktPmZyYW1lVmlldygpLT53aW5kb3dUb0NvbnRlbnRzKEludFBvaW50KHJlY3QueCwg
cmVjdC55KSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtYWluRnJhbWVJbXBsKCktPmZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwKKyAgICAg
ICAgICBmYWxzZSwgaWdub3JlQ2xpcHBpbmcsIERvbnRIaXRUZXN0U2Nyb2xsYmFycywgSGl0VGVz
dFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSwKKyAgICAgICAgICBJ
bnRTaXplKHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KSk7CisKKyAgICAvLyBGaW5kIHRoZSBtb3N0
IGJvb3N0ZWQgdGV4dCBub2RlIGludGVyc2VjdGVkIGJ5IHRoZSBoaXQgdGVzdCAoaWYgYW55KS4K
KyAgICBOb2RlKiBub2RlID0gMDsKKyAgICBmbG9hdCBncmVhdGVzdEJvb3N0aW5nRmFjdG9yID0g
MDsKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IHJlc3VsdC5y
ZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgTm9kZSogY3VycmVudCA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYgKGN1
cnJlbnQtPmlzVGV4dE5vZGUoKSAmJiBjdXJyZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAg
ICBmbG9hdCBib29zdGluZ0ZhY3RvciA9IGN1cnJlbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8gY3VycmVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICAgICAgaWYgKGJvb3N0aW5nRmFjdG9yID4gZ3Jl
YXRlc3RCb29zdGluZ0ZhY3RvcikgeworICAgICAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50Owor
ICAgICAgICAgICAgICAgIGlzVW5ib29zdGVkVGV4dCA9IGJvb3N0aW5nRmFjdG9yIDw9IDE7Cisg
ICAgICAgICAgICAgICAgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IGJvb3N0aW5nRmFjdG9yOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFub2RlKQorICAgICAg
ICBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworCisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm4gV2ViUmVjdCgpOworCisgICAgLy8gRmluZCB0aGUgYmxvY2sgdHlwZSBu
b2RlIGJhc2VkIG9uIHRoZSBoaXQgbm9kZS4KKyAgICB3aGlsZSAobm9kZSAmJiAoIW5vZGUtPnJl
bmRlcmVyKCkgfHwgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkpCisgICAgICAgIG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCBp
biB0aGUgd2luZG93IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGlmIChub2RlKSB7CisgICAgICAg
IEludFJlY3QgcmVjdCA9IG5vZGUtPk5vZGU6OmdldFJlY3QoKTsKKyAgICAgICAgRnJhbWUqIGZy
YW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAgICAgcmV0dXJuIGZyYW1lLT52
aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgfQorICAgIHJldHVybiBXZWJSZWN0
KCk7Cit9CisKK1dlYlJlY3QgV2ViVmlld0ltcGw6OldpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMo
Y29uc3QgV2ViUmVjdCYgc291cmNlLCBpbnQgdGFyZ2V0TWFyZ2luLCBpbnQgbWluaW11bU1hcmdp
bikKK3sKKyAgICBXZWJTaXplIG1heFNpemU7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAg
ICBtYXhTaXplID0gbWFpbkZyYW1lKCktPmNvbnRlbnRzU2l6ZSgpOworICAgIEludFNpemUgc2Ny
b2xsT2Zmc2V0OworICAgIGlmIChtYWluRnJhbWUoKSkKKyAgICAgICAgc2Nyb2xsT2Zmc2V0ID0g
bWFpbkZyYW1lKCktPnNjcm9sbE9mZnNldCgpOworICAgIGludCBsZWZ0TWFyZ2luID0gdGFyZ2V0
TWFyZ2luOworICAgIGludCByaWdodE1hcmdpbiA9IHRhcmdldE1hcmdpbjsKKworICAgIGNvbnN0
IGludCBhYnNvbHV0ZVNvdXJjZVggPSBzb3VyY2UueCArIHNjcm9sbE9mZnNldC53aWR0aCgpOwor
ICAgIGlmIChsZWZ0TWFyZ2luID4gYWJzb2x1dGVTb3VyY2VYKSB7CisgICAgICAgIGxlZnRNYXJn
aW4gPSBhYnNvbHV0ZVNvdXJjZVg7CisgICAgICAgIHJpZ2h0TWFyZ2luID0gbWF4KGxlZnRNYXJn
aW4sIG1pbmltdW1NYXJnaW4pOworICAgIH0KKworICAgIGNvbnN0IGludCBtYXhpbXVtUmlnaHRN
YXJnaW4gPSBtYXhTaXplLndpZHRoIC0gKHNvdXJjZS53aWR0aCArIGFic29sdXRlU291cmNlWCk7
CisgICAgaWYgKHJpZ2h0TWFyZ2luID4gbWF4aW11bVJpZ2h0TWFyZ2luKSB7CisgICAgICAgIHJp
Z2h0TWFyZ2luID0gbWF4aW11bVJpZ2h0TWFyZ2luOworICAgICAgICBsZWZ0TWFyZ2luID0gbWlu
KGxlZnRNYXJnaW4sIG1heChyaWdodE1hcmdpbiwgbWluaW11bU1hcmdpbikpOworICAgIH0KKwor
ICAgIGNvbnN0IGludCBuZXdXaWR0aCA9IHNvdXJjZS53aWR0aCArIGxlZnRNYXJnaW4gKyByaWdo
dE1hcmdpbjsKKyAgICBjb25zdCBpbnQgbmV3WCA9IHNvdXJjZS54IC0gbGVmdE1hcmdpbjsKKwor
ICAgIEFTU0VSVChuZXdXaWR0aCA+PSAwKTsKKyAgICBBU1NFUlQoc2Nyb2xsT2Zmc2V0LndpZHRo
KCkgKyBuZXdYICsgbmV3V2lkdGggPD0gbWF4U2l6ZS53aWR0aCk7CisKKyAgICByZXR1cm4gV2Vi
UmVjdChuZXdYLCBzb3VyY2UueSwgbmV3V2lkdGgsIHNvdXJjZS5oZWlnaHQpOworfQorCit2b2lk
IFdlYlZpZXdJbXBsOjpjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGNvbnN0IFdlYlJl
Y3QmIGhpdFJlY3QsIGJvb2wgZm9yRG91YmxlVGFwLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBz
Y3JvbGwpCit7CisgICAgc2NhbGUgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBzY3JvbGwueCA9
IHNjcm9sbC55ID0gMDsKKyAgICBXZWJSZWN0IHRhcmdldFJlY3QgPSBoaXRSZWN0OworICAgIGlm
ICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCA9IHRhcmdl
dFJlY3QuaGVpZ2h0ID0ga1RvdWNoUG9pbnRQYWRkaW5nOworCisgICAgYm9vbCBpc1VuYm9vc3Rl
ZFRleHQgPSBmYWxzZTsKKworICAgIFdlYlJlY3QgcmVjdCA9IGNvbXB1dGVCbG9ja0JvdW5kcyh0
YXJnZXRSZWN0LCAhZm9yRG91YmxlVGFwLCBpc1VuYm9vc3RlZFRleHQpOworCisgICAgY29uc3Qg
ZmxvYXQgb3ZlcnZpZXdTY2FsZSA9IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvcjsKKyAgICBib29s
IHNjYWxlVW5jaGFuZ2VkID0gdHJ1ZTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIC8vIFBhZ2VzIHNob3VsZCBiZSBhcyBsZWdpYmxlIGFzIG9uIGRlc2t0b3Agd2hlbiBhdCBk
cGkgc2NhbGUsIHNvIG5vCisgICAgICAgIC8vIG5lZWQgdG8gem9vbSBpbiBmdXJ0aGVyIHdoZW4g
YXV0b21hdGljYWxseSBkZXRlcm1pbmluZyB6b29tIGxldmVsCisgICAgICAgIC8vIChhZnRlciBk
b3VibGUgdGFwLCBmaW5kIGluIHBhZ2UsIGV0YyksIHRob3VnaCB0aGUgdXNlciBzaG91bGQgc3Rp
bGwKKyAgICAgICAgLy8gYmUgYWxsb3dlZCB0byBtYW51YWxseSBwaW5jaCB6b29tIGluIGZ1cnRo
ZXIgaWYgdGhleSBkZXNpcmUuCisgICAgICAgIC8vIEZJWE1FOiBJbmNsdWRlIGZvbnQgc2NhbGUg
ZmFjdG9yIG9uY2UgaXRzIGFkZGVkIHRvIHNldHRpbmdzLgorICAgICAgICBjb25zdCBmbG9hdCBt
YXhTY2FsZSA9IGRldmljZVNjYWxlRmFjdG9yKCkgKiAxIC8qIGZvbnQgc2NhbGUgZmFjdG9yICov
OworCisgICAgICAgIGNvbnN0IGZsb2F0IGRlZmF1bHRNYXJnaW4gPSBrRG91YmxlVGFwWm9vbUNv
bnRlbnREZWZhdWx0TWFyZ2luICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgY29uc3Qg
ZmxvYXQgbWluaW11bU1hcmdpbiA9IGtEb3VibGVUYXBab29tQ29udGVudE1pbmltdW1NYXJnaW4g
KiBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICAvLyBXZSB3YW50IHRoZSBtYXJnaW5zIHRv
IGhhdmUgdGhlIHNhbWUgcGh5c2ljYWwgc2l6ZSwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgLy8g
bmVlZCB0byBleHByZXNzIHRoZW0gaW4gcG9zdC1zY2FsZSBzaXplLiBUbyBkbyB0aGF0IHdlJ2Qg
bmVlZCB0byBrbm93CisgICAgICAgIC8vIHRoZSBzY2FsZSB3ZSdyZSBzY2FsaW5nIHRvLCBidXQg
dGhhdCBkZXBlbmRzIG9uIHRoZSBtYXJnaW5zLiBJbnN0ZWFkCisgICAgICAgIC8vIHdlIGV4cHJl
c3MgdGhlbSBhcyBhIGZyYWN0aW9uIG9mIHRoZSB0YXJnZXQgcmVjdGFuZ2xlOiB0aGlzIHdpbGwg
YmUKKyAgICAgICAgLy8gY29ycmVjdCBpZiB3ZSBlbmQgdXAgZnVsbHkgem9vbWluZyB0byBpdCwg
YW5kIHdvbid0IG1hdHRlciBpZiB3ZQorICAgICAgICAvLyBkb24ndC4KKyAgICAgICAgcmVjdCA9
IFdpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMocmVjdCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludD4oZGVmYXVsdE1hcmdpbiAqIHJlY3Qud2lkdGggLyBtX3NpemUud2lkdGgpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaW5pbXVtTWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6
ZS53aWR0aCkpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0byBzY3JlZW4sIHJlc3BlY3Rpbmcg
bGltaXRzLgorICAgICAgICBpZiAoaXNVbmJvb3N0ZWRUZXh0KQorICAgICAgICAgICAgc2NhbGUg
PSBtYXhTY2FsZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzY2FsZSAqPSBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9zaXplLndpZHRoKSAvIHJlY3Qud2lkdGg7CisgICAgICAgICAgICBzY2Fs
ZSA9IG1pbihzY2FsZSwgbWF4U2NhbGUpOworICAgICAgICB9CisgICAgICAgIHNjYWxlID0gY2xh
bXBQYWdlU2NhbGVGYWN0b3JUb0xpbWl0cyhzY2FsZSk7CisKKyAgICAgICAgc2NhbGVVbmNoYW5n
ZWQgPSBmYWJzKHBhZ2VTY2FsZUZhY3RvcigpIC0gc2NhbGUpIDwga01pblNjYWxlRGlmZmVyZW5j
ZTsKKyAgICB9CisKKyAgICBpZiAoZm9yRG91YmxlVGFwKSB7CisgICAgICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSB8fCBzY2FsZVVuY2hhbmdlZCkgeworICAgICAgICAgICAgLy8gWm9vbSBvdXQgdG8g
b3ZlcnZpZXcgbW9kZS4KKyAgICAgICAgICAgIGlmIChvdmVydmlld1NjYWxlKQorICAgICAgICAg
ICAgICAgIHNjYWxlID0gb3ZlcnZpZXdTY2FsZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAocmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gS2VlcCBj
dXJyZW50IHNjYWxlIChubyBuZWVkIHRvIHNjcm9sbCBhcyB4LHkgd2lsbCBub3JtYWxseSBhbHJl
YWR5CisgICAgICAgIC8vIGJlIHZpc2libGUpLiBGSVhNRTogUmV2aXNpdCB0aGlzIGlmIGl0IGlz
bid0IGFsd2F5cyB0cnVlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6
IElmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBhdXRvIHpvb20gZHVyaW5nIGZpbmQgaW4gcGFn
ZSwKKyAgICAvLyB0aGVuIGlmIHRoZSB1c2VyIG1hbnVhbGx5IHpvb21zIGluIGl0J2QgYmUgbmlj
ZSB0byBwcmVzZXJ2ZSB0aGUgcmVsYXRpdmUKKyAgICAvLyBpbmNyZWFzZSBpbiB6b29tIHRoZXkg
Y2F1c2VkIChpZiB0aGV5IHpvb20gb3V0IHRoZW4gaXQncyBvayB0byB6b29tCisgICAgLy8gdGhl
bSBiYWNrIGluIGFnYWluKS4gVGhpcyBpc24ndCBjb21wYXRpYmxlIHdpdGggb3VyIGN1cnJlbnQg
ZG91YmxlLXRhcAorICAgIC8vIHpvb20gc3RyYXRlZ3kgKGZpdHRpbmcgdGhlIGNvbnRhaW5pbmcg
YmxvY2sgdG8gdGhlIHNjcmVlbikgdGhvdWdoLgorCisgICAgZmxvYXQgc2NyZWVuSGVpZ2h0ID0g
bV9zaXplLmhlaWdodCAvIHNjYWxlICogcGFnZVNjYWxlRmFjdG9yKCk7CisgICAgZmxvYXQgc2Ny
ZWVuV2lkdGggPSBtX3NpemUud2lkdGggLyBzY2FsZSAqIHBhZ2VTY2FsZUZhY3RvcigpOworCisg
ICAgLy8gU2Nyb2xsIHRvIHZlcnRpY2FsbHkgYWxpZ24gdGhlIGJsb2NrLgorICAgIGlmIChyZWN0
LmhlaWdodCA8IHNjcmVlbkhlaWdodCkgeworICAgICAgICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBz
aG9ydCBibG9ja3MuCisgICAgICAgIHJlY3QueSAtPSAwLjUgKiAoc2NyZWVuSGVpZ2h0IC0gcmVj
dC5oZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEVuc3VyZSBwb3NpdGlvbiB3ZSdy
ZSB6b29taW5nIHRvICgrIHBhZGRpbmcpIGlzbid0IG9mZiB0aGUgYm90dG9tIG9mCisgICAgICAg
IC8vIHRoZSBzY3JlZW4uCisgICAgICAgIHJlY3QueSA9IG1heCgoZmxvYXQpIHJlY3QueSwgaGl0
UmVjdC55ICsga1RvdWNoUG9pbnRQYWRkaW5nIC0gc2NyZWVuSGVpZ2h0KTsKKyAgICB9IC8vIE90
aGVyd2lzZSB0b3AgYWxpZ24gdGhlIGJsb2NrLgorCisgICAgLy8gRG8gdGhlIHNhbWUgdGhpbmcg
Zm9yIGhvcml6b250YWwgYWxpZ25tZW50LgorICAgIGlmIChyZWN0LndpZHRoIDwgc2NyZWVuV2lk
dGgpCisgICAgICAgIHJlY3QueCAtPSAwLjUgKiAoc2NyZWVuV2lkdGggLSByZWN0LndpZHRoKTsK
KyAgICBlbHNlCisgICAgICAgIHJlY3QueCA9IG1heCgoZmxvYXQpIHJlY3QueCwgaGl0UmVjdC54
ICsga1RvdWNoUG9pbnRQYWRkaW5nIC0gc2NyZWVuV2lkdGgpOworCisgICAgc2Nyb2xsLnggPSBy
ZWN0Lng7CisgICAgc2Nyb2xsLnkgPSByZWN0Lnk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJWaWV3
SW1wbDo6bnVtYmVyT2ZXaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKHVuc2lnbmVkIG51bWJlck9m
V2hlZWxIYW5kbGVycykKIHsKICAgICBtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMgPSBudW1iZXJP
ZldoZWVsSGFuZGxlcnMgPiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKaW5kZXggYTAzOWEwOWNlYjg3YzIwZTNkYTg0MzMzMWYxYmVhYWVkM2Y0ZjEzMS4uN2M0ODVm
NWIxN2FmY2JiNzA1MzY0NjM5NzExNmU2ZWVhYTVmMmMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC00NjAsNiArNDYwLDcgQEAgcHVibGljOgogCiAjaWYg
RU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKICAgICB2b2lkIHJlc2V0R2VzdHVyZVJlY29nbml6
ZXIoKTsKKyAgICB2b2lkIGNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2Vi
UmVjdCYgaGl0UmVjdCwgYm9vbCBmb3JEb3VibGVUYXAsIGZsb2F0JiBzY2FsZSwgV2ViUG9pbnQm
IHNjcm9sbCk7CiAjZW5kaWYKIAogICAgIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBu
dW1UaW1lcyk7CkBAIC01MzIsNiArNTMzLDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVM
YXllclRyZWVWaWV3cG9ydCgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05J
WkVSKQorCisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBibG9jayB0eXBl
IG5vZGUgdG91Y2hlZCBieSB0aGUgaW5wdXQKKyAgICAvLyBwb2ludCB3aXRoIHRoZSBwYWRkaW5n
LgorICAgIFdlYlJlY3QgY29tcHV0ZUJsb2NrQm91bmRzKGNvbnN0IFdlYlJlY3QmLCBib29sIGln
bm9yZUNsaXBwaW5nLCBib29sJiBpc1VuYm9vc3RlZFRleHQpOworCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uOiBXaWRlbnMgdGhlIHdpZHRoIG9mIHxzb3VyY2V8IGJ5IHRoZSBzcGVjaWZpZWQgbWFy
Z2lucworICAgIC8vIHdoaWxlIGtlZXBpbmcgaXQgc21hbGxlciB0aGFuIHBhZ2Ugd2lkdGguCisg
ICAgV2ViUmVjdCBXaWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKGNvbnN0IFdlYlJlY3QmIHNvdXJj
ZSwgaW50IHRhcmdldE1hcmdpbiwgaW50IG1pbmltdW1NYXJnaW4pOworI2VuZGlmCisKICNpZiBF
TkFCTEUoUE9JTlRFUl9MT0NLKQogICAgIHZvaWQgcG9pbnRlckxvY2tNb3VzZUV2ZW50KGNvbnN0
IFdlYklucHV0RXZlbnQmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJGcmFtZVRlc3QuY3BwCmluZGV4IDA2YjI2NDY5YTA1MTRlOTdmNzljOWNjZWQ5N2E0NDM5
MmI2NjA2MjQuLmY5ZDNlNTNiYzQ1NmQxNGNiNTRiOWVmNDQxYjc1ZGNhM2M3NWY5ZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKQEAgLTE1MSw2
ICsxNTEsNzYgQEAgVEVTVF9GKFdlYkZyYW1lVGVzdCwgQ2hyb21lUGFnZU5vSmF2YXNjcmlwdCkK
ICAgICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmc6Om5wb3MsIGNvbnRlbnQuZmluZCgiQ2xvYmJlcmVk
IikpOwogfQogCitURVNUX0YoV2ViRnJhbWVUZXN0LCBEaXZBdXRvWm9vbVBhcmFtc1Rlc3QpCit7
CisgICAgcmVnaXN0ZXJNb2NrZWRIdHRwVVJMTG9hZCgiZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21f
aW50b19kaXZfdGVzdC5odG1sIik7CisKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwgPSBz
dGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdB
bmRMb2FkKG1fYmFzZVVSTCArICJnZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0
Lmh0bWwiLCB0cnVlKSk7CisgICAgaW50IHBhZ2VXaWR0aCA9IDY0MDsKKyAgICBpbnQgcGFnZUhl
aWdodCA9IDQ4MDsKKyAgICBpbnQgZGl2UG9zWCA9IDIwMDsKKyAgICBpbnQgZGl2UG9zWSA9IDIw
MDsKKyAgICBpbnQgZGl2V2lkdGggPSAyMDA7CisgICAgaW50IGRpdkhlaWdodCA9IDE1MDsKKyAg
ICBXZWJSZWN0IGRvdWJsZVRhcFBvaW50KDI1MCwgMjUwLCAwLCAwKTsKKyAgICB3ZWJWaWV3SW1w
bC0+cmVzaXplKFdlYlNpemUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgZmxvYXQgc2Nh
bGU7CisgICAgV2ViUG9pbnQgc2Nyb2xsOworCisgICAgLy8gVGVzdCBmb3IgRG91YmxldGFwIHNj
YWxpbmcKKworICAgIC8vIFRlc3RzIGZvciB6b29taW5nIGluIGFuZCBvdXQgd2l0aG91dCBjbGFt
cGluZy4KKyAgICAvLyBTZXQgZGV2aWNlIHNjYWxlIGFuZCBzY2FsZSBsaW1pdHMgc28gd2UgZG9u
dCBnZXQgY2xhbXBlZC4KKyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoNCk7
CisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cygwLCA0IC8gd2ViVmll
d0ltcGwtPmRldmljZVNjYWxlRmFjdG9yKCkpOworCisgICAgLy8gVGVzdCB6b29taW5nIGludG8g
ZGl2LgorICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRv
dWJsZVRhcFBvaW50LCB0cnVlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBmbG9hdCBzY2FsZWREaXZX
aWR0aCA9IGRpdldpZHRoICogc2NhbGU7CisgICAgZmxvYXQgc2NhbGVkRGl2SGVpZ2h0ID0gZGl2
SGVpZ2h0ICogc2NhbGU7CisgICAgaW50IGhTY3JvbGwgPSAoKGRpdlBvc1ggKiBzY2FsZSkgLSAo
KHBhZ2VXaWR0aCAtIHNjYWxlZERpdldpZHRoKSAvIDIpKSAvIHNjYWxlOworICAgIGludCB2U2Ny
b2xsID0gKChkaXZQb3NZICogc2NhbGUpIC0gKChwYWdlSGVpZ2h0IC0gc2NhbGVkRGl2SGVpZ2h0
KSAvIDIpKSAvIHNjYWxlOworICAgIEVYUEVDVF9GTE9BVF9FUShwYWdlV2lkdGggLyAoZGl2V2lk
dGggKyAxMi4wIC8qIG1hcmdpbiAqLyksIHNjYWxlKTsKKyAgICBFWFBFQ1RfRVEoaFNjcm9sbCwg
c2Nyb2xsLngpOworICAgIEVYUEVDVF9FUSh2U2Nyb2xsLCBzY3JvbGwueSk7CisKKyAgICAvLyBU
ZXN0IHpvb20gb3V0IHRvIG92ZXJ2aWV3IHNjYWxlLgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNj
cm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUg
LyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5jb21w
dXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCB0cnVlLCBzY2FsZSwg
c2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgc2NhbGUpOworICAgIEVYUEVDVF9FUShX
ZWJQb2ludCgwLCAwKSwgc2Nyb2xsKTsKKworICAgIC8vIFRlc3RzIGZvciBjbGFtcGVkIHNjYWxp
bmcuCisgICAgLy8gVGVzdCBjbGFtcCB0byBkZXZpY2Ugc2NhbGU6CisgICAgd2ViVmlld0ltcGwt
PmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkp
LCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0lt
cGwtPnNldERldmljZVNjYWxlRmFjdG9yKDIuNSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVT
Y2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIHRydWUsIHNjYWxlLCBzY3Jv
bGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLjUsIHNjYWxlKTsKKworICAgIC8vIFRlc3QgY2xh
bXAgdG8gbWluaW11bSBzY2FsZToKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2Fs
ZShXZWJDb3JlOjpJbnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0lt
cGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFj
dG9yTGltaXRzKDEuNSAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpLCA0IC8gd2Vi
Vmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5jb21wdXRl
U2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCB0cnVlLCBzY2FsZSwgc2Ny
b2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS41LCBzY2FsZSk7CisgICAgRVhQRUNUX0VRKFdl
YlBvaW50KDAsIDApLCBzY3JvbGwpOworCisgICAgLy8gVGVzdCBjbGFtcCB0byBtYXhpbXVtIHNj
YWxlOgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNp
emUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFj
dG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3
ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDMgLyB3ZWJWaWV3SW1wbC0+
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNj
cm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIHRydWUsIHNjYWxlLCBzY3JvbGwpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgzLCBzY2FsZSk7CisKKworICAgIC8vIFRlc3QgZm9yIE5vbi1kb3Vi
bGV0YXAgc2NhbGluZworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3IoMSwgV2Vi
UG9pbnQoMCwgMCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsK
KyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDQgLyB3ZWJWaWV3
SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgLy8gVGVzdCB6b29taW5nIGludG8gZGl2
LgorICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KFdlYlJl
Y3QoMjUwLCAyNTAsIDEwLCAxMCksIGZhbHNlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEocGFnZVdpZHRoIC8gKGRpdldpZHRoICsgMTIuMCAvKiBtYXJnaW4gKi8pLCBzY2Fs
ZSk7Cit9CisKIGNsYXNzIFRlc3RSZWxvYWREb2VzbnRSZWRpcmVjdFdlYkZyYW1lQ2xpZW50IDog
cHVibGljIFdlYkZyYW1lQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYk5hdmlnYXRp
b25Qb2xpY3kgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbigKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rp
dl90ZXN0Lmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZ2V0X3NjYWxl
X2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllN2MwNzBjYzAz
ZTU0NWZiYmNiZTA3ZWUxNWZlZjg0Yjc2MjBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19k
aXZfdGVzdC5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzxodG1sPgorICA8Ym9keT4KKyAgICA8ZGl2
IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0
OiAwcHg7IHRvcDogMHB4OyB3aWR0aDogNjQwcHg7IGhlaWdodDogNDgwcHgiPgorICAgICAgPHA+
VG9wIERpdjwvcD4KKyAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBw
b3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDIwMHB4OyB0b3A6IDIwMHB4OyB3aWR0aDogMjAwcHg7
IGhlaWdodDogMTUwcHgiPgorICAgICAgICA8cD5EaXYgdG8gem9vbSB0bzwvcD4KKyAgICAgIDwv
ZGl2PgorICAgIDwvZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125650</attachid>
            <date>2012-02-06 08:18:28 -0800</date>
            <delta_ts>2012-02-06 08:31:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120206111825.patch</filename>
            <type>text/plain</type>
            <size>19425</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTVkNTZiZjY4YTcyNTUw
NGE3NGQwZjJiM2MyY2U5NGJjNjgwOTVjMC4uZDMyZDE2MDZkNjY1NzE0MjAyMTNkYjgyMGMzYTZj
NzI5MGJjODY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTA2ICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3RzIC0tZ3Rlc3RfZmls
dGVyPVdlYkZyYW1lVGVzdC5EaXZBdXRvWm9vbVBhcmFtc1Rlc3QKKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OnNjYWxlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUV2ZW50
KToKKwogMjAxMi0wMi0wMiAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVHVybiBvbiBDU1MgRmlsdGVycyBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGM0N2Q2YWVkNzY1MTQ2ZWQ4N2IwZGU5NzFiNjI3OTJmNjUwMjViMWQuLjcwMjY1
ZWY5NjE0MjFjNmNhMzlkNjUyOGRiZTI3MzZhYWVlMzE3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDItMDYgIFZhcnVuIEphaW4gIDx2YXJ1bmph
aW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2QgdG8gV2ViVmll
d0ltcGwgdG8gZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUgZXZlbnRzIG9u
IHRvdWNoIGRldmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyOTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjp3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QpOgor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorICAg
ICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHRlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9h
dXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0wMiAgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBVcGRh
dGUgZW51bSBuYW1lIGZvciBIaXRUZXN0UmVxdWVzdDo6UmVxdWVzdFR5cGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oCmluZGV4IGUzMTNiZTUwZTM5
MzJmOWNlMWNiYzU1YjQwMWRhMjc2MzJhNDU0MzMuLjI3YjM1N2NmNmE0MGZhZDFmMzM0Mzg3NTAy
YjIyZjJiNGI2MmMzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlRXZlbnQuaApAQCAtNDIsMTIgKzQyLDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci0gICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgZG91YmxlIHRpbWVzdGFtcCwg
ZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVksIGJvb2wgc2hpZnRLZXksIGJvb2wgY3RybEtleSwg
Ym9vbCBhbHRLZXksIGJvb2wgbWV0YUtleSkKKyAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudChUeXBl
IHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCBkb3VibGUgdGltZXN0YW1wLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgYm9v
bCBzaGlmdEtleSwgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5LCBmbG9h
dCBzY2FsZSA9IDAuMGYpCiAgICAgICAgIDogUGxhdGZvcm1FdmVudCh0eXBlLCBzaGlmdEtleSwg
Y3RybEtleSwgYWx0S2V5LCBtZXRhS2V5LCB0aW1lc3RhbXApCiAgICAgICAgICwgbV9wb3NpdGlv
bihwb3NpdGlvbikKICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQog
ICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKICAgICAgICAgLCBtX2RlbHRhWShkZWx0YVkpCisg
ICAgICAgICwgbV9zY2FsZShzY2FsZSkKICAgICB7CiAgICAgfQogCkBAIC01NiwxMiArNTcsMTQg
QEAgcHVibGljOgogCiAgICAgZmxvYXQgZGVsdGFYKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YVg7
IH0KICAgICBmbG9hdCBkZWx0YVkoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWTsgfQotICAgIAor
ICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9u
OwogICAgIGZsb2F0IG1fZGVsdGFYOwogICAgIGZsb2F0IG1fZGVsdGFZOworICAgIGZsb2F0IG1f
c2NhbGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggODRkZTc3MjljY2U1YWQ5MzZiNTA2NmQ3NDFk
NzFmZmNlZTUxMDg4Ni4uNzE5MTBlMTc1NDI3MWJlZmJiZjBkY2VkYmRlMjVmODJlZDkyMzc2NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTkzLDYg
KzE5MywxNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRDb21wb3NpdG9yQ29u
dGV4dEF0dHJpYnV0ZXMoKQogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCisvLyBUaGUgZm9s
bG93aW5nIGNvbnN0YW50cyBjb250cm9sIHBhcmFtZXRlcnMgZm9yIGF1dG9tYXRlZCBzY2FsaW5n
IG9mIHdlYnBhZ2VzCisvLyAoc3VjaCBhcyBkdWUgdG8gYSBkb3VibGUgdGFwIGdlc3R1cmUgb3Ig
ZmluZCBpbiBwYWdlIGV0Yy4pLiBUaGVzZSBhcmUKKy8vIGV4cGVyaW1lbnRhbGx5IGRldGVybWlu
ZWQuCitzdGF0aWMgY29uc3QgaW50IGtUb3VjaFBvaW50UGFkZGluZyA9IDMyOworc3RhdGljIGNv
bnN0IGZsb2F0IGtNaW5TY2FsZURpZmZlcmVuY2UgPSAwLjAxOworc3RhdGljIGNvbnN0IGZsb2F0
IGtEb3VibGVUYXBab29tQ29udGVudERlZmF1bHRNYXJnaW4gPSA1LjA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50TWluaW11bU1hcmdpbiA9IDIuMDsKKwogfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODAyLDE1ICs4MTAs
MTk2IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYg
ZXZlbnQpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFt
ZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50QnVpbGRlcik7
CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQotICAgIE93blB0cjxWZWN0b3I8V2Vi
Q29yZTo6UGxhdGZvcm1HZXN0dXJlRXZlbnQ+ID4gZ2VzdHVyZUV2ZW50cyhtX2dlc3R1cmVSZWNv
Z25pemVyLT5wcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmVzKHRvdWNoRXZlbnRCdWlsZGVyLCBk
ZWZhdWx0UHJldmVudGVkKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgIGkgPSAwOyBpIDwgZ2Vz
dHVyZUV2ZW50cy0+c2l6ZSgpOyBpKyspCi0gICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnRzLT5hdChp
KSk7CisgICAgT3duUHRyPFZlY3RvcjxQbGF0Zm9ybUdlc3R1cmVFdmVudD4gPiBnZXN0dXJlRXZl
bnRzKG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZXModG91
Y2hFdmVudEJ1aWxkZXIsIGRlZmF1bHRQcmV2ZW50ZWQpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGdlc3R1cmVFdmVudHMtPnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChnZXN0dXJl
RXZlbnRzLT5hdChpKS50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcCkg
eworICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSAxOworICAgICAgICAgICAgV2ViUG9pbnQgc2Ny
b2xsOworICAgICAgICAgICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIG9sZFBnZSA9IGdlc3R1cmVF
dmVudHMtPmF0KGkpOworICAgICAgICAgICAgV2ViUmVjdCBoaXRSZWN0KG9sZFBnZS5wb3NpdGlv
bigpLngoKSwgb2xkUGdlLnBvc2l0aW9uKCkueSgpLCAwLCAwKTsKKyAgICAgICAgICAgIGNvbXB1
dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoaGl0UmVjdCwgRG91YmxlVGFwLCBzY2FsZSwgc2Ny
b2xsKTsKKyAgICAgICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZUdlc3R1cmVFdmVudCgKKyAgICAgICAgICAgICAgICAgIFBsYXRmb3JtR2VzdHVy
ZUV2ZW50KG9sZFBnZS50eXBlKCksIG9sZFBnZS5wb3NpdGlvbigpLCBvbGRQZ2UuZ2xvYmFsUG9z
aXRpb24oKSwgb2xkUGdlLnRpbWVzdGFtcCgpLAorICAgICAgICAgICAgICAgICAgc2Nyb2xsLngs
IHNjcm9sbC55LCBvbGRQZ2Uuc2hpZnRLZXkoKSwgb2xkUGdlLmN0cmxLZXkoKSwgb2xkUGdlLmFs
dEtleSgpLCBvbGRQZ2UubWV0YUtleSgpLCBzY2FsZSkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdl
c3R1cmVFdmVudChnZXN0dXJlRXZlbnRzLT5hdChpKSk7CisgICAgfQogI2VuZGlmCiAKICAgICBy
ZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVf
UkVDT0dOSVpFUikKK1dlYlJlY3QgV2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyhjb25z
dCBXZWJSZWN0JiByZWN0LCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sJiBpc1VuYm9vc3RlZFRl
eHQpCit7CisgICAgaXNVbmJvb3N0ZWRUZXh0ID0gZmFsc2U7CisgICAgaWYgKCFtYWluRnJhbWVJ
bXBsKCkpCisgICAgICAgIHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBVc2UgdGhlIHJlY3Qt
YmFzZWQgaGl0IHRlc3QgdG8gZmluZCB0aGUgbm9kZS4KKyAgICBJbnRQb2ludCBwb2ludCA9IG1h
aW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCktPndpbmRvd1RvQ29udGVudHMoSW50UG9pbnQocmVj
dC54LCByZWN0LnkpKTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1haW5GcmFtZUltcGwo
KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LAor
ICAgICAgICAgICAgZmFsc2UsIGlnbm9yZUNsaXBwaW5nLCBEb250SGl0VGVzdFNjcm9sbGJhcnMs
IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksCisgICAg
ICAgICAgICBJbnRTaXplKHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KSk7CisKKyAgICAvLyBGaW5k
IHRoZSBtb3N0IGJvb3N0ZWQgdGV4dCBub2RlIGludGVyc2VjdGVkIGJ5IHRoZSBoaXQgdGVzdCAo
aWYgYW55KS4KKyAgICBOb2RlKiBub2RlID0gMDsKKyAgICBmbG9hdCBncmVhdGVzdEJvb3N0aW5n
RmFjdG9yID0gMDsKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9
IHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQ
dHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3Qu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgTm9kZSogY3VycmVudCA9IGl0LT5nZXQoKTsKKyAgICAg
ICAgaWYgKGN1cnJlbnQtPmlzVGV4dE5vZGUoKSAmJiBjdXJyZW50LT5yZW5kZXJlcigpKSB7Cisg
ICAgICAgICAgICBmbG9hdCBib29zdGluZ0ZhY3RvciA9IGN1cnJlbnQtPnJlbmRlcmVyKCktPnN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIC8KKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3Bl
Y2lmaWVkU2l6ZSgpOworICAgICAgICAgICAgaWYgKGJvb3N0aW5nRmFjdG9yID4gZ3JlYXRlc3RC
b29zdGluZ0ZhY3RvcikgeworICAgICAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50OworICAgICAg
ICAgICAgICAgIGlzVW5ib29zdGVkVGV4dCA9IGJvb3N0aW5nRmFjdG9yIDw9IDE7CisgICAgICAg
ICAgICAgICAgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IGJvb3N0aW5nRmFjdG9yOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFub2RlKQorICAgICAgICBub2Rl
ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworCisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4gV2ViUmVjdCgpOworCisgICAgLy8gRmluZCB0aGUgYmxvY2sgdHlwZSBub2RlIGJh
c2VkIG9uIHRoZSBoaXQgbm9kZS4KKyAgICB3aGlsZSAobm9kZSAmJiAoIW5vZGUtPnJlbmRlcmVy
KCkgfHwgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkpCisgICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCBpbiB0aGUg
d2luZG93IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGlmIChub2RlKSB7CisgICAgICAgIEludFJl
Y3QgcmVjdCA9IG5vZGUtPk5vZGU6OmdldFJlY3QoKTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0g
bm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAgICAgcmV0dXJuIGZyYW1lLT52aWV3KCkt
PmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgfQorICAgIHJldHVybiBXZWJSZWN0KCk7Cit9
CisKK1dlYlJlY3QgV2ViVmlld0ltcGw6OndpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMoY29uc3Qg
V2ViUmVjdCYgc291cmNlLCBpbnQgdGFyZ2V0TWFyZ2luLCBpbnQgbWluaW11bU1hcmdpbikKK3sK
KyAgICBXZWJTaXplIG1heFNpemU7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAgICBtYXhT
aXplID0gbWFpbkZyYW1lKCktPmNvbnRlbnRzU2l6ZSgpOworICAgIEludFNpemUgc2Nyb2xsT2Zm
c2V0OworICAgIGlmIChtYWluRnJhbWUoKSkKKyAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gbWFpbkZy
YW1lKCktPnNjcm9sbE9mZnNldCgpOworICAgIGludCBsZWZ0TWFyZ2luID0gdGFyZ2V0TWFyZ2lu
OworICAgIGludCByaWdodE1hcmdpbiA9IHRhcmdldE1hcmdpbjsKKworICAgIGNvbnN0IGludCBh
YnNvbHV0ZVNvdXJjZVggPSBzb3VyY2UueCArIHNjcm9sbE9mZnNldC53aWR0aCgpOworICAgIGlm
IChsZWZ0TWFyZ2luID4gYWJzb2x1dGVTb3VyY2VYKSB7CisgICAgICAgIGxlZnRNYXJnaW4gPSBh
YnNvbHV0ZVNvdXJjZVg7CisgICAgICAgIHJpZ2h0TWFyZ2luID0gbWF4KGxlZnRNYXJnaW4sIG1p
bmltdW1NYXJnaW4pOworICAgIH0KKworICAgIGNvbnN0IGludCBtYXhpbXVtUmlnaHRNYXJnaW4g
PSBtYXhTaXplLndpZHRoIC0gKHNvdXJjZS53aWR0aCArIGFic29sdXRlU291cmNlWCk7CisgICAg
aWYgKHJpZ2h0TWFyZ2luID4gbWF4aW11bVJpZ2h0TWFyZ2luKSB7CisgICAgICAgIHJpZ2h0TWFy
Z2luID0gbWF4aW11bVJpZ2h0TWFyZ2luOworICAgICAgICBsZWZ0TWFyZ2luID0gbWluKGxlZnRN
YXJnaW4sIG1heChyaWdodE1hcmdpbiwgbWluaW11bU1hcmdpbikpOworICAgIH0KKworICAgIGNv
bnN0IGludCBuZXdXaWR0aCA9IHNvdXJjZS53aWR0aCArIGxlZnRNYXJnaW4gKyByaWdodE1hcmdp
bjsKKyAgICBjb25zdCBpbnQgbmV3WCA9IHNvdXJjZS54IC0gbGVmdE1hcmdpbjsKKworICAgIEFT
U0VSVChuZXdXaWR0aCA+PSAwKTsKKyAgICBBU1NFUlQoc2Nyb2xsT2Zmc2V0LndpZHRoKCkgKyBu
ZXdYICsgbmV3V2lkdGggPD0gbWF4U2l6ZS53aWR0aCk7CisKKyAgICByZXR1cm4gV2ViUmVjdChu
ZXdYLCBzb3VyY2UueSwgbmV3V2lkdGgsIHNvdXJjZS5oZWlnaHQpOworfQorCit2b2lkIFdlYlZp
ZXdJbXBsOjpjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGNvbnN0IFdlYlJlY3QmIGhp
dFJlY3QsIEF1dG9ab29tVHlwZSB6b29tVHlwZSwgZmxvYXQmIHNjYWxlLCBXZWJQb2ludCYgc2Ny
b2xsKQoreworICAgIHNjYWxlID0gcGFnZVNjYWxlRmFjdG9yKCk7CisgICAgc2Nyb2xsLnggPSBz
Y3JvbGwueSA9IDA7CisgICAgV2ViUmVjdCB0YXJnZXRSZWN0ID0gaGl0UmVjdDsKKyAgICBpZiAo
dGFyZ2V0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHRhcmdldFJlY3Qud2lkdGggPSB0YXJnZXRS
ZWN0LmhlaWdodCA9IGtUb3VjaFBvaW50UGFkZGluZzsKKworICAgIGJvb2wgaXNVbmJvb3N0ZWRU
ZXh0ID0gZmFsc2U7CisKKyAgICBXZWJSZWN0IHJlY3QgPSBjb21wdXRlQmxvY2tCb3VuZHModGFy
Z2V0UmVjdCwgem9vbVR5cGUgPT0gRmluZEluUGFnZSwgaXNVbmJvb3N0ZWRUZXh0KTsKKworICAg
IGNvbnN0IGZsb2F0IG92ZXJ2aWV3U2NhbGUgPSBtX21pbmltdW1QYWdlU2NhbGVGYWN0b3I7Cisg
ICAgYm9vbCBzY2FsZVVuY2hhbmdlZCA9IHRydWU7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkg
eworICAgICAgICAvLyBQYWdlcyBzaG91bGQgYmUgYXMgbGVnaWJsZSBhcyBvbiBkZXNrdG9wIHdo
ZW4gYXQgZHBpIHNjYWxlLCBzbyBubworICAgICAgICAvLyBuZWVkIHRvIHpvb20gaW4gZnVydGhl
ciB3aGVuIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5pbmcgem9vbSBsZXZlbAorICAgICAgICAvLyAo
YWZ0ZXIgZG91YmxlIHRhcCwgZmluZCBpbiBwYWdlLCBldGMpLCB0aG91Z2ggdGhlIHVzZXIgc2hv
dWxkIHN0aWxsCisgICAgICAgIC8vIGJlIGFsbG93ZWQgdG8gbWFudWFsbHkgcGluY2ggem9vbSBp
biBmdXJ0aGVyIGlmIHRoZXkgZGVzaXJlLgorICAgICAgICAvLyBGSVhNRTogSW5jbHVkZSBmb250
IHNjYWxlIGZhY3RvciBvbmNlIGl0cyBhZGRlZCB0byBzZXR0aW5ncy4KKyAgICAgICAgY29uc3Qg
ZmxvYXQgbWF4U2NhbGUgPSBkZXZpY2VTY2FsZUZhY3RvcigpICogMSAvKiBmb250IHNjYWxlIGZh
Y3RvciAqLzsKKworICAgICAgICBjb25zdCBmbG9hdCBkZWZhdWx0TWFyZ2luID0ga0RvdWJsZVRh
cFpvb21Db250ZW50RGVmYXVsdE1hcmdpbiAqIGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAg
IGNvbnN0IGZsb2F0IG1pbmltdW1NYXJnaW4gPSBrRG91YmxlVGFwWm9vbUNvbnRlbnRNaW5pbXVt
TWFyZ2luICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgbWFy
Z2lucyB0byBoYXZlIHRoZSBzYW1lIHBoeXNpY2FsIHNpemUsIHdoaWNoIG1lYW5zIHdlCisgICAg
ICAgIC8vIG5lZWQgdG8gZXhwcmVzcyB0aGVtIGluIHBvc3Qtc2NhbGUgc2l6ZS4gVG8gZG8gdGhh
dCB3ZSdkIG5lZWQgdG8ga25vdworICAgICAgICAvLyB0aGUgc2NhbGUgd2UncmUgc2NhbGluZyB0
bywgYnV0IHRoYXQgZGVwZW5kcyBvbiB0aGUgbWFyZ2lucy4gSW5zdGVhZAorICAgICAgICAvLyB3
ZSBleHByZXNzIHRoZW0gYXMgYSBmcmFjdGlvbiBvZiB0aGUgdGFyZ2V0IHJlY3RhbmdsZTogdGhp
cyB3aWxsIGJlCisgICAgICAgIC8vIGNvcnJlY3QgaWYgd2UgZW5kIHVwIGZ1bGx5IHpvb21pbmcg
dG8gaXQsIGFuZCB3b24ndCBtYXR0ZXIgaWYgd2UKKyAgICAgICAgLy8gZG9uJ3QuCisgICAgICAg
IHJlY3QgPSB3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKHJlY3QsCisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihkZWZhdWx0TWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6ZS53aWR0
aCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaW5pbXVtTWFyZ2luICogcmVj
dC53aWR0aCAvIG1fc2l6ZS53aWR0aCkpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0byBzY3Jl
ZW4sIHJlc3BlY3RpbmcgbGltaXRzLgorICAgICAgICBpZiAoaXNVbmJvb3N0ZWRUZXh0KQorICAg
ICAgICAgICAgc2NhbGUgPSBtYXhTY2FsZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBz
Y2FsZSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zaXplLndpZHRoKSAvIHJlY3Qud2lkdGg7Cisg
ICAgICAgICAgICBzY2FsZSA9IG1pbihzY2FsZSwgbWF4U2NhbGUpOworICAgICAgICB9CisgICAg
ICAgIHNjYWxlID0gY2xhbXBQYWdlU2NhbGVGYWN0b3JUb0xpbWl0cyhzY2FsZSk7CisKKyAgICAg
ICAgc2NhbGVVbmNoYW5nZWQgPSBmYWJzKHBhZ2VTY2FsZUZhY3RvcigpIC0gc2NhbGUpIDwga01p
blNjYWxlRGlmZmVyZW5jZTsKKyAgICB9CisKKyAgICBpZiAoem9vbVR5cGUgPT0gRG91YmxlVGFw
KSB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBzY2FsZVVuY2hhbmdlZCkgeworICAg
ICAgICAgICAgLy8gWm9vbSBvdXQgdG8gb3ZlcnZpZXcgbW9kZS4KKyAgICAgICAgICAgIGlmIChv
dmVydmlld1NjYWxlKQorICAgICAgICAgICAgICAgIHNjYWxlID0gb3ZlcnZpZXdTY2FsZTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocmVjdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gS2VlcCBjdXJyZW50IHNjYWxlIChubyBuZWVkIHRvIHNjcm9sbCBh
cyB4LHkgd2lsbCBub3JtYWxseSBhbHJlYWR5CisgICAgICAgIC8vIGJlIHZpc2libGUpLiBGSVhN
RTogUmV2aXNpdCB0aGlzIGlmIGl0IGlzbid0IGFsd2F5cyB0cnVlLgorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBhdXRv
IHpvb20gZHVyaW5nIGZpbmQgaW4gcGFnZSwKKyAgICAvLyB0aGVuIGlmIHRoZSB1c2VyIG1hbnVh
bGx5IHpvb21zIGluIGl0J2QgYmUgbmljZSB0byBwcmVzZXJ2ZSB0aGUgcmVsYXRpdmUKKyAgICAv
LyBpbmNyZWFzZSBpbiB6b29tIHRoZXkgY2F1c2VkIChpZiB0aGV5IHpvb20gb3V0IHRoZW4gaXQn
cyBvayB0byB6b29tCisgICAgLy8gdGhlbSBiYWNrIGluIGFnYWluKS4gVGhpcyBpc24ndCBjb21w
YXRpYmxlIHdpdGggb3VyIGN1cnJlbnQgZG91YmxlLXRhcAorICAgIC8vIHpvb20gc3RyYXRlZ3kg
KGZpdHRpbmcgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHNjcmVlbikgdGhvdWdoLgorCisg
ICAgZmxvYXQgc2NyZWVuSGVpZ2h0ID0gbV9zaXplLmhlaWdodCAvIHNjYWxlICogcGFnZVNjYWxl
RmFjdG9yKCk7CisgICAgZmxvYXQgc2NyZWVuV2lkdGggPSBtX3NpemUud2lkdGggLyBzY2FsZSAq
IHBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgLy8gU2Nyb2xsIHRvIHZlcnRpY2FsbHkgYWxpZ24g
dGhlIGJsb2NrLgorICAgIGlmIChyZWN0LmhlaWdodCA8IHNjcmVlbkhlaWdodCkgeworICAgICAg
ICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBzaG9ydCBibG9ja3MuCisgICAgICAgIHJlY3QueSAtPSAw
LjUgKiAoc2NyZWVuSGVpZ2h0IC0gcmVjdC5oZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIEVuc3VyZSBwb3NpdGlvbiB3ZSdyZSB6b29taW5nIHRvICgrIHBhZGRpbmcpIGlzbid0IG9m
ZiB0aGUgYm90dG9tIG9mCisgICAgICAgIC8vIHRoZSBzY3JlZW4uCisgICAgICAgIHJlY3QueSA9
IG1heCgoZmxvYXQpIHJlY3QueSwgaGl0UmVjdC55ICsga1RvdWNoUG9pbnRQYWRkaW5nIC0gc2Ny
ZWVuSGVpZ2h0KTsKKyAgICB9IC8vIE90aGVyd2lzZSB0b3AgYWxpZ24gdGhlIGJsb2NrLgorCisg
ICAgLy8gRG8gdGhlIHNhbWUgdGhpbmcgZm9yIGhvcml6b250YWwgYWxpZ25tZW50LgorICAgIGlm
IChyZWN0LndpZHRoIDwgc2NyZWVuV2lkdGgpCisgICAgICAgIHJlY3QueCAtPSAwLjUgKiAoc2Ny
ZWVuV2lkdGggLSByZWN0LndpZHRoKTsKKyAgICBlbHNlCisgICAgICAgIHJlY3QueCA9IG1heCgo
ZmxvYXQpIHJlY3QueCwgaGl0UmVjdC54ICsga1RvdWNoUG9pbnRQYWRkaW5nIC0gc2NyZWVuV2lk
dGgpOworCisgICAgc2Nyb2xsLnggPSByZWN0Lng7CisgICAgc2Nyb2xsLnkgPSByZWN0Lnk7Cit9
CisjZW5kaWYKKwogdm9pZCBXZWJWaWV3SW1wbDo6bnVtYmVyT2ZXaGVlbEV2ZW50SGFuZGxlcnND
aGFuZ2VkKHVuc2lnbmVkIG51bWJlck9mV2hlZWxIYW5kbGVycykKIHsKICAgICBtX2hhdmVXaGVl
bEV2ZW50SGFuZGxlcnMgPSBudW1iZXJPZldoZWVsSGFuZGxlcnMgPiAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYTAzOWEwOWNlYjg3YzIwZTNkYTg0MzMz
MWYxYmVhYWVkM2Y0ZjEzMS4uNzcyMWRhMjRmMjc3OTUwMjM5ZmEzOWFhOGQxODRlYTY1MzcyOTg4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC05OCw2ICs5
OCwxMSBAQCBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCiBjbGFzcyBXZWJWaWV3SW1wbCA6IHB1Ymxp
YyBXZWJWaWV3LCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50LCBwdWJsaWMg
UmVmQ291bnRlZDxXZWJWaWV3SW1wbD4gewogcHVibGljOgorICAgIGVudW0gQXV0b1pvb21UeXBl
IHsKKyAgICAgICAgRG91YmxlVGFwLAorICAgICAgICBGaW5kSW5QYWdlLAorICAgIH07CisKICAg
ICAvLyBXZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAgICB2
aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAtNDYwLDYgKzQ2NSw3
IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCiAgICAgdm9pZCBy
ZXNldEdlc3R1cmVSZWNvZ25pemVyKCk7CisgICAgdm9pZCBjb21wdXRlU2NhbGVBbmRTY3JvbGxG
b3JIaXRSZWN0KGNvbnN0IFdlYlJlY3QmIGhpdFJlY3QsIEF1dG9ab29tVHlwZSwgZmxvYXQmIHNj
YWxlLCBXZWJQb2ludCYgc2Nyb2xsKTsKICNlbmRpZgogCiAgICAgdm9pZCBsb3NlQ29tcG9zaXRv
ckNvbnRleHQoaW50IG51bVRpbWVzKTsKQEAgLTUzMiw2ICs1MzgsMTcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShH
RVNUVVJFX1JFQ09HTklaRVIpCisKKyAgICAvLyBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggb2Yg
dGhlIGJsb2NrIHR5cGUgbm9kZSB0b3VjaGVkIGJ5IHRoZSBpbnB1dAorICAgIC8vIHBvaW50IHdp
dGggdGhlIHBhZGRpbmcuCisgICAgV2ViUmVjdCBjb21wdXRlQmxvY2tCb3VuZHMoY29uc3QgV2Vi
UmVjdCYsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIGJvb2wmIGlzVW5ib29zdGVkVGV4dCk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb246IFdpZGVucyB0aGUgd2lkdGggb2YgfHNvdXJjZXwgYnkgdGhl
IHNwZWNpZmllZCBtYXJnaW5zCisgICAgLy8gd2hpbGUga2VlcGluZyBpdCBzbWFsbGVyIHRoYW4g
cGFnZSB3aWR0aC4KKyAgICBXZWJSZWN0IHdpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMoY29uc3Qg
V2ViUmVjdCYgc291cmNlLCBpbnQgdGFyZ2V0TWFyZ2luLCBpbnQgbWluaW11bU1hcmdpbik7Cisj
ZW5kaWYKKwogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgdm9pZCBwb2ludGVyTG9ja01v
dXNlRXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKaW5kZXggMDZiMjY0NjlhMDUxNGU5N2Y3
OWM5Y2NlZDk3YTQ0MzkyYjY2MDYyNC4uNDUwNTNiNjhjNThmNjk2ZjczYmZmOWQwNzM2ZjQyMWJl
MmI1ZTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFt
ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0
LmNwcApAQCAtMTUxLDYgKzE1MSw3NiBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBDaHJvbWVQYWdl
Tm9KYXZhc2NyaXB0KQogICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZzo6bnBvcywgY29udGVudC5m
aW5kKCJDbG9iYmVyZWQiKSk7CiB9CiAKK1RFU1RfRihXZWJGcmFtZVRlc3QsIERpdkF1dG9ab29t
UGFyYW1zVGVzdCkKK3sKKyAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJnZXRfc2NhbGVf
Zm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiKTsKKworICAgIFdlYlZpZXdJbXBsKiB3
ZWJWaWV3SW1wbCA9IHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4oRnJhbWVUZXN0SGVscGVyczo6
Y3JlYXRlV2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImdldF9zY2FsZV9mb3JfYXV0b196b29t
X2ludG9fZGl2X3Rlc3QuaHRtbCIsIHRydWUpKTsKKyAgICBpbnQgcGFnZVdpZHRoID0gNjQwOwor
ICAgIGludCBwYWdlSGVpZ2h0ID0gNDgwOworICAgIGludCBkaXZQb3NYID0gMjAwOworICAgIGlu
dCBkaXZQb3NZID0gMjAwOworICAgIGludCBkaXZXaWR0aCA9IDIwMDsKKyAgICBpbnQgZGl2SGVp
Z2h0ID0gMTUwOworICAgIFdlYlJlY3QgZG91YmxlVGFwUG9pbnQoMjUwLCAyNTAsIDAsIDApOwor
ICAgIHdlYlZpZXdJbXBsLT5yZXNpemUoV2ViU2l6ZShwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsK
KyAgICBmbG9hdCBzY2FsZTsKKyAgICBXZWJQb2ludCBzY3JvbGw7CisKKyAgICAvLyBUZXN0IGZv
ciBEb3VibGV0YXAgc2NhbGluZworCisgICAgLy8gVGVzdHMgZm9yIHpvb21pbmcgaW4gYW5kIG91
dCB3aXRob3V0IGNsYW1waW5nLgorICAgIC8vIFNldCBkZXZpY2Ugc2NhbGUgYW5kIHNjYWxlIGxp
bWl0cyBzbyB3ZSBkb250IGdldCBjbGFtcGVkLgorICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VT
Y2FsZUZhY3Rvcig0KTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRz
KDAsIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAgICAvLyBUZXN0
IHpvb21pbmcgaW50byBkaXYuCisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9s
bEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxl
LCBzY3JvbGwpOworICAgIGZsb2F0IHNjYWxlZERpdldpZHRoID0gZGl2V2lkdGggKiBzY2FsZTsK
KyAgICBmbG9hdCBzY2FsZWREaXZIZWlnaHQgPSBkaXZIZWlnaHQgKiBzY2FsZTsKKyAgICBpbnQg
aFNjcm9sbCA9ICgoZGl2UG9zWCAqIHNjYWxlKSAtICgocGFnZVdpZHRoIC0gc2NhbGVkRGl2V2lk
dGgpIC8gMikpIC8gc2NhbGU7CisgICAgaW50IHZTY3JvbGwgPSAoKGRpdlBvc1kgKiBzY2FsZSkg
LSAoKHBhZ2VIZWlnaHQgLSBzY2FsZWREaXZIZWlnaHQpIC8gMikpIC8gc2NhbGU7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKHBhZ2VXaWR0aCAvIChkaXZXaWR0aCArIDEyLjAgLyogbWFyZ2luICovKSwg
c2NhbGUpOworICAgIEVYUEVDVF9FUShoU2Nyb2xsLCBzY3JvbGwueCk7CisgICAgRVhQRUNUX0VR
KHZTY3JvbGwsIHNjcm9sbC55KTsKKworICAgIC8vIFRlc3Qgem9vbSBvdXQgdG8gb3ZlcnZpZXcg
c2NhbGUuCisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50
U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVG
YWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJl
Y3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzY2FsZSk7CisgICAgRVhQRUNUX0VRKFdlYlBvaW50
KDAsIDApLCBzY3JvbGwpOworCisgICAgLy8gVGVzdHMgZm9yIGNsYW1wZWQgc2NhbGluZy4KKyAg
ICAvLyBUZXN0IGNsYW1wIHRvIGRldmljZSBzY2FsZToKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlT
Y3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxl
IC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0
RGV2aWNlU2NhbGVGYWN0b3IoMi41KTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5k
U2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwg
c2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIuNSwgc2NhbGUpOworCisgICAg
Ly8gVGVzdCBjbGFtcCB0byBtaW5pbXVtIHNjYWxlOgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNj
cm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUg
LyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQ
YWdlU2NhbGVGYWN0b3JMaW1pdHMoMS41IC8gd2ViVmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9y
KCksIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0lt
cGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZp
ZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
LjUsIHNjYWxlKTsKKyAgICBFWFBFQ1RfRVEoV2ViUG9pbnQoMCwgMCksIHNjcm9sbCk7CisKKyAg
ICAvLyBUZXN0IGNsYW1wIHRvIG1heGltdW0gc2NhbGU6CisgICAgd2ViVmlld0ltcGwtPmFwcGx5
U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2Fs
ZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPnNl
dERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0
b3JMaW1pdHMoMCwgMyAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICB3
ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2lu
dCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDMsIHNjYWxlKTsKKworCisgICAgLy8gVGVzdCBmb3IgTm9uLWRvdWJsZXRhcCBzY2Fs
aW5nCisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvcigxLCBXZWJQb2ludCgwLCAw
KSk7CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIHdlYlZp
ZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgNCAvIHdlYlZpZXdJbXBsLT5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKKyAgICAvLyBUZXN0IHpvb21pbmcgaW50byBkaXYuCisgICAgd2Vi
Vmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoV2ViUmVjdCgyNTAsIDI1
MCwgMTAsIDEwKSwgV2ViVmlld0ltcGw6OkZpbmRJblBhZ2UsIHNjYWxlLCBzY3JvbGwpOworICAg
IEVYUEVDVF9GTE9BVF9FUShwYWdlV2lkdGggLyAoZGl2V2lkdGggKyAxMi4wIC8qIG1hcmdpbiAq
LyksIHNjYWxlKTsKK30KKwogY2xhc3MgVGVzdFJlbG9hZERvZXNudFJlZGlyZWN0V2ViRnJhbWVD
bGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgV2Vi
TmF2aWdhdGlvblBvbGljeSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29t
X2ludG9fZGl2X3Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9n
ZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU3
YzA3MGNjMDNlNTQ1ZmJiY2JlMDdlZTE1ZmVmODRiNzYyMGYxYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9v
bV9pbnRvX2Rpdl90ZXN0Lmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+CisgIDxib2R5Pgor
ICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBwb3NpdGlvbjogYWJzb2x1
dGU7IGxlZnQ6IDBweDsgdG9wOiAwcHg7IHdpZHRoOiA2NDBweDsgaGVpZ2h0OiA0ODBweCI+Cisg
ICAgICA8cD5Ub3AgRGl2PC9wPgorICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjog
d2hpdGU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMjAwcHg7IHRvcDogMjAwcHg7IHdpZHRo
OiAyMDBweDsgaGVpZ2h0OiAxNTBweCI+CisgICAgICAgIDxwPkRpdiB0byB6b29tIHRvPC9wPgor
ICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125654</attachid>
            <date>2012-02-06 08:31:25 -0800</date>
            <delta_ts>2012-02-06 08:56:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120206113124.patch</filename>
            <type>text/plain</type>
            <size>19644</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTVkNTZiZjY4YTcyNTUw
NGE3NGQwZjJiM2MyY2U5NGJjNjgwOTVjMC4uZDMyZDE2MDZkNjY1NzE0MjAyMTNkYjgyMGMzYTZj
NzI5MGJjODY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTA2ICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3RzIC0tZ3Rlc3RfZmls
dGVyPVdlYkZyYW1lVGVzdC5EaXZBdXRvWm9vbVBhcmFtc1Rlc3QKKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OnNjYWxlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUV2ZW50
KToKKwogMjAxMi0wMi0wMiAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVHVybiBvbiBDU1MgRmlsdGVycyBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGM0N2Q2YWVkNzY1MTQ2ZWQ4N2IwZGU5NzFiNjI3OTJmNjUwMjViMWQuLjcwMjY1
ZWY5NjE0MjFjNmNhMzlkNjUyOGRiZTI3MzZhYWVlMzE3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDItMDYgIFZhcnVuIEphaW4gIDx2YXJ1bmph
aW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2QgdG8gV2ViVmll
d0ltcGwgdG8gZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUgZXZlbnRzIG9u
IHRvdWNoIGRldmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyOTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjp3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QpOgor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorICAg
ICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHRlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9h
dXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0wMiAgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBVcGRh
dGUgZW51bSBuYW1lIGZvciBIaXRUZXN0UmVxdWVzdDo6UmVxdWVzdFR5cGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oCmluZGV4IGUzMTNiZTUwZTM5
MzJmOWNlMWNiYzU1YjQwMWRhMjc2MzJhNDU0MzMuLjI3YjM1N2NmNmE0MGZhZDFmMzM0Mzg3NTAy
YjIyZjJiNGI2MmMzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlRXZlbnQuaApAQCAtNDIsMTIgKzQyLDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
Ci0gICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgZG91YmxlIHRpbWVzdGFtcCwg
ZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVksIGJvb2wgc2hpZnRLZXksIGJvb2wgY3RybEtleSwg
Ym9vbCBhbHRLZXksIGJvb2wgbWV0YUtleSkKKyAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudChUeXBl
IHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCBkb3VibGUgdGltZXN0YW1wLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgYm9v
bCBzaGlmdEtleSwgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5LCBmbG9h
dCBzY2FsZSA9IDAuMGYpCiAgICAgICAgIDogUGxhdGZvcm1FdmVudCh0eXBlLCBzaGlmdEtleSwg
Y3RybEtleSwgYWx0S2V5LCBtZXRhS2V5LCB0aW1lc3RhbXApCiAgICAgICAgICwgbV9wb3NpdGlv
bihwb3NpdGlvbikKICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQog
ICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKICAgICAgICAgLCBtX2RlbHRhWShkZWx0YVkpCisg
ICAgICAgICwgbV9zY2FsZShzY2FsZSkKICAgICB7CiAgICAgfQogCkBAIC01NiwxMiArNTcsMTQg
QEAgcHVibGljOgogCiAgICAgZmxvYXQgZGVsdGFYKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YVg7
IH0KICAgICBmbG9hdCBkZWx0YVkoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhWTsgfQotICAgIAor
ICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9u
OwogICAgIGZsb2F0IG1fZGVsdGFYOwogICAgIGZsb2F0IG1fZGVsdGFZOworICAgIGZsb2F0IG1f
c2NhbGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggODRkZTc3MjljY2U1YWQ5MzZiNTA2NmQ3NDFk
NzFmZmNlZTUxMDg4Ni4uMmM5NmQzNjQ3Yzc0MDNjZGY5OTRjMjdiYjYxNmI3N2ExODMwNzBiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTkzLDYg
KzE5MywxNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRDb21wb3NpdG9yQ29u
dGV4dEF0dHJpYnV0ZXMoKQogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCisvLyBUaGUgZm9s
bG93aW5nIGNvbnN0YW50cyBjb250cm9sIHBhcmFtZXRlcnMgZm9yIGF1dG9tYXRlZCBzY2FsaW5n
IG9mIHdlYnBhZ2VzCisvLyAoc3VjaCBhcyBkdWUgdG8gYSBkb3VibGUgdGFwIGdlc3R1cmUgb3Ig
ZmluZCBpbiBwYWdlIGV0Yy4pLiBUaGVzZSBhcmUKKy8vIGV4cGVyaW1lbnRhbGx5IGRldGVybWlu
ZWQuCitzdGF0aWMgY29uc3QgaW50IGtUb3VjaFBvaW50UGFkZGluZyA9IDMyOworc3RhdGljIGNv
bnN0IGZsb2F0IGtNaW5TY2FsZURpZmZlcmVuY2UgPSAwLjAxOworc3RhdGljIGNvbnN0IGZsb2F0
IGtEb3VibGVUYXBab29tQ29udGVudERlZmF1bHRNYXJnaW4gPSA1LjA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50TWluaW11bU1hcmdpbiA9IDIuMDsKKwogfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODAyLDE1ICs4MTAs
MTk2IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYg
ZXZlbnQpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFt
ZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50QnVpbGRlcik7
CiAKICNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQotICAgIE93blB0cjxWZWN0b3I8V2Vi
Q29yZTo6UGxhdGZvcm1HZXN0dXJlRXZlbnQ+ID4gZ2VzdHVyZUV2ZW50cyhtX2dlc3R1cmVSZWNv
Z25pemVyLT5wcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmVzKHRvdWNoRXZlbnRCdWlsZGVyLCBk
ZWZhdWx0UHJldmVudGVkKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgIGkgPSAwOyBpIDwgZ2Vz
dHVyZUV2ZW50cy0+c2l6ZSgpOyBpKyspCi0gICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlRXZlbnRzLT5hdChp
KSk7CisgICAgT3duUHRyPFZlY3RvcjxQbGF0Zm9ybUdlc3R1cmVFdmVudD4gPiBnZXN0dXJlRXZl
bnRzKG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZXModG91
Y2hFdmVudEJ1aWxkZXIsIGRlZmF1bHRQcmV2ZW50ZWQpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGdlc3R1cmVFdmVudHMtPnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChnZXN0dXJl
RXZlbnRzLT5hdChpKS50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcCkg
eworICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSAxOworICAgICAgICAgICAgV2ViUG9pbnQgc2Ny
b2xsOworICAgICAgICAgICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIG9sZFBnZSA9IGdlc3R1cmVF
dmVudHMtPmF0KGkpOworICAgICAgICAgICAgV2ViUmVjdCBoaXRSZWN0KG9sZFBnZS5wb3NpdGlv
bigpLngoKSwgb2xkUGdlLnBvc2l0aW9uKCkueSgpLCAwLCAwKTsKKyAgICAgICAgICAgIGNvbXB1
dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoaGl0UmVjdCwgRG91YmxlVGFwLCBzY2FsZSwgc2Ny
b2xsKTsKKyAgICAgICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZUdlc3R1cmVFdmVudCgKKyAgICAgICAgICAgICAgICAgIFBsYXRmb3JtR2VzdHVy
ZUV2ZW50KG9sZFBnZS50eXBlKCksIG9sZFBnZS5wb3NpdGlvbigpLCBvbGRQZ2UuZ2xvYmFsUG9z
aXRpb24oKSwgb2xkUGdlLnRpbWVzdGFtcCgpLAorICAgICAgICAgICAgICAgICAgc2Nyb2xsLngs
IHNjcm9sbC55LCBvbGRQZ2Uuc2hpZnRLZXkoKSwgb2xkUGdlLmN0cmxLZXkoKSwgb2xkUGdlLmFs
dEtleSgpLCBvbGRQZ2UubWV0YUtleSgpLCBzY2FsZSkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdl
c3R1cmVFdmVudChnZXN0dXJlRXZlbnRzLT5hdChpKSk7CisgICAgfQogI2VuZGlmCiAKICAgICBy
ZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVf
UkVDT0dOSVpFUikKK1dlYlJlY3QgV2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyhjb25z
dCBXZWJSZWN0JiByZWN0LCBBdXRvWm9vbVR5cGUgem9vbVR5cGUsIEJvb3N0ZWRUZXh0VHlwZSYg
dGV4dFR5cGUpCit7CisgICAgdGV4dFR5cGUgPSBOb3JtYWxUZXh0OworICAgIGlmICghbWFpbkZy
YW1lSW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViUmVjdCgpOworCisgICAgLy8gVXNlIHRoZSBy
ZWN0LWJhc2VkIGhpdCB0ZXN0IHRvIGZpbmQgdGhlIG5vZGUuCisgICAgSW50UG9pbnQgcG9pbnQg
PSBtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLT53aW5kb3dUb0NvbnRlbnRzKEludFBvaW50
KHJlY3QueCwgcmVjdC55KSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtYWluRnJhbWVJ
bXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2lu
dCwKKyAgICAgICAgICAgIGZhbHNlLCB6b29tVHlwZSA9PSBGaW5kSW5QYWdlLCBEb250SGl0VGVz
dFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6UmVh
ZE9ubHksCisgICAgICAgICAgICBJbnRTaXplKHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KSk7CisK
KyAgICAvLyBGaW5kIHRoZSBtb3N0IGJvb3N0ZWQgdGV4dCBub2RlIGludGVyc2VjdGVkIGJ5IHRo
ZSBoaXQgdGVzdCAoaWYgYW55KS4KKyAgICBOb2RlKiBub2RlID0gMDsKKyAgICBmbG9hdCBncmVh
dGVzdEJvb3N0aW5nRmFjdG9yID0gMDsKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9k
ZT4gPiYgbGlzdCA9IHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisgICAgZm9yIChMaXN0
SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7
IGl0ICE9IGxpc3QuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgTm9kZSogY3VycmVudCA9IGl0LT5n
ZXQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzVGV4dE5vZGUoKSAmJiBjdXJyZW50LT5yZW5k
ZXJlcigpKSB7CisgICAgICAgICAgICBmbG9hdCBib29zdGluZ0ZhY3RvciA9IGN1cnJlbnQtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIC8KKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICAgICAgaWYgKGJvb3N0aW5nRmFjdG9y
ID4gZ3JlYXRlc3RCb29zdGluZ0ZhY3RvcikgeworICAgICAgICAgICAgICAgIG5vZGUgPSBjdXJy
ZW50OworICAgICAgICAgICAgICAgIHRleHRUeXBlID0gKGJvb3N0aW5nRmFjdG9yIDw9IDEpID8g
Qm9vc3RlZFRleHQgOiBOb3JtYWxUZXh0OworICAgICAgICAgICAgICAgIGdyZWF0ZXN0Qm9vc3Rp
bmdGYWN0b3IgPSBib29zdGluZ0ZhY3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghbm9kZSkKKyAgICAgICAgbm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKTsKKworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIFdlYlJlY3QoKTsKKwor
ICAgIC8vIEZpbmQgdGhlIGJsb2NrIHR5cGUgbm9kZSBiYXNlZCBvbiB0aGUgaGl0IG5vZGUuCisg
ICAgd2hpbGUgKG5vZGUgJiYgKCFub2RlLT5yZW5kZXJlcigpIHx8IG5vZGUtPnJlbmRlcmVyKCkt
PmlzSW5saW5lKCkpKQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworCisgICAg
Ly8gUmV0dXJuIHRoZSBib3VuZGluZyBib3ggaW4gdGhlIHdpbmRvdyBjb29yZGluYXRlIHN5c3Rl
bS4KKyAgICBpZiAobm9kZSkgeworICAgICAgICBJbnRSZWN0IHJlY3QgPSBub2RlLT5Ob2RlOjpn
ZXRSZWN0KCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1l
KCk7CisgICAgICAgIHJldHVybiBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3Qp
OworICAgIH0KKyAgICByZXR1cm4gV2ViUmVjdCgpOworfQorCitXZWJSZWN0IFdlYlZpZXdJbXBs
Ojp3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKGNvbnN0IFdlYlJlY3QmIHNvdXJjZSwgaW50IHRh
cmdldE1hcmdpbiwgaW50IG1pbmltdW1NYXJnaW4pCit7CisgICAgV2ViU2l6ZSBtYXhTaXplOwor
ICAgIGlmIChtYWluRnJhbWUoKSkKKyAgICAgICAgbWF4U2l6ZSA9IG1haW5GcmFtZSgpLT5jb250
ZW50c1NpemUoKTsKKyAgICBJbnRTaXplIHNjcm9sbE9mZnNldDsKKyAgICBpZiAobWFpbkZyYW1l
KCkpCisgICAgICAgIHNjcm9sbE9mZnNldCA9IG1haW5GcmFtZSgpLT5zY3JvbGxPZmZzZXQoKTsK
KyAgICBpbnQgbGVmdE1hcmdpbiA9IHRhcmdldE1hcmdpbjsKKyAgICBpbnQgcmlnaHRNYXJnaW4g
PSB0YXJnZXRNYXJnaW47CisKKyAgICBjb25zdCBpbnQgYWJzb2x1dGVTb3VyY2VYID0gc291cmNl
LnggKyBzY3JvbGxPZmZzZXQud2lkdGgoKTsKKyAgICBpZiAobGVmdE1hcmdpbiA+IGFic29sdXRl
U291cmNlWCkgeworICAgICAgICBsZWZ0TWFyZ2luID0gYWJzb2x1dGVTb3VyY2VYOworICAgICAg
ICByaWdodE1hcmdpbiA9IG1heChsZWZ0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKTsKKyAgICB9CisK
KyAgICBjb25zdCBpbnQgbWF4aW11bVJpZ2h0TWFyZ2luID0gbWF4U2l6ZS53aWR0aCAtIChzb3Vy
Y2Uud2lkdGggKyBhYnNvbHV0ZVNvdXJjZVgpOworICAgIGlmIChyaWdodE1hcmdpbiA+IG1heGlt
dW1SaWdodE1hcmdpbikgeworICAgICAgICByaWdodE1hcmdpbiA9IG1heGltdW1SaWdodE1hcmdp
bjsKKyAgICAgICAgbGVmdE1hcmdpbiA9IG1pbihsZWZ0TWFyZ2luLCBtYXgocmlnaHRNYXJnaW4s
IG1pbmltdW1NYXJnaW4pKTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgbmV3V2lkdGggPSBzb3Vy
Y2Uud2lkdGggKyBsZWZ0TWFyZ2luICsgcmlnaHRNYXJnaW47CisgICAgY29uc3QgaW50IG5ld1gg
PSBzb3VyY2UueCAtIGxlZnRNYXJnaW47CisKKyAgICBBU1NFUlQobmV3V2lkdGggPj0gMCk7Cisg
ICAgQVNTRVJUKHNjcm9sbE9mZnNldC53aWR0aCgpICsgbmV3WCArIG5ld1dpZHRoIDw9IG1heFNp
emUud2lkdGgpOworCisgICAgcmV0dXJuIFdlYlJlY3QobmV3WCwgc291cmNlLnksIG5ld1dpZHRo
LCBzb3VyY2UuaGVpZ2h0KTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6Y29tcHV0ZVNjYWxlQW5k
U2Nyb2xsRm9ySGl0UmVjdChjb25zdCBXZWJSZWN0JiBoaXRSZWN0LCBBdXRvWm9vbVR5cGUgem9v
bVR5cGUsIGZsb2F0JiBzY2FsZSwgV2ViUG9pbnQmIHNjcm9sbCkKK3sKKyAgICBzY2FsZSA9IHBh
Z2VTY2FsZUZhY3RvcigpOworICAgIHNjcm9sbC54ID0gc2Nyb2xsLnkgPSAwOworICAgIFdlYlJl
Y3QgdGFyZ2V0UmVjdCA9IGhpdFJlY3Q7CisgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICB0YXJnZXRSZWN0LndpZHRoID0gdGFyZ2V0UmVjdC5oZWlnaHQgPSBrVG91Y2hQb2lu
dFBhZGRpbmc7CisKKyAgICBCb29zdGVkVGV4dFR5cGUgdGV4dFR5cGUgPSBOb3JtYWxUZXh0Owor
CisgICAgV2ViUmVjdCByZWN0ID0gY29tcHV0ZUJsb2NrQm91bmRzKHRhcmdldFJlY3QsIHpvb21U
eXBlLCB0ZXh0VHlwZSk7CisKKyAgICBjb25zdCBmbG9hdCBvdmVydmlld1NjYWxlID0gbV9taW5p
bXVtUGFnZVNjYWxlRmFjdG9yOworICAgIGJvb2wgc2NhbGVVbmNoYW5nZWQgPSB0cnVlOworICAg
IGlmICghcmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gUGFnZXMgc2hvdWxkIGJlIGFzIGxl
Z2libGUgYXMgb24gZGVza3RvcCB3aGVuIGF0IGRwaSBzY2FsZSwgc28gbm8KKyAgICAgICAgLy8g
bmVlZCB0byB6b29tIGluIGZ1cnRoZXIgd2hlbiBhdXRvbWF0aWNhbGx5IGRldGVybWluaW5nIHpv
b20gbGV2ZWwKKyAgICAgICAgLy8gKGFmdGVyIGRvdWJsZSB0YXAsIGZpbmQgaW4gcGFnZSwgZXRj
KSwgdGhvdWdoIHRoZSB1c2VyIHNob3VsZCBzdGlsbAorICAgICAgICAvLyBiZSBhbGxvd2VkIHRv
IG1hbnVhbGx5IHBpbmNoIHpvb20gaW4gZnVydGhlciBpZiB0aGV5IGRlc2lyZS4KKyAgICAgICAg
Ly8gRklYTUU6IEluY2x1ZGUgZm9udCBzY2FsZSBmYWN0b3Igb25jZSBpdHMgYWRkZWQgdG8gc2V0
dGluZ3MuCisgICAgICAgIGNvbnN0IGZsb2F0IG1heFNjYWxlID0gZGV2aWNlU2NhbGVGYWN0b3Io
KSAqIDEgLyogZm9udCBzY2FsZSBmYWN0b3IgKi87CisKKyAgICAgICAgY29uc3QgZmxvYXQgZGVm
YXVsdE1hcmdpbiA9IGtEb3VibGVUYXBab29tQ29udGVudERlZmF1bHRNYXJnaW4gKiBkZXZpY2VT
Y2FsZUZhY3RvcigpOworICAgICAgICBjb25zdCBmbG9hdCBtaW5pbXVtTWFyZ2luID0ga0RvdWJs
ZVRhcFpvb21Db250ZW50TWluaW11bU1hcmdpbiAqIGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAg
ICAgIC8vIFdlIHdhbnQgdGhlIG1hcmdpbnMgdG8gaGF2ZSB0aGUgc2FtZSBwaHlzaWNhbCBzaXpl
LCB3aGljaCBtZWFucyB3ZQorICAgICAgICAvLyBuZWVkIHRvIGV4cHJlc3MgdGhlbSBpbiBwb3N0
LXNjYWxlIHNpemUuIFRvIGRvIHRoYXQgd2UnZCBuZWVkIHRvIGtub3cKKyAgICAgICAgLy8gdGhl
IHNjYWxlIHdlJ3JlIHNjYWxpbmcgdG8sIGJ1dCB0aGF0IGRlcGVuZHMgb24gdGhlIG1hcmdpbnMu
IEluc3RlYWQKKyAgICAgICAgLy8gd2UgZXhwcmVzcyB0aGVtIGFzIGEgZnJhY3Rpb24gb2YgdGhl
IHRhcmdldCByZWN0YW5nbGU6IHRoaXMgd2lsbCBiZQorICAgICAgICAvLyBjb3JyZWN0IGlmIHdl
IGVuZCB1cCBmdWxseSB6b29taW5nIHRvIGl0LCBhbmQgd29uJ3QgbWF0dGVyIGlmIHdlCisgICAg
ICAgIC8vIGRvbid0LgorICAgICAgICByZWN0ID0gd2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhy
ZWN0LAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oZGVmYXVsdE1hcmdpbiAqIHJl
Y3Qud2lkdGggLyBtX3NpemUud2lkdGgpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4obWluaW11bU1hcmdpbiAqIHJlY3Qud2lkdGggLyBtX3NpemUud2lkdGgpKTsKKworICAgICAg
ICAvLyBGaXQgYmxvY2sgdG8gc2NyZWVuLCByZXNwZWN0aW5nIGxpbWl0cy4KKyAgICAgICAgaWYg
KHRleHRUeXBlID09IE5vcm1hbFRleHQpCisgICAgICAgICAgICBzY2FsZSA9IG1heFNjYWxlOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNjYWxlICo9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3NpemUud2lkdGgpIC8gcmVjdC53aWR0aDsKKyAgICAgICAgICAgIHNjYWxlID0gbWluKHNjYWxl
LCBtYXhTY2FsZSk7CisgICAgICAgIH0KKyAgICAgICAgc2NhbGUgPSBjbGFtcFBhZ2VTY2FsZUZh
Y3RvclRvTGltaXRzKHNjYWxlKTsKKworICAgICAgICBzY2FsZVVuY2hhbmdlZCA9IGZhYnMocGFn
ZVNjYWxlRmFjdG9yKCkgLSBzY2FsZSkgPCBrTWluU2NhbGVEaWZmZXJlbmNlOworICAgIH0KKwor
ICAgIGlmICh6b29tVHlwZSA9PSBEb3VibGVUYXApIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8IHNjYWxlVW5jaGFuZ2VkKSB7CisgICAgICAgICAgICAvLyBab29tIG91dCB0byBvdmVy
dmlldyBtb2RlLgorICAgICAgICAgICAgaWYgKG92ZXJ2aWV3U2NhbGUpCisgICAgICAgICAgICAg
ICAgc2NhbGUgPSBvdmVydmlld1NjYWxlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChyZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBLZWVwIGN1cnJl
bnQgc2NhbGUgKG5vIG5lZWQgdG8gc2Nyb2xsIGFzIHgseSB3aWxsIG5vcm1hbGx5IGFscmVhZHkK
KyAgICAgICAgLy8gYmUgdmlzaWJsZSkuIEZJWE1FOiBSZXZpc2l0IHRoaXMgaWYgaXQgaXNuJ3Qg
YWx3YXlzIHRydWUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSWYg
dGhpcyBpcyBiZWluZyBjYWxsZWQgZm9yIGF1dG8gem9vbSBkdXJpbmcgZmluZCBpbiBwYWdlLAor
ICAgIC8vIHRoZW4gaWYgdGhlIHVzZXIgbWFudWFsbHkgem9vbXMgaW4gaXQnZCBiZSBuaWNlIHRv
IHByZXNlcnZlIHRoZSByZWxhdGl2ZQorICAgIC8vIGluY3JlYXNlIGluIHpvb20gdGhleSBjYXVz
ZWQgKGlmIHRoZXkgem9vbSBvdXQgdGhlbiBpdCdzIG9rIHRvIHpvb20KKyAgICAvLyB0aGVtIGJh
Y2sgaW4gYWdhaW4pLiBUaGlzIGlzbid0IGNvbXBhdGlibGUgd2l0aCBvdXIgY3VycmVudCBkb3Vi
bGUtdGFwCisgICAgLy8gem9vbSBzdHJhdGVneSAoZml0dGluZyB0aGUgY29udGFpbmluZyBibG9j
ayB0byB0aGUgc2NyZWVuKSB0aG91Z2guCisKKyAgICBmbG9hdCBzY3JlZW5IZWlnaHQgPSBtX3Np
emUuaGVpZ2h0IC8gc2NhbGUgKiBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBzY3JlZW5X
aWR0aCA9IG1fc2l6ZS53aWR0aCAvIHNjYWxlICogcGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICAv
LyBTY3JvbGwgdG8gdmVydGljYWxseSBhbGlnbiB0aGUgYmxvY2suCisgICAgaWYgKHJlY3QuaGVp
Z2h0IDwgc2NyZWVuSGVpZ2h0KSB7CisgICAgICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIHNob3J0
IGJsb2Nrcy4KKyAgICAgICAgcmVjdC55IC09IDAuNSAqIChzY3JlZW5IZWlnaHQgLSByZWN0Lmhl
aWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRW5zdXJlIHBvc2l0aW9uIHdlJ3JlIHpv
b21pbmcgdG8gKCsgcGFkZGluZykgaXNuJ3Qgb2ZmIHRoZSBib3R0b20gb2YKKyAgICAgICAgLy8g
dGhlIHNjcmVlbi4KKyAgICAgICAgcmVjdC55ID0gbWF4KChmbG9hdCkgcmVjdC55LCBoaXRSZWN0
LnkgKyBrVG91Y2hQb2ludFBhZGRpbmcgLSBzY3JlZW5IZWlnaHQpOworICAgIH0gLy8gT3RoZXJ3
aXNlIHRvcCBhbGlnbiB0aGUgYmxvY2suCisKKyAgICAvLyBEbyB0aGUgc2FtZSB0aGluZyBmb3Ig
aG9yaXpvbnRhbCBhbGlnbm1lbnQuCisgICAgaWYgKHJlY3Qud2lkdGggPCBzY3JlZW5XaWR0aCkK
KyAgICAgICAgcmVjdC54IC09IDAuNSAqIChzY3JlZW5XaWR0aCAtIHJlY3Qud2lkdGgpOworICAg
IGVsc2UKKyAgICAgICAgcmVjdC54ID0gbWF4KChmbG9hdCkgcmVjdC54LCBoaXRSZWN0LnggKyBr
VG91Y2hQb2ludFBhZGRpbmcgLSBzY3JlZW5XaWR0aCk7CisKKyAgICBzY3JvbGwueCA9IHJlY3Qu
eDsKKyAgICBzY3JvbGwueSA9IHJlY3QueTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlZpZXdJbXBs
OjpudW1iZXJPZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQgbnVtYmVyT2ZXaGVl
bEhhbmRsZXJzKQogewogICAgIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyA9IG51bWJlck9mV2hl
ZWxIYW5kbGVycyA+IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApp
bmRleCBhMDM5YTA5Y2ViODdjMjBlM2RhODQzMzMxZjFiZWFhZWQzZjRmMTMxLi41M2M0ZGMyYzY2
ZDZhMjZhMThhOWQzZGQ5ZGJhN2I1YTIwNmUzMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKQEAgLTk4LDYgKzk4LDExIEBAIGNsYXNzIFdlYlRvdWNoRXZlbnQ7
CiAKIGNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CiBw
dWJsaWM6CisgICAgZW51bSBBdXRvWm9vbVR5cGUgeworICAgICAgICBEb3VibGVUYXAsCisgICAg
ICAgIEZpbmRJblBhZ2UsCisgICAgfTsKKwogICAgIC8vIFdlYldpZGdldCBtZXRob2RzOgogICAg
IHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1
cm4gbV9zaXplOyB9CkBAIC00NjAsNiArNDY1LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEdF
U1RVUkVfUkVDT0dOSVpFUikKICAgICB2b2lkIHJlc2V0R2VzdHVyZVJlY29nbml6ZXIoKTsKKyAg
ICB2b2lkIGNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0
UmVjdCwgQXV0b1pvb21UeXBlLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBzY3JvbGwpOwogI2Vu
ZGlmCiAKICAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpOwpAQCAt
NDkyLDYgKzQ5OCwxMSBAQCBwcml2YXRlOgogICAgICAgRHJhZ092ZXIKICAgICB9OwogCisgICAg
ZW51bSBCb29zdGVkVGV4dFR5cGUgeworICAgICAgICBOb3JtYWxUZXh0LAorICAgICAgICBCb29z
dGVkVGV4dCwKKyAgICB9OworCiAgICAgV2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCopOwogICAg
IHZpcnR1YWwgfldlYlZpZXdJbXBsKCk7CiAKQEAgLTUzMiw2ICs1NDMsMTcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAjZW5kaWYKIAorI2lmIEVOQUJM
RShHRVNUVVJFX1JFQ09HTklaRVIpCisKKyAgICAvLyBSZXR1cm5zIHRoZSBib3VuZGluZyBib3gg
b2YgdGhlIGJsb2NrIHR5cGUgbm9kZSB0b3VjaGVkIGJ5IHRoZSBpbnB1dAorICAgIC8vIHBvaW50
IHdpdGggdGhlIHBhZGRpbmcuCisgICAgV2ViUmVjdCBjb21wdXRlQmxvY2tCb3VuZHMoY29uc3Qg
V2ViUmVjdCYsIEF1dG9ab29tVHlwZSwgQm9vc3RlZFRleHRUeXBlJik7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb246IFdpZGVucyB0aGUgd2lkdGggb2YgfHNvdXJjZXwgYnkgdGhlIHNwZWNpZmll
ZCBtYXJnaW5zCisgICAgLy8gd2hpbGUga2VlcGluZyBpdCBzbWFsbGVyIHRoYW4gcGFnZSB3aWR0
aC4KKyAgICBXZWJSZWN0IHdpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMoY29uc3QgV2ViUmVjdCYg
c291cmNlLCBpbnQgdGFyZ2V0TWFyZ2luLCBpbnQgbWluaW11bU1hcmdpbik7CisjZW5kaWYKKwog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgdm9pZCBwb2ludGVyTG9ja01vdXNlRXZlbnQo
Y29uc3QgV2ViSW5wdXRFdmVudCYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKaW5kZXggMDZiMjY0NjlhMDUxNGU5N2Y3OWM5Y2NlZDk3
YTQ0MzkyYjY2MDYyNC4uNDUwNTNiNjhjNThmNjk2ZjczYmZmOWQwNzM2ZjQyMWJlMmI1ZTUyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcApAQCAt
MTUxLDYgKzE1MSw3NiBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBDaHJvbWVQYWdlTm9KYXZhc2Ny
aXB0KQogICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZzo6bnBvcywgY29udGVudC5maW5kKCJDbG9i
YmVyZWQiKSk7CiB9CiAKK1RFU1RfRihXZWJGcmFtZVRlc3QsIERpdkF1dG9ab29tUGFyYW1zVGVz
dCkKK3sKKyAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJnZXRfc2NhbGVfZm9yX2F1dG9f
em9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiKTsKKworICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1w
bCA9IHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4oRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRlV2Vi
Vmlld0FuZExvYWQobV9iYXNlVVJMICsgImdldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2
X3Rlc3QuaHRtbCIsIHRydWUpKTsKKyAgICBpbnQgcGFnZVdpZHRoID0gNjQwOworICAgIGludCBw
YWdlSGVpZ2h0ID0gNDgwOworICAgIGludCBkaXZQb3NYID0gMjAwOworICAgIGludCBkaXZQb3NZ
ID0gMjAwOworICAgIGludCBkaXZXaWR0aCA9IDIwMDsKKyAgICBpbnQgZGl2SGVpZ2h0ID0gMTUw
OworICAgIFdlYlJlY3QgZG91YmxlVGFwUG9pbnQoMjUwLCAyNTAsIDAsIDApOworICAgIHdlYlZp
ZXdJbXBsLT5yZXNpemUoV2ViU2l6ZShwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsKKyAgICBmbG9h
dCBzY2FsZTsKKyAgICBXZWJQb2ludCBzY3JvbGw7CisKKyAgICAvLyBUZXN0IGZvciBEb3VibGV0
YXAgc2NhbGluZworCisgICAgLy8gVGVzdHMgZm9yIHpvb21pbmcgaW4gYW5kIG91dCB3aXRob3V0
IGNsYW1waW5nLgorICAgIC8vIFNldCBkZXZpY2Ugc2NhbGUgYW5kIHNjYWxlIGxpbWl0cyBzbyB3
ZSBkb250IGdldCBjbGFtcGVkLgorICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rv
cig0KTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDQgLyB3
ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAgICAvLyBUZXN0IHpvb21pbmcg
aW50byBkaXYuCisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJl
Y3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwp
OworICAgIGZsb2F0IHNjYWxlZERpdldpZHRoID0gZGl2V2lkdGggKiBzY2FsZTsKKyAgICBmbG9h
dCBzY2FsZWREaXZIZWlnaHQgPSBkaXZIZWlnaHQgKiBzY2FsZTsKKyAgICBpbnQgaFNjcm9sbCA9
ICgoZGl2UG9zWCAqIHNjYWxlKSAtICgocGFnZVdpZHRoIC0gc2NhbGVkRGl2V2lkdGgpIC8gMikp
IC8gc2NhbGU7CisgICAgaW50IHZTY3JvbGwgPSAoKGRpdlBvc1kgKiBzY2FsZSkgLSAoKHBhZ2VI
ZWlnaHQgLSBzY2FsZWREaXZIZWlnaHQpIC8gMikpIC8gc2NhbGU7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKHBhZ2VXaWR0aCAvIChkaXZXaWR0aCArIDEyLjAgLyogbWFyZ2luICovKSwgc2NhbGUpOwor
ICAgIEVYUEVDVF9FUShoU2Nyb2xsLCBzY3JvbGwueCk7CisgICAgRVhQRUNUX0VRKHZTY3JvbGws
IHNjcm9sbC55KTsKKworICAgIC8vIFRlc3Qgem9vbSBvdXQgdG8gb3ZlcnZpZXcgc2NhbGUuCisg
ICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3Jv
bGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7
CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91Ymxl
VGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgxLCBzY2FsZSk7CisgICAgRVhQRUNUX0VRKFdlYlBvaW50KDAsIDApLCBz
Y3JvbGwpOworCisgICAgLy8gVGVzdHMgZm9yIGNsYW1wZWQgc2NhbGluZy4KKyAgICAvLyBUZXN0
IGNsYW1wIHRvIGRldmljZSBzY2FsZToKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRT
Y2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmll
d0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2Nh
bGVGYWN0b3IoMi41KTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9y
SGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNj
cm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIuNSwgc2NhbGUpOworCisgICAgLy8gVGVzdCBj
bGFtcCB0byBtaW5pbXVtIHNjYWxlOgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNj
YWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3
SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVG
YWN0b3JMaW1pdHMoMS41IC8gd2ViVmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9yKCksIDQgLyB3
ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1
dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpE
b3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjUsIHNjYWxl
KTsKKyAgICBFWFBFQ1RfRVEoV2ViUG9pbnQoMCwgMCksIHNjcm9sbCk7CisKKyAgICAvLyBUZXN0
IGNsYW1wIHRvIG1heGltdW0gc2NhbGU6CisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5k
U2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZp
ZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNj
YWxlRmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMo
MCwgMyAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1w
bC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmll
d0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMs
IHNjYWxlKTsKKworCisgICAgLy8gVGVzdCBmb3IgTm9uLWRvdWJsZXRhcCBzY2FsaW5nCisgICAg
d2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvcigxLCBXZWJQb2ludCgwLCAwKSk7CisgICAg
d2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5z
ZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgNCAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZh
Y3RvcigpKTsKKyAgICAvLyBUZXN0IHpvb21pbmcgaW50byBkaXYuCisgICAgd2ViVmlld0ltcGwt
PmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoV2ViUmVjdCgyNTAsIDI1MCwgMTAsIDEw
KSwgV2ViVmlld0ltcGw6OkZpbmRJblBhZ2UsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9G
TE9BVF9FUShwYWdlV2lkdGggLyAoZGl2V2lkdGggKyAxMi4wIC8qIG1hcmdpbiAqLyksIHNjYWxl
KTsKK30KKwogY2xhc3MgVGVzdFJlbG9hZERvZXNudFJlZGlyZWN0V2ViRnJhbWVDbGllbnQgOiBw
dWJsaWMgV2ViRnJhbWVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgV2ViTmF2aWdhdGlv
blBvbGljeSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2
X3Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVf
Zm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU3YzA3MGNjMDNl
NTQ1ZmJiY2JlMDdlZTE1ZmVmODRiNzYyMGYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rp
dl90ZXN0Lmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIDxkaXYg
c3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6
IDBweDsgdG9wOiAwcHg7IHdpZHRoOiA2NDBweDsgaGVpZ2h0OiA0ODBweCI+CisgICAgICA8cD5U
b3AgRGl2PC9wPgorICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHBv
c2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMjAwcHg7IHRvcDogMjAwcHg7IHdpZHRoOiAyMDBweDsg
aGVpZ2h0OiAxNTBweCI+CisgICAgICAgIDxwPkRpdiB0byB6b29tIHRvPC9wPgorICAgICAgPC9k
aXY+CisgICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125659</attachid>
            <date>2012-02-06 08:56:26 -0800</date>
            <delta_ts>2012-02-06 11:41:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120206115625.patch</filename>
            <type>text/plain</type>
            <size>19738</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RkMWZiN2UzMmE4YzVi
N2UyYzk5OGEzNDNjZWE1ZDY4NWM3ZGZjNS4uN2JhNDFiOTQ4OTc1YWQ3NjkyMDA0YmIyYzgyMzdi
NzI4MmJlODU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTA2ICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3RzIC0tZ3Rlc3RfZmls
dGVyPVdlYkZyYW1lVGVzdC5EaXZBdXRvWm9vbVBhcmFtc1Rlc3QKKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OnNjYWxlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUV2ZW50
KToKKwogMjAxMi0wMi0wNiAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSB1bnVzZWQgZGlzYWJsZWRDb21wdXRl
ZFByb3BlcnRpZXMgZnJvbSBtZXRob2RzIGluIFN0eWxlc1NpZGViYXJQYW5lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDRmYmFmZmRkY2ZkZTEyZTJiZDgwNTBmNGI3ZTZjYzg0MDJkMDBm
ZjcuLjA1YmU4YjlmZWI4MjVlMzMxZWVmNjA5NGZjMmRjNDgzMmYzZTY0ZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDItMDYgIFZhcnVuIEphaW4g
IDx2YXJ1bmphaW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2Qg
dG8gV2ViVmlld0ltcGwgdG8gZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUg
ZXZlbnRzIG9uIHRvdWNoIGRldmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyOTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhp
dFJlY3QpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0lt
cGwpOgorICAgICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlRFU1RfRik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHRlc3RzL2RhdGEvZ2V0X3Nj
YWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0w
NCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIEFkZCBzdXBwb3J0IHRvIGZvcmNlIGZ1bGwgZGFtYWdlIGluIENDRGFtYWdlVHJhY2tl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgKaW5k
ZXggZWQ1NTdjMTc4NThkNTVhZDIzMmI5Yjc2MjM0NDFlMDFhNGFmZmVlMi4uM2VkZDE5NzJmODcw
OWM0MzZkYTQwZDA5OGIzMmU1MjkwNzNhMzNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oCkBAIC00NCwxMiArNDQsMTMgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKLSAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudChUeXBlIHR5cGUsIGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBkb3Vi
bGUgdGltZXN0YW1wLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgYm9vbCBzaGlmdEtleSwg
Ym9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5KQorICAgIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIGRvdWJsZSB0aW1lc3RhbXAsIGZsb2F0IGRlbHRhWCwgZmxv
YXQgZGVsdGFZLCBib29sIHNoaWZ0S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29s
IG1ldGFLZXksIGZsb2F0IHNjYWxlID0gMC4wZikKICAgICAgICAgOiBQbGF0Zm9ybUV2ZW50KHR5
cGUsIHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIG1ldGFLZXksIHRpbWVzdGFtcCkKICAgICAg
ICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogICAgICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xv
YmFsUG9zaXRpb24pCiAgICAgICAgICwgbV9kZWx0YVgoZGVsdGFYKQogICAgICAgICAsIG1fZGVs
dGFZKGRlbHRhWSkKKyAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQogICAgIHsKICAgICB9CiAKQEAg
LTcwLDEzICs3MSwxNSBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBkZWx0YVgoKSBjb25zdCB7IHJl
dHVybiBtX2RlbHRhWDsgfQogICAgIGZsb2F0IGRlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVs
dGFZOyB9Ci0gICAgCisgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9
CisKIHByb3RlY3RlZDoKICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEludFBvaW50IG1f
Z2xvYmFsUG9zaXRpb247CiAgICAgSW50U2l6ZSBtX2FyZWE7CiAgICAgZmxvYXQgbV9kZWx0YVg7
CiAgICAgZmxvYXQgbV9kZWx0YVk7CisgICAgZmxvYXQgbV9zY2FsZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAppbmRleCA4NGRlNzcyOWNjZTVhZDkzNmI1MDY2ZDc0MWQ3MWZmY2VlNTEwODg2Li5kOTYxOWE2
ZTlmZGU1NWNhYTA5MzliZDQ1NzhhOGQ5YzI3NjkxYzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xOTMsNiArMTkzLDE0IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpCiAgICAg
cmV0dXJuIGF0dHJpYnV0ZXM7CiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGNvbnRy
b2wgcGFyYW1ldGVycyBmb3IgYXV0b21hdGVkIHNjYWxpbmcgb2Ygd2VicGFnZXMKKy8vIChzdWNo
IGFzIGR1ZSB0byBhIGRvdWJsZSB0YXAgZ2VzdHVyZSBvciBmaW5kIGluIHBhZ2UgZXRjLikuIFRo
ZXNlIGFyZQorLy8gZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KK3N0YXRpYyBjb25zdCBpbnQg
a1RvdWNoUG9pbnRQYWRkaW5nID0gMzI7CitzdGF0aWMgY29uc3QgZmxvYXQga01pblNjYWxlRGlm
ZmVyZW5jZSA9IDAuMDE7CitzdGF0aWMgY29uc3QgZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50
RGVmYXVsdE1hcmdpbiA9IDUuMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBrRG91YmxlVGFwWm9vbUNv
bnRlbnRNaW5pbXVtTWFyZ2luID0gMi4wOworCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC04MDIsMTUgKzgxMCwxOTYgQEAgYm9vbCBXZWJWaWV3SW1w
bDo6dG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50JiBldmVudCkKICAgICBib29sIGRlZmF1
bHRQcmV2ZW50ZWQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnRCdWlsZGVyKTsKIAogI2lmIEVOQUJMRShHRVNUVVJF
X1JFQ09HTklaRVIpCi0gICAgT3duUHRyPFZlY3RvcjxXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVF
dmVudD4gPiBnZXN0dXJlRXZlbnRzKG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2
ZW50Rm9yR2VzdHVyZXModG91Y2hFdmVudEJ1aWxkZXIsIGRlZmF1bHRQcmV2ZW50ZWQpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCAgaSA9IDA7IGkgPCBnZXN0dXJlRXZlbnRzLT5zaXplKCk7IGkr
KykKLSAgICAgICAgbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVudHMtPmF0KGkpKTsKKyAgICBPd25QdHI8VmVjdG9y
PFBsYXRmb3JtR2VzdHVyZUV2ZW50PiA+IGdlc3R1cmVFdmVudHMobV9nZXN0dXJlUmVjb2duaXpl
ci0+cHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlcyh0b3VjaEV2ZW50QnVpbGRlciwgZGVmYXVs
dFByZXZlbnRlZCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2VzdHVyZUV2ZW50cy0+
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGdlc3R1cmVFdmVudHMtPmF0KGkpLnR5cGUoKSA9
PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlRG91YmxlVGFwKSB7CisgICAgICAgICAgICBmbG9hdCBz
Y2FsZSA9IDE7CisgICAgICAgICAgICBXZWJQb2ludCBzY3JvbGw7CisgICAgICAgICAgICBQbGF0
Zm9ybUdlc3R1cmVFdmVudCYgb2xkUGdlID0gZ2VzdHVyZUV2ZW50cy0+YXQoaSk7CisgICAgICAg
ICAgICBXZWJSZWN0IGhpdFJlY3Qob2xkUGdlLnBvc2l0aW9uKCkueCgpLCBvbGRQZ2UucG9zaXRp
b24oKS55KCksIDAsIDApOworICAgICAgICAgICAgY29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0
UmVjdChoaXRSZWN0LCBEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgICAgICAgICAgbWFp
bkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50
KAorICAgICAgICAgICAgICAgICAgUGxhdGZvcm1HZXN0dXJlRXZlbnQob2xkUGdlLnR5cGUoKSwg
b2xkUGdlLnBvc2l0aW9uKCksIG9sZFBnZS5nbG9iYWxQb3NpdGlvbigpLCBvbGRQZ2UudGltZXN0
YW1wKCksCisgICAgICAgICAgICAgICAgICBzY3JvbGwueCwgc2Nyb2xsLnksIG9sZFBnZS5zaGlm
dEtleSgpLCBvbGRQZ2UuY3RybEtleSgpLCBvbGRQZ2UuYWx0S2V5KCksIG9sZFBnZS5tZXRhS2V5
KCksIHNjYWxlKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWFpbkZyYW1lSW1wbCgp
LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KGdlc3R1cmVFdmVu
dHMtPmF0KGkpKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVk
OwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorV2ViUmVjdCBX
ZWJWaWV3SW1wbDo6Y29tcHV0ZUJsb2NrQm91bmRzKGNvbnN0IFdlYlJlY3QmIHJlY3QsIEF1dG9a
b29tVHlwZSB6b29tVHlwZSwgQm9vc3RlZFRleHRUeXBlJiB0ZXh0VHlwZSkKK3sKKyAgICB0ZXh0
VHlwZSA9IEJvb3N0ZWRUZXh0OworICAgIGlmICghbWFpbkZyYW1lSW1wbCgpKQorICAgICAgICBy
ZXR1cm4gV2ViUmVjdCgpOworCisgICAgLy8gVXNlIHRoZSByZWN0LWJhc2VkIGhpdCB0ZXN0IHRv
IGZpbmQgdGhlIG5vZGUuCisgICAgSW50UG9pbnQgcG9pbnQgPSBtYWluRnJhbWVJbXBsKCktPmZy
YW1lVmlldygpLT53aW5kb3dUb0NvbnRlbnRzKEludFBvaW50KHJlY3QueCwgcmVjdC55KSk7Cisg
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwKKyAgICAgICAgICAgIGZhbHNl
LCB6b29tVHlwZSA9PSBGaW5kSW5QYWdlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RS
ZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksCisgICAgICAgICAgICBJ
bnRTaXplKHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KSk7CisKKyAgICAvLyBGaW5kIHRoZSBtb3N0
IGJvb3N0ZWQgdGV4dCBub2RlIGludGVyc2VjdGVkIGJ5IHRoZSBoaXQgdGVzdCAoaWYgYW55KS4K
KyAgICBOb2RlKiBub2RlID0gMDsKKyAgICBmbG9hdCBncmVhdGVzdEJvb3N0aW5nRmFjdG9yID0g
MDsKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IHJlc3VsdC5y
ZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgTm9kZSogY3VycmVudCA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYgKGN1
cnJlbnQtPmlzVGV4dE5vZGUoKSAmJiBjdXJyZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAg
ICBmbG9hdCBib29zdGluZ0ZhY3RvciA9IGN1cnJlbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIC8KKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6
ZSgpOworICAgICAgICAgICAgaWYgKGJvb3N0aW5nRmFjdG9yID4gZ3JlYXRlc3RCb29zdGluZ0Zh
Y3RvcikgeworICAgICAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50OworICAgICAgICAgICAgICAg
IHRleHRUeXBlID0gKGJvb3N0aW5nRmFjdG9yIDw9IDEpID8gTm9ybWFsVGV4dCA6IEJvb3N0ZWRU
ZXh0OworICAgICAgICAgICAgICAgIGdyZWF0ZXN0Qm9vc3RpbmdGYWN0b3IgPSBib29zdGluZ0Zh
Y3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbm9kZSkK
KyAgICAgICAgbm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIFdlYlJlY3QoKTsKKworICAgIC8vIEZpbmQgdGhlIGJsb2Nr
IHR5cGUgbm9kZSBiYXNlZCBvbiB0aGUgaGl0IG5vZGUuCisgICAgd2hpbGUgKG5vZGUgJiYgKCFu
b2RlLT5yZW5kZXJlcigpIHx8IG5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkpKQorICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworCisgICAgLy8gUmV0dXJuIHRoZSBib3VuZGlu
ZyBib3ggaW4gdGhlIHdpbmRvdyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBpZiAobm9kZSkgewor
ICAgICAgICBJbnRSZWN0IHJlY3QgPSBub2RlLT5Ob2RlOjpnZXRSZWN0KCk7CisgICAgICAgIEZy
YW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgICAgIHJldHVybiBm
cmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3QpOworICAgIH0KKyAgICByZXR1cm4g
V2ViUmVjdCgpOworfQorCitXZWJSZWN0IFdlYlZpZXdJbXBsOjp3aWRlblJlY3RXaXRoaW5QYWdl
Qm91bmRzKGNvbnN0IFdlYlJlY3QmIHNvdXJjZSwgaW50IHRhcmdldE1hcmdpbiwgaW50IG1pbmlt
dW1NYXJnaW4pCit7CisgICAgV2ViU2l6ZSBtYXhTaXplOworICAgIGlmIChtYWluRnJhbWUoKSkK
KyAgICAgICAgbWF4U2l6ZSA9IG1haW5GcmFtZSgpLT5jb250ZW50c1NpemUoKTsKKyAgICBJbnRT
aXplIHNjcm9sbE9mZnNldDsKKyAgICBpZiAobWFpbkZyYW1lKCkpCisgICAgICAgIHNjcm9sbE9m
ZnNldCA9IG1haW5GcmFtZSgpLT5zY3JvbGxPZmZzZXQoKTsKKyAgICBpbnQgbGVmdE1hcmdpbiA9
IHRhcmdldE1hcmdpbjsKKyAgICBpbnQgcmlnaHRNYXJnaW4gPSB0YXJnZXRNYXJnaW47CisKKyAg
ICBjb25zdCBpbnQgYWJzb2x1dGVTb3VyY2VYID0gc291cmNlLnggKyBzY3JvbGxPZmZzZXQud2lk
dGgoKTsKKyAgICBpZiAobGVmdE1hcmdpbiA+IGFic29sdXRlU291cmNlWCkgeworICAgICAgICBs
ZWZ0TWFyZ2luID0gYWJzb2x1dGVTb3VyY2VYOworICAgICAgICByaWdodE1hcmdpbiA9IG1heChs
ZWZ0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgbWF4aW11
bVJpZ2h0TWFyZ2luID0gbWF4U2l6ZS53aWR0aCAtIChzb3VyY2Uud2lkdGggKyBhYnNvbHV0ZVNv
dXJjZVgpOworICAgIGlmIChyaWdodE1hcmdpbiA+IG1heGltdW1SaWdodE1hcmdpbikgeworICAg
ICAgICByaWdodE1hcmdpbiA9IG1heGltdW1SaWdodE1hcmdpbjsKKyAgICAgICAgbGVmdE1hcmdp
biA9IG1pbihsZWZ0TWFyZ2luLCBtYXgocmlnaHRNYXJnaW4sIG1pbmltdW1NYXJnaW4pKTsKKyAg
ICB9CisKKyAgICBjb25zdCBpbnQgbmV3V2lkdGggPSBzb3VyY2Uud2lkdGggKyBsZWZ0TWFyZ2lu
ICsgcmlnaHRNYXJnaW47CisgICAgY29uc3QgaW50IG5ld1ggPSBzb3VyY2UueCAtIGxlZnRNYXJn
aW47CisKKyAgICBBU1NFUlQobmV3V2lkdGggPj0gMCk7CisgICAgQVNTRVJUKHNjcm9sbE9mZnNl
dC53aWR0aCgpICsgbmV3WCArIG5ld1dpZHRoIDw9IG1heFNpemUud2lkdGgpOworCisgICAgcmV0
dXJuIFdlYlJlY3QobmV3WCwgc291cmNlLnksIG5ld1dpZHRoLCBzb3VyY2UuaGVpZ2h0KTsKK30K
Kwordm9pZCBXZWJWaWV3SW1wbDo6Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChjb25z
dCBXZWJSZWN0JiBoaXRSZWN0LCBBdXRvWm9vbVR5cGUgem9vbVR5cGUsIGZsb2F0JiBzY2FsZSwg
V2ViUG9pbnQmIHNjcm9sbCkKK3sKKyAgICBzY2FsZSA9IHBhZ2VTY2FsZUZhY3RvcigpOworICAg
IHNjcm9sbC54ID0gc2Nyb2xsLnkgPSAwOworICAgIFdlYlJlY3QgdGFyZ2V0UmVjdCA9IGhpdFJl
Y3Q7CisgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQorICAgICAgICB0YXJnZXRSZWN0Lndp
ZHRoID0gdGFyZ2V0UmVjdC5oZWlnaHQgPSBrVG91Y2hQb2ludFBhZGRpbmc7CisKKyAgICBCb29z
dGVkVGV4dFR5cGUgdGV4dFR5cGUgPSBCb29zdGVkVGV4dDsKKworICAgIFdlYlJlY3QgcmVjdCA9
IGNvbXB1dGVCbG9ja0JvdW5kcyh0YXJnZXRSZWN0LCB6b29tVHlwZSwgdGV4dFR5cGUpOworCisg
ICAgY29uc3QgZmxvYXQgb3ZlcnZpZXdTY2FsZSA9IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvcjsK
KyAgICBib29sIHNjYWxlVW5jaGFuZ2VkID0gdHJ1ZTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIFBhZ2VzIHNob3VsZCBiZSBhcyBsZWdpYmxlIGFzIG9uIGRlc2t0b3Ag
d2hlbiBhdCBkcGkgc2NhbGUsIHNvIG5vCisgICAgICAgIC8vIG5lZWQgdG8gem9vbSBpbiBmdXJ0
aGVyIHdoZW4gYXV0b21hdGljYWxseSBkZXRlcm1pbmluZyB6b29tIGxldmVsCisgICAgICAgIC8v
IChhZnRlciBkb3VibGUgdGFwLCBmaW5kIGluIHBhZ2UsIGV0YyksIHRob3VnaCB0aGUgdXNlciBz
aG91bGQgc3RpbGwKKyAgICAgICAgLy8gYmUgYWxsb3dlZCB0byBtYW51YWxseSBwaW5jaCB6b29t
IGluIGZ1cnRoZXIgaWYgdGhleSBkZXNpcmUuCisgICAgICAgIC8vIEZJWE1FOiBJbmNsdWRlIGZv
bnQgc2NhbGUgZmFjdG9yIG9uY2UgaXRzIGFkZGVkIHRvIHNldHRpbmdzLgorICAgICAgICBjb25z
dCBmbG9hdCBtYXhTY2FsZSA9IGRldmljZVNjYWxlRmFjdG9yKCkgKiAxIC8qIGZvbnQgc2NhbGUg
ZmFjdG9yICovOworCisgICAgICAgIGNvbnN0IGZsb2F0IGRlZmF1bHRNYXJnaW4gPSBrRG91Ymxl
VGFwWm9vbUNvbnRlbnREZWZhdWx0TWFyZ2luICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAg
ICAgY29uc3QgZmxvYXQgbWluaW11bU1hcmdpbiA9IGtEb3VibGVUYXBab29tQ29udGVudE1pbmlt
dW1NYXJnaW4gKiBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICAvLyBXZSB3YW50IHRoZSBt
YXJnaW5zIHRvIGhhdmUgdGhlIHNhbWUgcGh5c2ljYWwgc2l6ZSwgd2hpY2ggbWVhbnMgd2UKKyAg
ICAgICAgLy8gbmVlZCB0byBleHByZXNzIHRoZW0gaW4gcG9zdC1zY2FsZSBzaXplLiBUbyBkbyB0
aGF0IHdlJ2QgbmVlZCB0byBrbm93CisgICAgICAgIC8vIHRoZSBzY2FsZSB3ZSdyZSBzY2FsaW5n
IHRvLCBidXQgdGhhdCBkZXBlbmRzIG9uIHRoZSBtYXJnaW5zLiBJbnN0ZWFkCisgICAgICAgIC8v
IHdlIGV4cHJlc3MgdGhlbSBhcyBhIGZyYWN0aW9uIG9mIHRoZSB0YXJnZXQgcmVjdGFuZ2xlOiB0
aGlzIHdpbGwgYmUKKyAgICAgICAgLy8gY29ycmVjdCBpZiB3ZSBlbmQgdXAgZnVsbHkgem9vbWlu
ZyB0byBpdCwgYW5kIHdvbid0IG1hdHRlciBpZiB3ZQorICAgICAgICAvLyBkb24ndC4KKyAgICAg
ICAgcmVjdCA9IHdpZGVuUmVjdFdpdGhpblBhZ2VCb3VuZHMocmVjdCwKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ+KGRlZmF1bHRNYXJnaW4gKiByZWN0LndpZHRoIC8gbV9zaXplLndp
ZHRoKSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1pbmltdW1NYXJnaW4gKiBy
ZWN0LndpZHRoIC8gbV9zaXplLndpZHRoKSk7CisKKyAgICAgICAgLy8gRml0IGJsb2NrIHRvIHNj
cmVlbiwgcmVzcGVjdGluZyBsaW1pdHMuCisgICAgICAgIGlmICh0ZXh0VHlwZSA9PSBOb3JtYWxU
ZXh0KQorICAgICAgICAgICAgc2NhbGUgPSBtYXhTY2FsZTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzY2FsZSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9zaXplLndpZHRoKSAvIHJlY3Qu
d2lkdGg7CisgICAgICAgICAgICBzY2FsZSA9IG1pbihzY2FsZSwgbWF4U2NhbGUpOworICAgICAg
ICB9CisgICAgICAgIHNjYWxlID0gY2xhbXBQYWdlU2NhbGVGYWN0b3JUb0xpbWl0cyhzY2FsZSk7
CisKKyAgICAgICAgc2NhbGVVbmNoYW5nZWQgPSBmYWJzKHBhZ2VTY2FsZUZhY3RvcigpIC0gc2Nh
bGUpIDwga01pblNjYWxlRGlmZmVyZW5jZTsKKyAgICB9CisKKyAgICBpZiAoem9vbVR5cGUgPT0g
RG91YmxlVGFwKSB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBzY2FsZVVuY2hhbmdl
ZCkgeworICAgICAgICAgICAgLy8gWm9vbSBvdXQgdG8gb3ZlcnZpZXcgbW9kZS4KKyAgICAgICAg
ICAgIGlmIChvdmVydmlld1NjYWxlKQorICAgICAgICAgICAgICAgIHNjYWxlID0gb3ZlcnZpZXdT
Y2FsZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocmVj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gS2VlcCBjdXJyZW50IHNjYWxlIChubyBuZWVkIHRv
IHNjcm9sbCBhcyB4LHkgd2lsbCBub3JtYWxseSBhbHJlYWR5CisgICAgICAgIC8vIGJlIHZpc2li
bGUpLiBGSVhNRTogUmV2aXNpdCB0aGlzIGlmIGl0IGlzbid0IGFsd2F5cyB0cnVlLgorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYmVpbmcgY2FsbGVk
IGZvciBhdXRvIHpvb20gZHVyaW5nIGZpbmQgaW4gcGFnZSwKKyAgICAvLyB0aGVuIGlmIHRoZSB1
c2VyIG1hbnVhbGx5IHpvb21zIGluIGl0J2QgYmUgbmljZSB0byBwcmVzZXJ2ZSB0aGUgcmVsYXRp
dmUKKyAgICAvLyBpbmNyZWFzZSBpbiB6b29tIHRoZXkgY2F1c2VkIChpZiB0aGV5IHpvb20gb3V0
IHRoZW4gaXQncyBvayB0byB6b29tCisgICAgLy8gdGhlbSBiYWNrIGluIGFnYWluKS4gVGhpcyBp
c24ndCBjb21wYXRpYmxlIHdpdGggb3VyIGN1cnJlbnQgZG91YmxlLXRhcAorICAgIC8vIHpvb20g
c3RyYXRlZ3kgKGZpdHRpbmcgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHNjcmVlbikgdGhv
dWdoLgorCisgICAgZmxvYXQgc2NyZWVuSGVpZ2h0ID0gbV9zaXplLmhlaWdodCAvIHNjYWxlICog
cGFnZVNjYWxlRmFjdG9yKCk7CisgICAgZmxvYXQgc2NyZWVuV2lkdGggPSBtX3NpemUud2lkdGgg
LyBzY2FsZSAqIHBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgLy8gU2Nyb2xsIHRvIHZlcnRpY2Fs
bHkgYWxpZ24gdGhlIGJsb2NrLgorICAgIGlmIChyZWN0LmhlaWdodCA8IHNjcmVlbkhlaWdodCkg
eworICAgICAgICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBzaG9ydCBibG9ja3MuCisgICAgICAgIHJl
Y3QueSAtPSAwLjUgKiAoc2NyZWVuSGVpZ2h0IC0gcmVjdC5oZWlnaHQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIEVuc3VyZSBwb3NpdGlvbiB3ZSdyZSB6b29taW5nIHRvICgrIHBhZGRpbmcp
IGlzbid0IG9mZiB0aGUgYm90dG9tIG9mCisgICAgICAgIC8vIHRoZSBzY3JlZW4uCisgICAgICAg
IHJlY3QueSA9IG1heCgoZmxvYXQpIHJlY3QueSwgaGl0UmVjdC55ICsga1RvdWNoUG9pbnRQYWRk
aW5nIC0gc2NyZWVuSGVpZ2h0KTsKKyAgICB9IC8vIE90aGVyd2lzZSB0b3AgYWxpZ24gdGhlIGJs
b2NrLgorCisgICAgLy8gRG8gdGhlIHNhbWUgdGhpbmcgZm9yIGhvcml6b250YWwgYWxpZ25tZW50
LgorICAgIGlmIChyZWN0LndpZHRoIDwgc2NyZWVuV2lkdGgpCisgICAgICAgIHJlY3QueCAtPSAw
LjUgKiAoc2NyZWVuV2lkdGggLSByZWN0LndpZHRoKTsKKyAgICBlbHNlCisgICAgICAgIHJlY3Qu
eCA9IG1heCgoZmxvYXQpIHJlY3QueCwgaGl0UmVjdC54ICsga1RvdWNoUG9pbnRQYWRkaW5nIC0g
c2NyZWVuV2lkdGgpOworCisgICAgc2Nyb2xsLnggPSByZWN0Lng7CisgICAgc2Nyb2xsLnkgPSBy
ZWN0Lnk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJWaWV3SW1wbDo6bnVtYmVyT2ZXaGVlbEV2ZW50
SGFuZGxlcnNDaGFuZ2VkKHVuc2lnbmVkIG51bWJlck9mV2hlZWxIYW5kbGVycykKIHsKICAgICBt
X2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMgPSBudW1iZXJPZldoZWVsSGFuZGxlcnMgPiAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYTAzOWEwOWNlYjg3YzIw
ZTNkYTg0MzMzMWYxYmVhYWVkM2Y0ZjEzMS4uNTNjNGRjMmM2NmQ2YTI2YTE4YTlkM2RkOWRiYTdi
NWEyMDZlMzA1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBA
IC05OCw2ICs5OCwxMSBAQCBjbGFzcyBXZWJUb3VjaEV2ZW50OwogCiBjbGFzcyBXZWJWaWV3SW1w
bCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50
LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4gewogcHVibGljOgorICAgIGVudW0gQXV0
b1pvb21UeXBlIHsKKyAgICAgICAgRG91YmxlVGFwLAorICAgICAgICBGaW5kSW5QYWdlLAorICAg
IH07CisKICAgICAvLyBXZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2Uo
KTsKICAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAtNDYw
LDYgKzQ2NSw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCiAg
ICAgdm9pZCByZXNldEdlc3R1cmVSZWNvZ25pemVyKCk7CisgICAgdm9pZCBjb21wdXRlU2NhbGVB
bmRTY3JvbGxGb3JIaXRSZWN0KGNvbnN0IFdlYlJlY3QmIGhpdFJlY3QsIEF1dG9ab29tVHlwZSwg
ZmxvYXQmIHNjYWxlLCBXZWJQb2ludCYgc2Nyb2xsKTsKICNlbmRpZgogCiAgICAgdm9pZCBsb3Nl
Q29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsKQEAgLTQ5Miw2ICs0OTgsMTEgQEAgcHJp
dmF0ZToKICAgICAgIERyYWdPdmVyCiAgICAgfTsKIAorICAgIGVudW0gQm9vc3RlZFRleHRUeXBl
IHsKKyAgICAgICAgTm9ybWFsVGV4dCwKKyAgICAgICAgQm9vc3RlZFRleHQsCisgICAgfTsKKwog
ICAgIFdlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3SW1w
bCgpOwogCkBAIC01MzIsNiArNTQzLDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVMYXll
clRyZWVWaWV3cG9ydCgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVS
KQorCisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBibG9jayB0eXBlIG5v
ZGUgdG91Y2hlZCBieSB0aGUgaW5wdXQKKyAgICAvLyBwb2ludCB3aXRoIHRoZSBwYWRkaW5nLgor
ICAgIFdlYlJlY3QgY29tcHV0ZUJsb2NrQm91bmRzKGNvbnN0IFdlYlJlY3QmLCBBdXRvWm9vbVR5
cGUsIEJvb3N0ZWRUZXh0VHlwZSYpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uOiBXaWRlbnMg
dGhlIHdpZHRoIG9mIHxzb3VyY2V8IGJ5IHRoZSBzcGVjaWZpZWQgbWFyZ2lucworICAgIC8vIHdo
aWxlIGtlZXBpbmcgaXQgc21hbGxlciB0aGFuIHBhZ2Ugd2lkdGguCisgICAgV2ViUmVjdCB3aWRl
blJlY3RXaXRoaW5QYWdlQm91bmRzKGNvbnN0IFdlYlJlY3QmIHNvdXJjZSwgaW50IHRhcmdldE1h
cmdpbiwgaW50IG1pbmltdW1NYXJnaW4pOworI2VuZGlmCisKICNpZiBFTkFCTEUoUE9JTlRFUl9M
T0NLKQogICAgIHZvaWQgcG9pbnRlckxvY2tNb3VzZUV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQm
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJG
cmFtZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3Qu
Y3BwCmluZGV4IGI1OTAwMTg2MGRhMmFiOWJiZjBhMmQ4MmIyODI2ZGM4MGJjZGFmMmEuLjNlZGVl
MDE4OTI4NjQ5M2M5YzM5MmI4NmVmMmRhYWY2NWMwMmQwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKQEAgLTE1MSw2ICsxNTEsNzYgQEAgVEVT
VF9GKFdlYkZyYW1lVGVzdCwgQ2hyb21lUGFnZU5vSmF2YXNjcmlwdCkKICAgICBFWFBFQ1RfRVEo
c3RkOjpzdHJpbmc6Om5wb3MsIGNvbnRlbnQuZmluZCgiQ2xvYmJlcmVkIikpOwogfQogCitURVNU
X0YoV2ViRnJhbWVUZXN0LCBEaXZBdXRvWm9vbVBhcmFtc1Rlc3QpCit7CisgICAgcmVnaXN0ZXJN
b2NrZWRIdHRwVVJMTG9hZCgiZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5o
dG1sIik7CisKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwgPSBzdGF0aWNfY2FzdDxXZWJW
aWV3SW1wbCo+KEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKG1fYmFzZVVS
TCArICJnZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiLCB0cnVlKSk7
CisgICAgaW50IHBhZ2VXaWR0aCA9IDY0MDsKKyAgICBpbnQgcGFnZUhlaWdodCA9IDQ4MDsKKyAg
ICBpbnQgZGl2UG9zWCA9IDIwMDsKKyAgICBpbnQgZGl2UG9zWSA9IDIwMDsKKyAgICBpbnQgZGl2
V2lkdGggPSAyMDA7CisgICAgaW50IGRpdkhlaWdodCA9IDE1MDsKKyAgICBXZWJSZWN0IGRvdWJs
ZVRhcFBvaW50KDI1MCwgMjUwLCAwLCAwKTsKKyAgICB3ZWJWaWV3SW1wbC0+cmVzaXplKFdlYlNp
emUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgZmxvYXQgc2NhbGU7CisgICAgV2ViUG9p
bnQgc2Nyb2xsOworCisgICAgLy8gVGVzdCBmb3IgRG91YmxldGFwIHNjYWxpbmcKKworICAgIC8v
IFRlc3RzIGZvciB6b29taW5nIGluIGFuZCBvdXQgd2l0aG91dCBjbGFtcGluZy4KKyAgICAvLyBT
ZXQgZGV2aWNlIHNjYWxlIGFuZCBzY2FsZSBsaW1pdHMgc28gd2UgZG9udCBnZXQgY2xhbXBlZC4K
KyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoNCk7CisgICAgd2ViVmlld0lt
cGwtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cygwLCA0IC8gd2ViVmlld0ltcGwtPmRldmljZVNj
YWxlRmFjdG9yKCkpOworCisgICAgLy8gVGVzdCB6b29taW5nIGludG8gZGl2LgorICAgIHdlYlZp
ZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCBX
ZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBmbG9hdCBzY2FsZWRE
aXZXaWR0aCA9IGRpdldpZHRoICogc2NhbGU7CisgICAgZmxvYXQgc2NhbGVkRGl2SGVpZ2h0ID0g
ZGl2SGVpZ2h0ICogc2NhbGU7CisgICAgaW50IGhTY3JvbGwgPSAoKGRpdlBvc1ggKiBzY2FsZSkg
LSAoKHBhZ2VXaWR0aCAtIHNjYWxlZERpdldpZHRoKSAvIDIpKSAvIHNjYWxlOworICAgIGludCB2
U2Nyb2xsID0gKChkaXZQb3NZICogc2NhbGUpIC0gKChwYWdlSGVpZ2h0IC0gc2NhbGVkRGl2SGVp
Z2h0KSAvIDIpKSAvIHNjYWxlOworICAgIEVYUEVDVF9GTE9BVF9FUShwYWdlV2lkdGggLyAoZGl2
V2lkdGggKyAxMi4wIC8qIG1hcmdpbiAqLyksIHNjYWxlKTsKKyAgICBFWFBFQ1RfRVEoaFNjcm9s
bCwgc2Nyb2xsLngpOworICAgIEVYUEVDVF9FUSh2U2Nyb2xsLCBzY3JvbGwueSk7CisKKyAgICAv
LyBUZXN0IHpvb20gb3V0IHRvIG92ZXJ2aWV3IHNjYWxlLgorICAgIHdlYlZpZXdJbXBsLT5hcHBs
eVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2Nh
bGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5j
b21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3SW1w
bDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgc2Nh
bGUpOworICAgIEVYUEVDVF9FUShXZWJQb2ludCgwLCAwKSwgc2Nyb2xsKTsKKworICAgIC8vIFRl
c3RzIGZvciBjbGFtcGVkIHNjYWxpbmcuCisgICAgLy8gVGVzdCBjbGFtcCB0byBkZXZpY2Ugc2Nh
bGU6CisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6
ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0
b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDIuNSk7CisgICAg
d2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9p
bnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyLjUsIHNjYWxlKTsKKworICAgIC8vIFRlc3QgY2xhbXAgdG8gbWluaW11bSBzY2Fs
ZToKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJbnRTaXpl
KHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3Rv
cigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDEuNSAvIHdl
YlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpLCA0IC8gd2ViVmlld0ltcGwtPmRldmljZVNj
YWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JI
aXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Ny
b2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS41LCBzY2FsZSk7CisgICAgRVhQRUNUX0VRKFdl
YlBvaW50KDAsIDApLCBzY3JvbGwpOworCisgICAgLy8gVGVzdCBjbGFtcCB0byBtYXhpbXVtIHNj
YWxlOgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNp
emUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFj
dG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3
ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDMgLyB3ZWJWaWV3SW1wbC0+
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNj
cm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNj
YWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBzY2FsZSk7CisKKworICAgIC8v
IFRlc3QgZm9yIE5vbi1kb3VibGV0YXAgc2NhbGluZworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdl
U2NhbGVGYWN0b3IoMSwgV2ViUG9pbnQoMCwgMCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXREZXZp
Y2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGlt
aXRzKDAsIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgLy8gVGVz
dCB6b29taW5nIGludG8gZGl2LgorICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3Jv
bGxGb3JIaXRSZWN0KFdlYlJlY3QoMjUwLCAyNTAsIDEwLCAxMCksIFdlYlZpZXdJbXBsOjpGaW5k
SW5QYWdlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEocGFnZVdpZHRoIC8g
KGRpdldpZHRoICsgMTIuMCAvKiBtYXJnaW4gKi8pLCBzY2FsZSk7Cit9CisKIGNsYXNzIFRlc3RS
ZWxvYWREb2VzbnRSZWRpcmVjdFdlYkZyYW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYk5hdmlnYXRpb25Qb2xpY3kgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19k
aXZfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllN2MwNzBjYzAzZTU0NWZiYmNiZTA3ZWUxNWZlZjg0
Yjc2MjBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sCkBAIC0wLDAg
KzEsMTAgQEAKKzxodG1sPgorICA8Ym9keT4KKyAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNv
bG9yOiBncmVlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwcHg7IHRvcDogMHB4OyB3aWR0
aDogNjQwcHg7IGhlaWdodDogNDgwcHgiPgorICAgICAgPHA+VG9wIERpdjwvcD4KKyAgICAgIDxk
aXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxl
ZnQ6IDIwMHB4OyB0b3A6IDIwMHB4OyB3aWR0aDogMjAwcHg7IGhlaWdodDogMTUwcHgiPgorICAg
ICAgICA8cD5EaXYgdG8gem9vbSB0bzwvcD4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125679</attachid>
            <date>2012-02-06 11:41:36 -0800</date>
            <delta_ts>2012-02-06 14:20:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120206144135.patch</filename>
            <type>text/plain</type>
            <size>19795</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RkMWZiN2UzMmE4YzVi
N2UyYzk5OGEzNDNjZWE1ZDY4NWM3ZGZjNS4uN2JhNDFiOTQ4OTc1YWQ3NjkyMDA0YmIyYzgyMzdi
NzI4MmJlODU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTA2ICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3RzIC0tZ3Rlc3RfZmls
dGVyPVdlYkZyYW1lVGVzdC5EaXZBdXRvWm9vbVBhcmFtc1Rlc3QKKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OnNjYWxlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUV2ZW50
KToKKwogMjAxMi0wMi0wNiAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSB1bnVzZWQgZGlzYWJsZWRDb21wdXRl
ZFByb3BlcnRpZXMgZnJvbSBtZXRob2RzIGluIFN0eWxlc1NpZGViYXJQYW5lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDRmYmFmZmRkY2ZkZTEyZTJiZDgwNTBmNGI3ZTZjYzg0MDJkMDBm
ZjcuLjc3M2Q1NGJkNmMxMGFkZjMyNGM4NTdkMzYxODBhYTkyMmRlMjcwYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDItMDYgIFZhcnVuIEphaW4g
IDx2YXJ1bmphaW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2Qg
dG8gV2ViVmlld0ltcGwgdG8gZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUg
ZXZlbnRzIG9uIHRvdWNoIGRldmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyOTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhp
dFJlY3QpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0lt
cGwpOgorICAgICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL2RhdGEvZ2V0X3Nj
YWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0w
NCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIEFkZCBzdXBwb3J0IHRvIGZvcmNlIGZ1bGwgZGFtYWdlIGluIENDRGFtYWdlVHJhY2tl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgKaW5k
ZXggZWQ1NTdjMTc4NThkNTVhZDIzMmI5Yjc2MjM0NDFlMDFhNGFmZmVlMi4uZTJkNjRkODQyZDE5
NTc0MjM0YmU4MDg5ZDQ2ZWQzNDExNThjYTk5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oCkBAIC00NCwxMiArNDQsMTMgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKLSAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudChUeXBlIHR5cGUsIGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBkb3Vi
bGUgdGltZXN0YW1wLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgYm9vbCBzaGlmdEtleSwg
Ym9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5KQorICAgIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIGRvdWJsZSB0aW1lc3RhbXAsIGZsb2F0IGRlbHRhWCwgZmxv
YXQgZGVsdGFZLCBib29sIHNoaWZ0S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29s
IG1ldGFLZXksIGZsb2F0IHNjYWxlID0gMCkKICAgICAgICAgOiBQbGF0Zm9ybUV2ZW50KHR5cGUs
IHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIG1ldGFLZXksIHRpbWVzdGFtcCkKICAgICAgICAg
LCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogICAgICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFs
UG9zaXRpb24pCiAgICAgICAgICwgbV9kZWx0YVgoZGVsdGFYKQogICAgICAgICAsIG1fZGVsdGFZ
KGRlbHRhWSkKKyAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQogICAgIHsKICAgICB9CiAKQEAgLTcw
LDEzICs3MSwxNSBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBkZWx0YVgoKSBjb25zdCB7IHJldHVy
biBtX2RlbHRhWDsgfQogICAgIGZsb2F0IGRlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsdGFZ
OyB9Ci0gICAgCisgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CisK
IHByb3RlY3RlZDoKICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEludFBvaW50IG1fZ2xv
YmFsUG9zaXRpb247CiAgICAgSW50U2l6ZSBtX2FyZWE7CiAgICAgZmxvYXQgbV9kZWx0YVg7CiAg
ICAgZmxvYXQgbV9kZWx0YVk7CisgICAgZmxvYXQgbV9zY2FsZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApp
bmRleCA4NGRlNzcyOWNjZTVhZDkzNmI1MDY2ZDc0MWQ3MWZmY2VlNTEwODg2Li5lZDQ3MmNmODQ1
OGY1OTc1OTFlM2M4YzA0ZmZiNWYzNzQ1MjJhZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xOTMsNiArMTkzLDE0IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpCiAgICAgcmV0
dXJuIGF0dHJpYnV0ZXM7CiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGNvbnRyb2wg
cGFyYW1ldGVycyBmb3IgYXV0b21hdGVkIHNjYWxpbmcgb2Ygd2VicGFnZXMKKy8vIChzdWNoIGFz
IGR1ZSB0byBhIGRvdWJsZSB0YXAgZ2VzdHVyZSBvciBmaW5kIGluIHBhZ2UgZXRjLikuIFRoZXNl
IGFyZQorLy8gZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KK3N0YXRpYyBjb25zdCBpbnQga1Rv
dWNoUG9pbnRQYWRkaW5nID0gMzI7CitzdGF0aWMgY29uc3QgZmxvYXQga01pblNjYWxlRGlmZmVy
ZW5jZSA9IDAuMDE7CitzdGF0aWMgY29uc3QgZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50RGVm
YXVsdE1hcmdpbiA9IDU7CitzdGF0aWMgY29uc3QgZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50
TWluaW11bU1hcmdpbiA9IDI7CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTgwMiwxNSArODEwLDE5NiBAQCBib29sIFdlYlZpZXdJbXBsOjp0b3Vj
aEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmIGV2ZW50KQogICAgIGJvb2wgZGVmYXVsdFByZXZl
bnRlZCA9IG1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVRv
dWNoRXZlbnQodG91Y2hFdmVudEJ1aWxkZXIpOwogCiAjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dO
SVpFUikKLSAgICBPd25QdHI8VmVjdG9yPFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUV2ZW50PiA+
IGdlc3R1cmVFdmVudHMobV9nZXN0dXJlUmVjb2duaXplci0+cHJvY2Vzc1RvdWNoRXZlbnRGb3JH
ZXN0dXJlcyh0b3VjaEV2ZW50QnVpbGRlciwgZGVmYXVsdFByZXZlbnRlZCkpOwotICAgIGZvciAo
dW5zaWduZWQgaW50ICBpID0gMDsgaSA8IGdlc3R1cmVFdmVudHMtPnNpemUoKTsgaSsrKQotICAg
ICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0
dXJlRXZlbnQoZ2VzdHVyZUV2ZW50cy0+YXQoaSkpOworICAgIE93blB0cjxWZWN0b3I8UGxhdGZv
cm1HZXN0dXJlRXZlbnQ+ID4gZ2VzdHVyZUV2ZW50cyhtX2dlc3R1cmVSZWNvZ25pemVyLT5wcm9j
ZXNzVG91Y2hFdmVudEZvckdlc3R1cmVzKHRvdWNoRXZlbnRCdWlsZGVyLCBkZWZhdWx0UHJldmVu
dGVkKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnZXN0dXJlRXZlbnRzLT5zaXplKCk7
IGkrKykgeworICAgICAgICBpZiAoZ2VzdHVyZUV2ZW50cy0+YXQoaSkudHlwZSgpID09IFBsYXRm
b3JtRXZlbnQ6Okdlc3R1cmVEb3VibGVUYXApIHsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlID0g
MTsKKyAgICAgICAgICAgIFdlYlBvaW50IHNjcm9sbDsKKyAgICAgICAgICAgIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50JiBvbGRQZ2UgPSBnZXN0dXJlRXZlbnRzLT5hdChpKTsKKyAgICAgICAgICAgIFdl
YlJlY3QgaGl0UmVjdChvbGRQZ2UucG9zaXRpb24oKS54KCksIG9sZFBnZS5wb3NpdGlvbigpLnko
KSwgMCwgMCk7CisgICAgICAgICAgICBjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGhp
dFJlY3QsIERvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgICAgICAgICBtYWluRnJhbWVJ
bXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoCisgICAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudChvbGRQZ2UudHlwZSgpLCBvbGRQZ2Uu
cG9zaXRpb24oKSwgb2xkUGdlLmdsb2JhbFBvc2l0aW9uKCksIG9sZFBnZS50aW1lc3RhbXAoKSwK
KyAgICAgICAgICAgICAgICAgIHNjcm9sbC54LCBzY3JvbGwueSwgb2xkUGdlLnNoaWZ0S2V5KCks
IG9sZFBnZS5jdHJsS2V5KCksIG9sZFBnZS5hbHRLZXkoKSwgb2xkUGdlLm1ldGFLZXkoKSwgc2Nh
bGUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50cy0+YXQo
aSkpOworICAgIH0KICNlbmRpZgogCiAgICAgcmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7CiB9CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK1dlYlJlY3QgV2ViVmlld0ltcGw6
OmNvbXB1dGVCbG9ja0JvdW5kcyhjb25zdCBXZWJSZWN0JiByZWN0LCBBdXRvWm9vbVR5cGUgem9v
bVR5cGUsIEJvb3N0ZWRUZXh0VHlwZSYgdGV4dFR5cGUpCit7CisgICAgdGV4dFR5cGUgPSBCb29z
dGVkVGV4dDsKKyAgICBpZiAoIW1haW5GcmFtZUltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYlJl
Y3QoKTsKKworICAgIC8vIFVzZSB0aGUgcmVjdC1iYXNlZCBoaXQgdGVzdCB0byBmaW5kIHRoZSBu
b2RlLgorICAgIEludFBvaW50IHBvaW50ID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKS0+
d2luZG93VG9Db250ZW50cyhJbnRQb2ludChyZWN0LngsIHJlY3QueSkpOworICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsCisgICAgICAgICAgICBmYWxzZSwgem9vbVR5cGUg
PT0gRmluZEluUGFnZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBIaXRUZXN0UmVxdWVzdDo6QWN0
aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LAorICAgICAgICAgICAgSW50U2l6ZShyZWN0
LndpZHRoLCByZWN0LmhlaWdodCkpOworCisgICAgLy8gRmluZCB0aGUgbW9zdCBib29zdGVkIHRl
eHQgbm9kZSBpbnRlcnNlY3RlZCBieSB0aGUgaGl0IHRlc3QgKGlmIGFueSkuCisgICAgTm9kZSog
bm9kZSA9IDA7CisgICAgZmxvYXQgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IDA7CisgICAgY29u
c3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4mIGxpc3QgPSByZXN1bHQucmVjdEJhc2VkVGVz
dFJlc3VsdCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsaXN0LmVuZCgpOyArK2l0KSB7CisgICAg
ICAgIE5vZGUqIGN1cnJlbnQgPSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChjdXJyZW50LT5pc1Rl
eHROb2RlKCkgJiYgY3VycmVudC0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAgZmxvYXQgYm9v
c3RpbmdGYWN0b3IgPSBjdXJyZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZFNpemUoKSAvCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPnJlbmRl
cmVyKCktPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAg
ICAgICAgIGlmIChib29zdGluZ0ZhY3RvciA+IGdyZWF0ZXN0Qm9vc3RpbmdGYWN0b3IpIHsKKyAg
ICAgICAgICAgICAgICBub2RlID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICB0ZXh0VHlwZSA9
IChib29zdGluZ0ZhY3RvciA8PSAxKSA/IE5vcm1hbFRleHQgOiBCb29zdGVkVGV4dDsKKyAgICAg
ICAgICAgICAgICBncmVhdGVzdEJvb3N0aW5nRmFjdG9yID0gYm9vc3RpbmdGYWN0b3I7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIG5v
ZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBGaW5kIHRoZSBibG9jayB0eXBlIG5vZGUg
YmFzZWQgb24gdGhlIGhpdCBub2RlLgorICAgIHdoaWxlIChub2RlICYmICghbm9kZS0+cmVuZGVy
ZXIoKSB8fCBub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKKyAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKKworICAgIC8vIFJldHVybiB0aGUgYm91bmRpbmcgYm94IGluIHRo
ZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgSW50
UmVjdCByZWN0ID0gbm9kZS0+Tm9kZTo6Z2V0UmVjdCgpOworICAgICAgICBGcmFtZSogZnJhbWUg
PSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICByZXR1cm4gZnJhbWUtPnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYlJlY3QoKTsK
K30KKworV2ViUmVjdCBXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhjb25z
dCBXZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBtaW5pbXVtTWFyZ2luKQor
eworICAgIFdlYlNpemUgbWF4U2l6ZTsKKyAgICBpZiAobWFpbkZyYW1lKCkpCisgICAgICAgIG1h
eFNpemUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCk7CisgICAgSW50U2l6ZSBzY3JvbGxP
ZmZzZXQ7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAgICBzY3JvbGxPZmZzZXQgPSBtYWlu
RnJhbWUoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaW50IGxlZnRNYXJnaW4gPSB0YXJnZXRNYXJn
aW47CisgICAgaW50IHJpZ2h0TWFyZ2luID0gdGFyZ2V0TWFyZ2luOworCisgICAgY29uc3QgaW50
IGFic29sdXRlU291cmNlWCA9IHNvdXJjZS54ICsgc2Nyb2xsT2Zmc2V0LndpZHRoKCk7CisgICAg
aWYgKGxlZnRNYXJnaW4gPiBhYnNvbHV0ZVNvdXJjZVgpIHsKKyAgICAgICAgbGVmdE1hcmdpbiA9
IGFic29sdXRlU291cmNlWDsKKyAgICAgICAgcmlnaHRNYXJnaW4gPSBtYXgobGVmdE1hcmdpbiwg
bWluaW11bU1hcmdpbik7CisgICAgfQorCisgICAgY29uc3QgaW50IG1heGltdW1SaWdodE1hcmdp
biA9IG1heFNpemUud2lkdGggLSAoc291cmNlLndpZHRoICsgYWJzb2x1dGVTb3VyY2VYKTsKKyAg
ICBpZiAocmlnaHRNYXJnaW4gPiBtYXhpbXVtUmlnaHRNYXJnaW4pIHsKKyAgICAgICAgcmlnaHRN
YXJnaW4gPSBtYXhpbXVtUmlnaHRNYXJnaW47CisgICAgICAgIGxlZnRNYXJnaW4gPSBtaW4obGVm
dE1hcmdpbiwgbWF4KHJpZ2h0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKSk7CisgICAgfQorCisgICAg
Y29uc3QgaW50IG5ld1dpZHRoID0gc291cmNlLndpZHRoICsgbGVmdE1hcmdpbiArIHJpZ2h0TWFy
Z2luOworICAgIGNvbnN0IGludCBuZXdYID0gc291cmNlLnggLSBsZWZ0TWFyZ2luOworCisgICAg
QVNTRVJUKG5ld1dpZHRoID49IDApOworICAgIEFTU0VSVChzY3JvbGxPZmZzZXQud2lkdGgoKSAr
IG5ld1ggKyBuZXdXaWR0aCA8PSBtYXhTaXplLndpZHRoKTsKKworICAgIHJldHVybiBXZWJSZWN0
KG5ld1gsIHNvdXJjZS55LCBuZXdXaWR0aCwgc291cmNlLmhlaWdodCk7Cit9CisKK3ZvaWQgV2Vi
Vmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYg
aGl0UmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBz
Y3JvbGwpCit7CisgICAgc2NhbGUgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBzY3JvbGwueCA9
IHNjcm9sbC55ID0gMDsKKyAgICBXZWJSZWN0IHRhcmdldFJlY3QgPSBoaXRSZWN0OworICAgIGlm
ICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCA9IHRhcmdl
dFJlY3QuaGVpZ2h0ID0ga1RvdWNoUG9pbnRQYWRkaW5nOworCisgICAgQm9vc3RlZFRleHRUeXBl
IHRleHRUeXBlID0gQm9vc3RlZFRleHQ7CisKKyAgICBXZWJSZWN0IHJlY3QgPSBjb21wdXRlQmxv
Y2tCb3VuZHModGFyZ2V0UmVjdCwgem9vbVR5cGUsIHRleHRUeXBlKTsKKworICAgIGNvbnN0IGZs
b2F0IG92ZXJ2aWV3U2NhbGUgPSBtX21pbmltdW1QYWdlU2NhbGVGYWN0b3I7CisgICAgYm9vbCBz
Y2FsZVVuY2hhbmdlZCA9IHRydWU7CisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkgeworICAgICAg
ICAvLyBQYWdlcyBzaG91bGQgYmUgYXMgbGVnaWJsZSBhcyBvbiBkZXNrdG9wIHdoZW4gYXQgZHBp
IHNjYWxlLCBzbyBubworICAgICAgICAvLyBuZWVkIHRvIHpvb20gaW4gZnVydGhlciB3aGVuIGF1
dG9tYXRpY2FsbHkgZGV0ZXJtaW5pbmcgem9vbSBsZXZlbAorICAgICAgICAvLyAoYWZ0ZXIgZG91
YmxlIHRhcCwgZmluZCBpbiBwYWdlLCBldGMpLCB0aG91Z2ggdGhlIHVzZXIgc2hvdWxkIHN0aWxs
CisgICAgICAgIC8vIGJlIGFsbG93ZWQgdG8gbWFudWFsbHkgcGluY2ggem9vbSBpbiBmdXJ0aGVy
IGlmIHRoZXkgZGVzaXJlLgorICAgICAgICAvLyBGSVhNRTogSW5jbHVkZSBmb250IHNjYWxlIGZh
Y3RvciBvbmNlIGl0cyBhZGRlZCB0byBzZXR0aW5ncy4KKyAgICAgICAgY29uc3QgZmxvYXQgbWF4
U2NhbGUgPSBkZXZpY2VTY2FsZUZhY3RvcigpICogMSAvKiBmb250IHNjYWxlIGZhY3RvciAqLzsK
KworICAgICAgICBjb25zdCBmbG9hdCBkZWZhdWx0TWFyZ2luID0ga0RvdWJsZVRhcFpvb21Db250
ZW50RGVmYXVsdE1hcmdpbiAqIGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIGNvbnN0IGZs
b2F0IG1pbmltdW1NYXJnaW4gPSBrRG91YmxlVGFwWm9vbUNvbnRlbnRNaW5pbXVtTWFyZ2luICog
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgbWFyZ2lucyB0byBo
YXZlIHRoZSBzYW1lIHBoeXNpY2FsIHNpemUsIHdoaWNoIG1lYW5zIHdlCisgICAgICAgIC8vIG5l
ZWQgdG8gZXhwcmVzcyB0aGVtIGluIHBvc3Qtc2NhbGUgc2l6ZS4gVG8gZG8gdGhhdCB3ZSdkIG5l
ZWQgdG8ga25vdworICAgICAgICAvLyB0aGUgc2NhbGUgd2UncmUgc2NhbGluZyB0bywgYnV0IHRo
YXQgZGVwZW5kcyBvbiB0aGUgbWFyZ2lucy4gSW5zdGVhZAorICAgICAgICAvLyB3ZSBleHByZXNz
IHRoZW0gYXMgYSBmcmFjdGlvbiBvZiB0aGUgdGFyZ2V0IHJlY3RhbmdsZTogdGhpcyB3aWxsIGJl
CisgICAgICAgIC8vIGNvcnJlY3QgaWYgd2UgZW5kIHVwIGZ1bGx5IHpvb21pbmcgdG8gaXQsIGFu
ZCB3b24ndCBtYXR0ZXIgaWYgd2UKKyAgICAgICAgLy8gZG9uJ3QuCisgICAgICAgIHJlY3QgPSB3
aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKHJlY3QsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihkZWZhdWx0TWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6ZS53aWR0aCksCisgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaW5pbXVtTWFyZ2luICogcmVjdC53aWR0aCAv
IG1fc2l6ZS53aWR0aCkpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0byBzY3JlZW4sIHJlc3Bl
Y3RpbmcgbGltaXRzLgorICAgICAgICBpZiAodGV4dFR5cGUgPT0gTm9ybWFsVGV4dCkKKyAgICAg
ICAgICAgIHNjYWxlID0gbWF4U2NhbGU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2Nh
bGUgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS53aWR0aCkgLyByZWN0LndpZHRoOworICAg
ICAgICAgICAgc2NhbGUgPSBtaW4oc2NhbGUsIG1heFNjYWxlKTsKKyAgICAgICAgfQorICAgICAg
ICBzY2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMoc2NhbGUpOworCisgICAgICAg
IHNjYWxlVW5jaGFuZ2VkID0gZmFicyhwYWdlU2NhbGVGYWN0b3IoKSAtIHNjYWxlKSA8IGtNaW5T
Y2FsZURpZmZlcmVuY2U7CisgICAgfQorCisgICAgaWYgKHpvb21UeXBlID09IERvdWJsZVRhcCkg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgc2NhbGVVbmNoYW5nZWQpIHsKKyAgICAg
ICAgICAgIC8vIFpvb20gb3V0IHRvIG92ZXJ2aWV3IG1vZGUuCisgICAgICAgICAgICBpZiAob3Zl
cnZpZXdTY2FsZSkKKyAgICAgICAgICAgICAgICBzY2FsZSA9IG92ZXJ2aWV3U2NhbGU7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIEtlZXAgY3VycmVudCBzY2FsZSAobm8gbmVlZCB0byBzY3JvbGwgYXMg
eCx5IHdpbGwgbm9ybWFsbHkgYWxyZWFkeQorICAgICAgICAvLyBiZSB2aXNpYmxlKS4gRklYTUU6
IFJldmlzaXQgdGhpcyBpZiBpdCBpc24ndCBhbHdheXMgdHJ1ZS4KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGJlaW5nIGNhbGxlZCBmb3IgYXV0byB6
b29tIGR1cmluZyBmaW5kIGluIHBhZ2UsCisgICAgLy8gdGhlbiBpZiB0aGUgdXNlciBtYW51YWxs
eSB6b29tcyBpbiBpdCdkIGJlIG5pY2UgdG8gcHJlc2VydmUgdGhlIHJlbGF0aXZlCisgICAgLy8g
aW5jcmVhc2UgaW4gem9vbSB0aGV5IGNhdXNlZCAoaWYgdGhleSB6b29tIG91dCB0aGVuIGl0J3Mg
b2sgdG8gem9vbQorICAgIC8vIHRoZW0gYmFjayBpbiBhZ2FpbikuIFRoaXMgaXNuJ3QgY29tcGF0
aWJsZSB3aXRoIG91ciBjdXJyZW50IGRvdWJsZS10YXAKKyAgICAvLyB6b29tIHN0cmF0ZWd5IChm
aXR0aW5nIHRoZSBjb250YWluaW5nIGJsb2NrIHRvIHRoZSBzY3JlZW4pIHRob3VnaC4KKworICAg
IGZsb2F0IHNjcmVlbkhlaWdodCA9IG1fc2l6ZS5oZWlnaHQgLyBzY2FsZSAqIHBhZ2VTY2FsZUZh
Y3RvcigpOworICAgIGZsb2F0IHNjcmVlbldpZHRoID0gbV9zaXplLndpZHRoIC8gc2NhbGUgKiBw
YWdlU2NhbGVGYWN0b3IoKTsKKworICAgIC8vIFNjcm9sbCB0byB2ZXJ0aWNhbGx5IGFsaWduIHRo
ZSBibG9jay4KKyAgICBpZiAocmVjdC5oZWlnaHQgPCBzY3JlZW5IZWlnaHQpIHsKKyAgICAgICAg
Ly8gVmVydGljYWxseSBjZW50ZXIgc2hvcnQgYmxvY2tzLgorICAgICAgICByZWN0LnkgLT0gMC41
ICogKHNjcmVlbkhlaWdodCAtIHJlY3QuaGVpZ2h0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBFbnN1cmUgcG9zaXRpb24gd2UncmUgem9vbWluZyB0byAoKyBwYWRkaW5nKSBpc24ndCBvZmYg
dGhlIGJvdHRvbSBvZgorICAgICAgICAvLyB0aGUgc2NyZWVuLgorICAgICAgICByZWN0LnkgPSBt
YXgoKGZsb2F0KSByZWN0LnksIGhpdFJlY3QueSArIGtUb3VjaFBvaW50UGFkZGluZyAtIHNjcmVl
bkhlaWdodCk7CisgICAgfSAvLyBPdGhlcndpc2UgdG9wIGFsaWduIHRoZSBibG9jay4KKworICAg
IC8vIERvIHRoZSBzYW1lIHRoaW5nIGZvciBob3Jpem9udGFsIGFsaWdubWVudC4KKyAgICBpZiAo
cmVjdC53aWR0aCA8IHNjcmVlbldpZHRoKQorICAgICAgICByZWN0LnggLT0gMC41ICogKHNjcmVl
bldpZHRoIC0gcmVjdC53aWR0aCk7CisgICAgZWxzZQorICAgICAgICByZWN0LnggPSBtYXgoKGZs
b2F0KSByZWN0LngsIGhpdFJlY3QueCArIGtUb3VjaFBvaW50UGFkZGluZyAtIHNjcmVlbldpZHRo
KTsKKworICAgIHNjcm9sbC54ID0gcmVjdC54OworICAgIHNjcm9sbC55ID0gcmVjdC55OworfQor
I2VuZGlmCisKIHZvaWQgV2ViVmlld0ltcGw6Om51bWJlck9mV2hlZWxFdmVudEhhbmRsZXJzQ2hh
bmdlZCh1bnNpZ25lZCBudW1iZXJPZldoZWVsSGFuZGxlcnMpCiB7CiAgICAgbV9oYXZlV2hlZWxF
dmVudEhhbmRsZXJzID0gbnVtYmVyT2ZXaGVlbEhhbmRsZXJzID4gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGEwMzlhMDljZWI4N2MyMGUzZGE4NDMzMzFm
MWJlYWFlZDNmNGYxMzEuLjU5OGJkMzM1OGEwZDFhYTIzZmJjMzVlNmJjNTg2ODZkNzUzMzVlMjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtOTgsNiArOTgs
MTEgQEAgY2xhc3MgV2ViVG91Y2hFdmVudDsKIAogY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMg
V2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENsaWVudCwgcHVibGljIFJl
ZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKKyAgICBlbnVtIEF1dG9ab29tVHlwZSB7
CisgICAgICAgIERvdWJsZVRhcCwKKyAgICAgICAgRmluZEluUGFnZSwKKyAgICB9OworCiAgICAg
Ly8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmly
dHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KQEAgLTQ2MSw2ICs0NjYsOSBA
QCBwdWJsaWM6CiAjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKICAgICB2b2lkIHJlc2V0
R2VzdHVyZVJlY29nbml6ZXIoKTsKICNlbmRpZgorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykK
KyAgICB2b2lkIGNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYg
aGl0UmVjdCwgQXV0b1pvb21UeXBlLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBzY3JvbGwpOwor
I2VuZGlmCiAKICAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpOwog
CkBAIC00OTIsNiArNTAwLDExIEBAIHByaXZhdGU6CiAgICAgICBEcmFnT3ZlcgogICAgIH07CiAK
KyAgICBlbnVtIEJvb3N0ZWRUZXh0VHlwZSB7CisgICAgICAgIE5vcm1hbFRleHQsCisgICAgICAg
IEJvb3N0ZWRUZXh0LAorICAgIH07CisKICAgICBXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50Kik7
CiAgICAgdmlydHVhbCB+V2ViVmlld0ltcGwoKTsKIApAQCAtNTMyLDYgKzU0NSwxNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICNlbmRpZgogCisjaWYg
RU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorCisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRpbmcgYm94
IG9mIHRoZSBibG9jayB0eXBlIG5vZGUgdG91Y2hlZCBieSB0aGUgaW5wdXQKKyAgICAvLyBwb2lu
dCB3aXRoIHRoZSBwYWRkaW5nLgorICAgIFdlYlJlY3QgY29tcHV0ZUJsb2NrQm91bmRzKGNvbnN0
IFdlYlJlY3QmLCBBdXRvWm9vbVR5cGUsIEJvb3N0ZWRUZXh0VHlwZSYpOworCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uOiBXaWRlbnMgdGhlIHdpZHRoIG9mIHxzb3VyY2V8IGJ5IHRoZSBzcGVjaWZp
ZWQgbWFyZ2lucworICAgIC8vIHdoaWxlIGtlZXBpbmcgaXQgc21hbGxlciB0aGFuIHBhZ2Ugd2lk
dGguCisgICAgV2ViUmVjdCB3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKGNvbnN0IFdlYlJlY3Qm
IHNvdXJjZSwgaW50IHRhcmdldE1hcmdpbiwgaW50IG1pbmltdW1NYXJnaW4pOworI2VuZGlmCisK
ICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQogICAgIHZvaWQgcG9pbnRlckxvY2tNb3VzZUV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCmluZGV4IGI1OTAwMTg2MGRhMmFiOWJiZjBhMmQ4MmIy
ODI2ZGM4MGJjZGFmMmEuLjdmOTY1MGJiNTNkYzg2ZTU3ZjI4Njk1ZjE4YjU5MDc5ZWIwYmRkMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKQEAg
LTE1MSw2ICsxNTEsNzggQEAgVEVTVF9GKFdlYkZyYW1lVGVzdCwgQ2hyb21lUGFnZU5vSmF2YXNj
cmlwdCkKICAgICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmc6Om5wb3MsIGNvbnRlbnQuZmluZCgiQ2xv
YmJlcmVkIikpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorVEVTVF9GKFdlYkZy
YW1lVGVzdCwgRGl2QXV0b1pvb21QYXJhbXNUZXN0KQoreworICAgIHJlZ2lzdGVyTW9ja2VkSHR0
cFVSTExvYWQoImdldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbCIpOwor
CisgICAgV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsID0gc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwq
PihGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9hZChtX2Jhc2VVUkwgKyAiZ2V0
X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sIiwgdHJ1ZSkpOworICAgIGlu
dCBwYWdlV2lkdGggPSA2NDA7CisgICAgaW50IHBhZ2VIZWlnaHQgPSA0ODA7CisgICAgaW50IGRp
dlBvc1ggPSAyMDA7CisgICAgaW50IGRpdlBvc1kgPSAyMDA7CisgICAgaW50IGRpdldpZHRoID0g
MjAwOworICAgIGludCBkaXZIZWlnaHQgPSAxNTA7CisgICAgV2ViUmVjdCBkb3VibGVUYXBQb2lu
dCgyNTAsIDI1MCwgMCwgMCk7CisgICAgd2ViVmlld0ltcGwtPnJlc2l6ZShXZWJTaXplKHBhZ2VX
aWR0aCwgcGFnZUhlaWdodCkpOworICAgIGZsb2F0IHNjYWxlOworICAgIFdlYlBvaW50IHNjcm9s
bDsKKworICAgIC8vIFRlc3QgZm9yIERvdWJsZXRhcCBzY2FsaW5nCisKKyAgICAvLyBUZXN0cyBm
b3Igem9vbWluZyBpbiBhbmQgb3V0IHdpdGhvdXQgY2xhbXBpbmcuCisgICAgLy8gU2V0IGRldmlj
ZSBzY2FsZSBhbmQgc2NhbGUgbGltaXRzIHNvIHdlIGRvbnQgZ2V0IGNsYW1wZWQuCisgICAgd2Vi
Vmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQ
YWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgNCAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKworICAgIC8vIFRlc3Qgem9vbWluZyBpbnRvIGRpdi4KKyAgICB3ZWJWaWV3SW1wbC0+
Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0lt
cGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgZmxvYXQgc2NhbGVkRGl2V2lkdGgg
PSBkaXZXaWR0aCAqIHNjYWxlOworICAgIGZsb2F0IHNjYWxlZERpdkhlaWdodCA9IGRpdkhlaWdo
dCAqIHNjYWxlOworICAgIGludCBoU2Nyb2xsID0gKChkaXZQb3NYICogc2NhbGUpIC0gKChwYWdl
V2lkdGggLSBzY2FsZWREaXZXaWR0aCkgLyAyKSkgLyBzY2FsZTsKKyAgICBpbnQgdlNjcm9sbCA9
ICgoZGl2UG9zWSAqIHNjYWxlKSAtICgocGFnZUhlaWdodCAtIHNjYWxlZERpdkhlaWdodCkgLyAy
KSkgLyBzY2FsZTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEocGFnZVdpZHRoIC8gKGRpdldpZHRoICsg
MTIuMCAvKiBtYXJnaW4gKi8pLCBzY2FsZSk7CisgICAgRVhQRUNUX0VRKGhTY3JvbGwsIHNjcm9s
bC54KTsKKyAgICBFWFBFQ1RfRVEodlNjcm9sbCwgc2Nyb2xsLnkpOworCisgICAgLy8gVGVzdCB6
b29tIG91dCB0byBvdmVydmlldyBzY2FsZS4KKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxB
bmRTY2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2Vi
Vmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNj
YWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0ltcGw6OkRvdWJs
ZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIHNjYWxlKTsKKyAg
ICBFWFBFQ1RfRVEoV2ViUG9pbnQoMCwgMCksIHNjcm9sbCk7CisKKyAgICAvLyBUZXN0cyBmb3Ig
Y2xhbXBlZCBzY2FsaW5nLgorICAgIC8vIFRlc3QgY2xhbXAgdG8gZGV2aWNlIHNjYWxlOgorICAg
IHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xs
LngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOwor
ICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3RvcigyLjUpOworICAgIHdlYlZpZXdJ
bXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJW
aWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
Mi41LCBzY2FsZSk7CisKKyAgICAvLyBUZXN0IGNsYW1wIHRvIG1pbmltdW0gc2NhbGU6CisgICAg
d2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwu
eCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cygxLjUgLyB3ZWJWaWV3SW1w
bC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgNCAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChk
b3VibGVUYXBQb2ludCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDEuNSwgc2NhbGUpOworICAgIEVYUEVDVF9FUShXZWJQb2ludCgw
LCAwKSwgc2Nyb2xsKTsKKworICAgIC8vIFRlc3QgY2xhbXAgdG8gbWF4aW11bSBzY2FsZToKKyAg
ICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9s
bC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsK
KyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoNCk7CisgICAgd2ViVmlld0lt
cGwtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cygwLCAzIC8gd2ViVmlld0ltcGwtPmRldmljZVNj
YWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JI
aXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Ny
b2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgc2NhbGUpOworCisKKyAgICAvLyBUZXN0IGZv
ciBOb24tZG91YmxldGFwIHNjYWxpbmcKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFj
dG9yKDEsIFdlYlBvaW50KDAsIDApKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVG
YWN0b3IoNCk7CisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cygwLCA0
IC8gd2ViVmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIC8vIFRlc3Qgem9vbWlu
ZyBpbnRvIGRpdi4KKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0
UmVjdChXZWJSZWN0KDI1MCwgMjUwLCAxMCwgMTApLCBXZWJWaWV3SW1wbDo6RmluZEluUGFnZSwg
c2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHBhZ2VXaWR0aCAvIChkaXZXaWR0
aCArIDEyLjAgLyogbWFyZ2luICovKSwgc2NhbGUpOworfQorI2VuZGlmCisKIGNsYXNzIFRlc3RS
ZWxvYWREb2VzbnRSZWRpcmVjdFdlYkZyYW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYk5hdmlnYXRpb25Qb2xpY3kgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19k
aXZfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllN2MwNzBjYzAzZTU0NWZiYmNiZTA3ZWUxNWZlZjg0
Yjc2MjBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sCkBAIC0wLDAg
KzEsMTAgQEAKKzxodG1sPgorICA8Ym9keT4KKyAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNv
bG9yOiBncmVlbjsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwcHg7IHRvcDogMHB4OyB3aWR0
aDogNjQwcHg7IGhlaWdodDogNDgwcHgiPgorICAgICAgPHA+VG9wIERpdjwvcD4KKyAgICAgIDxk
aXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxl
ZnQ6IDIwMHB4OyB0b3A6IDIwMHB4OyB3aWR0aDogMjAwcHg7IGhlaWdodDogMTUwcHgiPgorICAg
ICAgICA8cD5EaXYgdG8gem9vbSB0bzwvcD4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125707</attachid>
            <date>2012-02-06 14:20:53 -0800</date>
            <delta_ts>2012-02-06 16:51:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120206172052.patch</filename>
            <type>text/plain</type>
            <size>21234</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RkMWZiN2UzMmE4YzVi
N2UyYzk5OGEzNDNjZWE1ZDY4NWM3ZGZjNS4uN2JhNDFiOTQ4OTc1YWQ3NjkyMDA0YmIyYzgyMzdi
NzI4MmJlODU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTA2ICBWYXJ1
biBKYWluICA8dmFydW5qYWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQg
bWV0aG9kIHRvIFdlYlZpZXdJbXBsIHRvIGV4dHJhY3Qgem9vbS9zY3JvbGwgcGFyYW1zIGZvciBn
ZXN0dXJlIGV2ZW50cyBvbiB0b3VjaCBkZXZpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3RzIC0tZ3Rlc3RfZmls
dGVyPVdlYkZyYW1lVGVzdC5EaXZBdXRvWm9vbVBhcmFtc1Rlc3QKKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVFdmVudDo6UGxhdGZvcm1HZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1HZXN0dXJlRXZlbnQ6OnNjYWxlKToKKyAgICAgICAgKFBsYXRmb3JtR2VzdHVyZUV2ZW50
KToKKwogMjAxMi0wMi0wNiAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSB1bnVzZWQgZGlzYWJsZWRDb21wdXRl
ZFByb3BlcnRpZXMgZnJvbSBtZXRob2RzIGluIFN0eWxlc1NpZGViYXJQYW5lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDRmYmFmZmRkY2ZkZTEyZTJiZDgwNTBmNGI3ZTZjYzg0MDJkMDBm
ZjcuLmRjNDJmZDU2NDI5ZjlhZTczOGYxZGVmY2IxMmI2NDExYjkyNmZhZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDItMDYgIFZhcnVuIEphaW4g
IDx2YXJ1bmphaW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2Qg
dG8gV2ViVmlld0ltcGwgdG8gZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUg
ZXZlbnRzIG9uIHRvdWNoIGRldmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyOTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Omdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp0b3VjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpc3BhdGNoR2VzdHVyZUV2ZW50KToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Vmlld0ltcGwpOgorICAgICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL2RhdGEv
Z2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wMi0wNCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIEFkZCBzdXBwb3J0IHRvIGZvcmNlIGZ1bGwgZGFtYWdlIGluIENDRGFtYWdl
VHJhY2tlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0
dXJlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50
LmgKaW5kZXggZWQ1NTdjMTc4NThkNTVhZDIzMmI5Yjc2MjM0NDFlMDFhNGFmZmVlMi4uZTJkNjRk
ODQyZDE5NTc0MjM0YmU4MDg5ZDQ2ZWQzNDExNThjYTk5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVFdmVudC5oCkBAIC00NCwxMiArNDQsMTMgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAKLSAgICBQbGF0Zm9ybUdlc3R1cmVFdmVudChUeXBlIHR5cGUs
IGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9u
LCBkb3VibGUgdGltZXN0YW1wLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgYm9vbCBzaGlm
dEtleSwgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5KQorICAgIFBsYXRm
b3JtR2VzdHVyZUV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGRvdWJsZSB0aW1lc3RhbXAsIGZsb2F0IGRlbHRh
WCwgZmxvYXQgZGVsdGFZLCBib29sIHNoaWZ0S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5
LCBib29sIG1ldGFLZXksIGZsb2F0IHNjYWxlID0gMCkKICAgICAgICAgOiBQbGF0Zm9ybUV2ZW50
KHR5cGUsIHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIG1ldGFLZXksIHRpbWVzdGFtcCkKICAg
ICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogICAgICAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
Z2xvYmFsUG9zaXRpb24pCiAgICAgICAgICwgbV9kZWx0YVgoZGVsdGFYKQogICAgICAgICAsIG1f
ZGVsdGFZKGRlbHRhWSkKKyAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQogICAgIHsKICAgICB9CiAK
QEAgLTcwLDEzICs3MSwxNSBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBkZWx0YVgoKSBjb25zdCB7
IHJldHVybiBtX2RlbHRhWDsgfQogICAgIGZsb2F0IGRlbHRhWSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVsdGFZOyB9Ci0gICAgCisgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxl
OyB9CisKIHByb3RlY3RlZDoKICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEludFBvaW50
IG1fZ2xvYmFsUG9zaXRpb247CiAgICAgSW50U2l6ZSBtX2FyZWE7CiAgICAgZmxvYXQgbV9kZWx0
YVg7CiAgICAgZmxvYXQgbV9kZWx0YVk7CisgICAgZmxvYXQgbV9zY2FsZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAppbmRleCA4NGRlNzcyOWNjZTVhZDkzNmI1MDY2ZDc0MWQ3MWZmY2VlNTEwODg2Li5lMGJk
YzBjYTdjYjg1MmFhNjVmMzhjMTRjNjJjNDA2ZmUwOTcxMjI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xOTMsNiArMTkzLDE0IEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpCiAg
ICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGNv
bnRyb2wgcGFyYW1ldGVycyBmb3IgYXV0b21hdGVkIHNjYWxpbmcgb2Ygd2VicGFnZXMKKy8vIChz
dWNoIGFzIGR1ZSB0byBhIGRvdWJsZSB0YXAgZ2VzdHVyZSBvciBmaW5kIGluIHBhZ2UgZXRjLiku
IFRoZXNlIGFyZQorLy8gZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KK3N0YXRpYyBjb25zdCBp
bnQga1RvdWNoUG9pbnRQYWRkaW5nID0gMzI7CitzdGF0aWMgY29uc3QgZmxvYXQga01pblNjYWxl
RGlmZmVyZW5jZSA9IDAuMDE7CitzdGF0aWMgY29uc3QgZmxvYXQga0RvdWJsZVRhcFpvb21Db250
ZW50RGVmYXVsdE1hcmdpbiA9IDU7CitzdGF0aWMgY29uc3QgZmxvYXQga0RvdWJsZVRhcFpvb21D
b250ZW50TWluaW11bU1hcmdpbiA9IDI7CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTYyMSwxNCArNjI5LDE3IEBAIGJvb2wgV2ViVmlld0ltcGw6
Om1vdXNlV2hlZWwoY29uc3QgV2ViTW91c2VXaGVlbEV2ZW50JiBldmVudCkKIGJvb2wgV2ViVmll
d0ltcGw6Omdlc3R1cmVFdmVudChjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGV2ZW50KQogewogICAg
IFBsYXRmb3JtR2VzdHVyZUV2ZW50QnVpbGRlciBwbGF0Zm9ybUV2ZW50KG1haW5GcmFtZUltcGwo
KS0+ZnJhbWVWaWV3KCksIGV2ZW50KTsKLSAgICBib29sIGhhbmRsZWQgPSBtYWluRnJhbWVJbXBs
KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0dXJlRXZlbnQocGxhdGZvcm1F
dmVudCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCk7Ci0g
ICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbCogcGx1Z2luQ29udGFpbmVyID0gV2ViRnJhbWVJbXBs
OjpwbHVnaW5Db250YWluZXJGcm9tRnJhbWUoZnJhbWUpOwotICAgIGlmIChwbHVnaW5Db250YWlu
ZXIpCi0gICAgICAgIGhhbmRsZWQgfD0gcGx1Z2luQ29udGFpbmVyLT5oYW5kbGVHZXN0dXJlRXZl
bnQocGxhdGZvcm1FdmVudCk7CisgICAgaWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6
R2VzdHVyZURvdWJsZVRhcCkgeworICAgICAgICBmbG9hdCBzY2FsZSA9IDE7CisgICAgICAgIFdl
YlBvaW50IHNjcm9sbDsKKyAgICAgICAgV2ViUmVjdCBoaXRSZWN0KHBsYXRmb3JtRXZlbnQucG9z
aXRpb24oKS54KCksIHBsYXRmb3JtRXZlbnQucG9zaXRpb24oKS55KCksIDAsIDApOworICAgICAg
ICBjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGhpdFJlY3QsIERvdWJsZVRhcCwgc2Nh
bGUsIHNjcm9sbCk7CisgICAgICAgIFBsYXRmb3JtR2VzdHVyZUV2ZW50IG5ld1BnZShwbGF0Zm9y
bUV2ZW50LnR5cGUoKSwgcGxhdGZvcm1FdmVudC5wb3NpdGlvbigpLCBwbGF0Zm9ybUV2ZW50Lmds
b2JhbFBvc2l0aW9uKCksIHBsYXRmb3JtRXZlbnQudGltZXN0YW1wKCksCisgICAgICAgICAgICAg
ICAgc2Nyb2xsLngsIHNjcm9sbC55LCBwbGF0Zm9ybUV2ZW50LnNoaWZ0S2V5KCksIHBsYXRmb3Jt
RXZlbnQuY3RybEtleSgpLCBwbGF0Zm9ybUV2ZW50LmFsdEtleSgpLCBwbGF0Zm9ybUV2ZW50Lm1l
dGFLZXkoKSwgc2NhbGUpOworICAgICAgICByZXR1cm4gZGlzcGF0Y2hHZXN0dXJlRXZlbnQobmV3
UGdlKTsKKyAgICB9CiAKLSAgICByZXR1cm4gaGFuZGxlZDsKKyAgICByZXR1cm4gZGlzcGF0Y2hH
ZXN0dXJlRXZlbnQocGxhdGZvcm1FdmVudCk7CiB9CiAjZW5kaWYKIApAQCAtODAyLDggKzgxMyw4
IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYgZXZl
bnQpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50QnVpbGRlcik7CiAK
ICNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQotICAgIE93blB0cjxWZWN0b3I8V2ViQ29y
ZTo6UGxhdGZvcm1HZXN0dXJlRXZlbnQ+ID4gZ2VzdHVyZUV2ZW50cyhtX2dlc3R1cmVSZWNvZ25p
emVyLT5wcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmVzKHRvdWNoRXZlbnRCdWlsZGVyLCBkZWZh
dWx0UHJldmVudGVkKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgIGkgPSAwOyBpIDwgZ2VzdHVy
ZUV2ZW50cy0+c2l6ZSgpOyBpKyspCisgICAgT3duUHRyPFZlY3RvcjxQbGF0Zm9ybUdlc3R1cmVF
dmVudD4gPiBnZXN0dXJlRXZlbnRzKG1fZ2VzdHVyZVJlY29nbml6ZXItPnByb2Nlc3NUb3VjaEV2
ZW50Rm9yR2VzdHVyZXModG91Y2hFdmVudEJ1aWxkZXIsIGRlZmF1bHRQcmV2ZW50ZWQpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdlc3R1cmVFdmVudHMtPnNpemUoKTsgaSsrKQogICAg
ICAgICBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVHZXN0
dXJlRXZlbnQoZ2VzdHVyZUV2ZW50cy0+YXQoaSkpOwogI2VuZGlmCiAKQEAgLTgxMSw2ICs4MjIs
MTg4IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYg
ZXZlbnQpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK1dlYlJlY3Qg
V2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyhjb25zdCBXZWJSZWN0JiByZWN0LCBBdXRv
Wm9vbVR5cGUgem9vbVR5cGUsIEJvb3N0ZWRUZXh0VHlwZSYgdGV4dFR5cGUpCit7CisgICAgdGV4
dFR5cGUgPSBCb29zdGVkVGV4dDsKKyAgICBpZiAoIW1haW5GcmFtZUltcGwoKSkKKyAgICAgICAg
cmV0dXJuIFdlYlJlY3QoKTsKKworICAgIC8vIFVzZSB0aGUgcmVjdC1iYXNlZCBoaXQgdGVzdCB0
byBmaW5kIHRoZSBub2RlLgorICAgIEludFBvaW50IHBvaW50ID0gbWFpbkZyYW1lSW1wbCgpLT5m
cmFtZVZpZXcoKS0+d2luZG93VG9Db250ZW50cyhJbnRQb2ludChyZWN0LngsIHJlY3QueSkpOwor
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVu
dEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsCisgICAgICAgICAgICBmYWxz
ZSwgem9vbVR5cGUgPT0gRmluZEluUGFnZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBIaXRUZXN0
UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LAorICAgICAgICAgICAg
SW50U2l6ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCkpOworCisgICAgLy8gRmluZCB0aGUgbW9z
dCBib29zdGVkIHRleHQgbm9kZSBpbnRlcnNlY3RlZCBieSB0aGUgaGl0IHRlc3QgKGlmIGFueSku
CisgICAgTm9kZSogbm9kZSA9IDA7CisgICAgZmxvYXQgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9
IDA7CisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4mIGxpc3QgPSByZXN1bHQu
cmVjdEJhc2VkVGVzdFJlc3VsdCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+
ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsaXN0LmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIE5vZGUqIGN1cnJlbnQgPSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChj
dXJyZW50LT5pc1RleHROb2RlKCkgJiYgY3VycmVudC0+cmVuZGVyZXIoKSkgeworICAgICAgICAg
ICAgZmxvYXQgYm9vc3RpbmdGYWN0b3IgPSBjdXJyZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSAvCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNp
emUoKTsKKyAgICAgICAgICAgIGlmIChib29zdGluZ0ZhY3RvciA+IGdyZWF0ZXN0Qm9vc3RpbmdG
YWN0b3IpIHsKKyAgICAgICAgICAgICAgICBub2RlID0gY3VycmVudDsKKyAgICAgICAgICAgICAg
ICB0ZXh0VHlwZSA9IChib29zdGluZ0ZhY3RvciA8PSAxKSA/IE5vcm1hbFRleHQgOiBCb29zdGVk
VGV4dDsKKyAgICAgICAgICAgICAgICBncmVhdGVzdEJvb3N0aW5nRmFjdG9yID0gYm9vc3RpbmdG
YWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIG5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBGaW5kIHRoZSBibG9j
ayB0eXBlIG5vZGUgYmFzZWQgb24gdGhlIGhpdCBub2RlLgorICAgIHdoaWxlIChub2RlICYmICgh
bm9kZS0+cmVuZGVyZXIoKSB8fCBub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKKyAgICAg
ICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKworICAgIC8vIFJldHVybiB0aGUgYm91bmRp
bmcgYm94IGluIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgaWYgKG5vZGUpIHsK
KyAgICAgICAgSW50UmVjdCByZWN0ID0gbm9kZS0+Tm9kZTo6Z2V0UmVjdCgpOworICAgICAgICBG
cmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICByZXR1cm4g
ZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICB9CisgICAgcmV0dXJu
IFdlYlJlY3QoKTsKK30KKworV2ViUmVjdCBXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFn
ZUJvdW5kcyhjb25zdCBXZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBtaW5p
bXVtTWFyZ2luKQoreworICAgIFdlYlNpemUgbWF4U2l6ZTsKKyAgICBpZiAobWFpbkZyYW1lKCkp
CisgICAgICAgIG1heFNpemUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCk7CisgICAgSW50
U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAgICBzY3JvbGxP
ZmZzZXQgPSBtYWluRnJhbWUoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaW50IGxlZnRNYXJnaW4g
PSB0YXJnZXRNYXJnaW47CisgICAgaW50IHJpZ2h0TWFyZ2luID0gdGFyZ2V0TWFyZ2luOworCisg
ICAgY29uc3QgaW50IGFic29sdXRlU291cmNlWCA9IHNvdXJjZS54ICsgc2Nyb2xsT2Zmc2V0Lndp
ZHRoKCk7CisgICAgaWYgKGxlZnRNYXJnaW4gPiBhYnNvbHV0ZVNvdXJjZVgpIHsKKyAgICAgICAg
bGVmdE1hcmdpbiA9IGFic29sdXRlU291cmNlWDsKKyAgICAgICAgcmlnaHRNYXJnaW4gPSBtYXgo
bGVmdE1hcmdpbiwgbWluaW11bU1hcmdpbik7CisgICAgfQorCisgICAgY29uc3QgaW50IG1heGlt
dW1SaWdodE1hcmdpbiA9IG1heFNpemUud2lkdGggLSAoc291cmNlLndpZHRoICsgYWJzb2x1dGVT
b3VyY2VYKTsKKyAgICBpZiAocmlnaHRNYXJnaW4gPiBtYXhpbXVtUmlnaHRNYXJnaW4pIHsKKyAg
ICAgICAgcmlnaHRNYXJnaW4gPSBtYXhpbXVtUmlnaHRNYXJnaW47CisgICAgICAgIGxlZnRNYXJn
aW4gPSBtaW4obGVmdE1hcmdpbiwgbWF4KHJpZ2h0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKSk7Cisg
ICAgfQorCisgICAgY29uc3QgaW50IG5ld1dpZHRoID0gc291cmNlLndpZHRoICsgbGVmdE1hcmdp
biArIHJpZ2h0TWFyZ2luOworICAgIGNvbnN0IGludCBuZXdYID0gc291cmNlLnggLSBsZWZ0TWFy
Z2luOworCisgICAgQVNTRVJUKG5ld1dpZHRoID49IDApOworICAgIEFTU0VSVChzY3JvbGxPZmZz
ZXQud2lkdGgoKSArIG5ld1ggKyBuZXdXaWR0aCA8PSBtYXhTaXplLndpZHRoKTsKKworICAgIHJl
dHVybiBXZWJSZWN0KG5ld1gsIHNvdXJjZS55LCBuZXdXaWR0aCwgc291cmNlLmhlaWdodCk7Cit9
CisKK3ZvaWQgV2ViVmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29u
c3QgV2ViUmVjdCYgaGl0UmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBmbG9hdCYgc2NhbGUs
IFdlYlBvaW50JiBzY3JvbGwpCit7CisgICAgc2NhbGUgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAg
ICBzY3JvbGwueCA9IHNjcm9sbC55ID0gMDsKKyAgICBXZWJSZWN0IHRhcmdldFJlY3QgPSBoaXRS
ZWN0OworICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0UmVjdC53
aWR0aCA9IHRhcmdldFJlY3QuaGVpZ2h0ID0ga1RvdWNoUG9pbnRQYWRkaW5nOworCisgICAgQm9v
c3RlZFRleHRUeXBlIHRleHRUeXBlID0gQm9vc3RlZFRleHQ7CisKKyAgICBXZWJSZWN0IHJlY3Qg
PSBjb21wdXRlQmxvY2tCb3VuZHModGFyZ2V0UmVjdCwgem9vbVR5cGUsIHRleHRUeXBlKTsKKwor
ICAgIGNvbnN0IGZsb2F0IG92ZXJ2aWV3U2NhbGUgPSBtX21pbmltdW1QYWdlU2NhbGVGYWN0b3I7
CisgICAgYm9vbCBzY2FsZVVuY2hhbmdlZCA9IHRydWU7CisgICAgaWYgKCFyZWN0LmlzRW1wdHko
KSkgeworICAgICAgICAvLyBQYWdlcyBzaG91bGQgYmUgYXMgbGVnaWJsZSBhcyBvbiBkZXNrdG9w
IHdoZW4gYXQgZHBpIHNjYWxlLCBzbyBubworICAgICAgICAvLyBuZWVkIHRvIHpvb20gaW4gZnVy
dGhlciB3aGVuIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5pbmcgem9vbSBsZXZlbAorICAgICAgICAv
LyAoYWZ0ZXIgZG91YmxlIHRhcCwgZmluZCBpbiBwYWdlLCBldGMpLCB0aG91Z2ggdGhlIHVzZXIg
c2hvdWxkIHN0aWxsCisgICAgICAgIC8vIGJlIGFsbG93ZWQgdG8gbWFudWFsbHkgcGluY2ggem9v
bSBpbiBmdXJ0aGVyIGlmIHRoZXkgZGVzaXJlLgorICAgICAgICAvLyBGSVhNRTogSW5jbHVkZSBm
b250IHNjYWxlIGZhY3RvciBvbmNlIGl0cyBhZGRlZCB0byBzZXR0aW5ncy4KKyAgICAgICAgY29u
c3QgZmxvYXQgbWF4U2NhbGUgPSBkZXZpY2VTY2FsZUZhY3RvcigpICogMSAvKiBmb250IHNjYWxl
IGZhY3RvciAqLzsKKworICAgICAgICBjb25zdCBmbG9hdCBkZWZhdWx0TWFyZ2luID0ga0RvdWJs
ZVRhcFpvb21Db250ZW50RGVmYXVsdE1hcmdpbiAqIGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAg
ICAgIGNvbnN0IGZsb2F0IG1pbmltdW1NYXJnaW4gPSBrRG91YmxlVGFwWm9vbUNvbnRlbnRNaW5p
bXVtTWFyZ2luICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUg
bWFyZ2lucyB0byBoYXZlIHRoZSBzYW1lIHBoeXNpY2FsIHNpemUsIHdoaWNoIG1lYW5zIHdlCisg
ICAgICAgIC8vIG5lZWQgdG8gZXhwcmVzcyB0aGVtIGluIHBvc3Qtc2NhbGUgc2l6ZS4gVG8gZG8g
dGhhdCB3ZSdkIG5lZWQgdG8ga25vdworICAgICAgICAvLyB0aGUgc2NhbGUgd2UncmUgc2NhbGlu
ZyB0bywgYnV0IHRoYXQgZGVwZW5kcyBvbiB0aGUgbWFyZ2lucy4gSW5zdGVhZAorICAgICAgICAv
LyB3ZSBleHByZXNzIHRoZW0gYXMgYSBmcmFjdGlvbiBvZiB0aGUgdGFyZ2V0IHJlY3RhbmdsZTog
dGhpcyB3aWxsIGJlCisgICAgICAgIC8vIGNvcnJlY3QgaWYgd2UgZW5kIHVwIGZ1bGx5IHpvb21p
bmcgdG8gaXQsIGFuZCB3b24ndCBtYXR0ZXIgaWYgd2UKKyAgICAgICAgLy8gZG9uJ3QuCisgICAg
ICAgIHJlY3QgPSB3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKHJlY3QsCisgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihkZWZhdWx0TWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6ZS53
aWR0aCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaW5pbXVtTWFyZ2luICog
cmVjdC53aWR0aCAvIG1fc2l6ZS53aWR0aCkpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0byBz
Y3JlZW4sIHJlc3BlY3RpbmcgbGltaXRzLgorICAgICAgICBpZiAodGV4dFR5cGUgPT0gTm9ybWFs
VGV4dCkKKyAgICAgICAgICAgIHNjYWxlID0gbWF4U2NhbGU7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgc2NhbGUgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS53aWR0aCkgLyByZWN0
LndpZHRoOworICAgICAgICAgICAgc2NhbGUgPSBtaW4oc2NhbGUsIG1heFNjYWxlKTsKKyAgICAg
ICAgfQorICAgICAgICBzY2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMoc2NhbGUp
OworCisgICAgICAgIHNjYWxlVW5jaGFuZ2VkID0gZmFicyhwYWdlU2NhbGVGYWN0b3IoKSAtIHNj
YWxlKSA8IGtNaW5TY2FsZURpZmZlcmVuY2U7CisgICAgfQorCisgICAgaWYgKHpvb21UeXBlID09
IERvdWJsZVRhcCkgeworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgc2NhbGVVbmNoYW5n
ZWQpIHsKKyAgICAgICAgICAgIC8vIFpvb20gb3V0IHRvIG92ZXJ2aWV3IG1vZGUuCisgICAgICAg
ICAgICBpZiAob3ZlcnZpZXdTY2FsZSkKKyAgICAgICAgICAgICAgICBzY2FsZSA9IG92ZXJ2aWV3
U2NhbGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJl
Y3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEtlZXAgY3VycmVudCBzY2FsZSAobm8gbmVlZCB0
byBzY3JvbGwgYXMgeCx5IHdpbGwgbm9ybWFsbHkgYWxyZWFkeQorICAgICAgICAvLyBiZSB2aXNp
YmxlKS4gRklYTUU6IFJldmlzaXQgdGhpcyBpZiBpdCBpc24ndCBhbHdheXMgdHJ1ZS4KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGJlaW5nIGNhbGxl
ZCBmb3IgYXV0byB6b29tIGR1cmluZyBmaW5kIGluIHBhZ2UsCisgICAgLy8gdGhlbiBpZiB0aGUg
dXNlciBtYW51YWxseSB6b29tcyBpbiBpdCdkIGJlIG5pY2UgdG8gcHJlc2VydmUgdGhlIHJlbGF0
aXZlCisgICAgLy8gaW5jcmVhc2UgaW4gem9vbSB0aGV5IGNhdXNlZCAoaWYgdGhleSB6b29tIG91
dCB0aGVuIGl0J3Mgb2sgdG8gem9vbQorICAgIC8vIHRoZW0gYmFjayBpbiBhZ2FpbikuIFRoaXMg
aXNuJ3QgY29tcGF0aWJsZSB3aXRoIG91ciBjdXJyZW50IGRvdWJsZS10YXAKKyAgICAvLyB6b29t
IHN0cmF0ZWd5IChmaXR0aW5nIHRoZSBjb250YWluaW5nIGJsb2NrIHRvIHRoZSBzY3JlZW4pIHRo
b3VnaC4KKworICAgIGZsb2F0IHNjcmVlbkhlaWdodCA9IG1fc2l6ZS5oZWlnaHQgLyBzY2FsZSAq
IHBhZ2VTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IHNjcmVlbldpZHRoID0gbV9zaXplLndpZHRo
IC8gc2NhbGUgKiBwYWdlU2NhbGVGYWN0b3IoKTsKKworICAgIC8vIFNjcm9sbCB0byB2ZXJ0aWNh
bGx5IGFsaWduIHRoZSBibG9jay4KKyAgICBpZiAocmVjdC5oZWlnaHQgPCBzY3JlZW5IZWlnaHQp
IHsKKyAgICAgICAgLy8gVmVydGljYWxseSBjZW50ZXIgc2hvcnQgYmxvY2tzLgorICAgICAgICBy
ZWN0LnkgLT0gMC41ICogKHNjcmVlbkhlaWdodCAtIHJlY3QuaGVpZ2h0KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBFbnN1cmUgcG9zaXRpb24gd2UncmUgem9vbWluZyB0byAoKyBwYWRkaW5n
KSBpc24ndCBvZmYgdGhlIGJvdHRvbSBvZgorICAgICAgICAvLyB0aGUgc2NyZWVuLgorICAgICAg
ICByZWN0LnkgPSBtYXgoKGZsb2F0KSByZWN0LnksIGhpdFJlY3QueSArIGtUb3VjaFBvaW50UGFk
ZGluZyAtIHNjcmVlbkhlaWdodCk7CisgICAgfSAvLyBPdGhlcndpc2UgdG9wIGFsaWduIHRoZSBi
bG9jay4KKworICAgIC8vIERvIHRoZSBzYW1lIHRoaW5nIGZvciBob3Jpem9udGFsIGFsaWdubWVu
dC4KKyAgICBpZiAocmVjdC53aWR0aCA8IHNjcmVlbldpZHRoKQorICAgICAgICByZWN0LnggLT0g
MC41ICogKHNjcmVlbldpZHRoIC0gcmVjdC53aWR0aCk7CisgICAgZWxzZQorICAgICAgICByZWN0
LnggPSBtYXgoKGZsb2F0KSByZWN0LngsIGhpdFJlY3QueCArIGtUb3VjaFBvaW50UGFkZGluZyAt
IHNjcmVlbldpZHRoKTsKKworICAgIHNjcm9sbC54ID0gcmVjdC54OworICAgIHNjcm9sbC55ID0g
cmVjdC55OworfQorCitib29sIFdlYlZpZXdJbXBsOjpkaXNwYXRjaEdlc3R1cmVFdmVudChQbGF0
Zm9ybUdlc3R1cmVFdmVudCYgcGdlKQoreworICAgIGJvb2wgaGFuZGxlZCA9IG1haW5GcmFtZUlt
cGwoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChwZ2UpOwor
CisgICAgRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpOworICAgIFdlYlBs
dWdpbkNvbnRhaW5lckltcGwqIHBsdWdpbkNvbnRhaW5lciA9IFdlYkZyYW1lSW1wbDo6cGx1Z2lu
Q29udGFpbmVyRnJvbUZyYW1lKGZyYW1lKTsKKyAgICBpZiAocGx1Z2luQ29udGFpbmVyKQorICAg
ICAgICBoYW5kbGVkIHw9IHBsdWdpbkNvbnRhaW5lci0+aGFuZGxlR2VzdHVyZUV2ZW50KHBnZSk7
CisKKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlZpZXdJbXBsOjpu
dW1iZXJPZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQgbnVtYmVyT2ZXaGVlbEhh
bmRsZXJzKQogewogICAgIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyA9IG51bWJlck9mV2hlZWxI
YW5kbGVycyA+IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRl
eCBhMDM5YTA5Y2ViODdjMjBlM2RhODQzMzMxZjFiZWFhZWQzZjRmMTMxLi4xZTIxMGVlMzNhNjc0
MWUyMjI1ODExZDc2MDExYjUzN2RkN2ZmZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKQEAgLTcxLDYgKzcxLDkgQEAgY2xhc3MgV2lkZ2V0OwogI2lmIEVOQUJM
RShHRVNUVVJFX1JFQ09HTklaRVIpCiBjbGFzcyBQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOwog
I2VuZGlmCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgUGxhdGZvcm1HZXN0dXJl
RXZlbnQ7CisjZW5kaWYKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC05OCw2ICsxMDEsMTEg
QEAgY2xhc3MgV2ViVG91Y2hFdmVudDsKIAogY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2Vi
VmlldywgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENsaWVudCwgcHVibGljIFJlZkNv
dW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKKyAgICBlbnVtIEF1dG9ab29tVHlwZSB7Cisg
ICAgICAgIERvdWJsZVRhcCwKKyAgICAgICAgRmluZEluUGFnZSwKKyAgICB9OworCiAgICAgLy8g
V2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVh
bCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KQEAgLTQ2MSw2ICs0NjksOSBAQCBw
dWJsaWM6CiAjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKICAgICB2b2lkIHJlc2V0R2Vz
dHVyZVJlY29nbml6ZXIoKTsKICNlbmRpZgorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAg
ICB2b2lkIGNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0
UmVjdCwgQXV0b1pvb21UeXBlLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBzY3JvbGwpOworI2Vu
ZGlmCiAKICAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpOwogCkBA
IC00OTIsNiArNTAzLDExIEBAIHByaXZhdGU6CiAgICAgICBEcmFnT3ZlcgogICAgIH07CiAKKyAg
ICBlbnVtIEJvb3N0ZWRUZXh0VHlwZSB7CisgICAgICAgIE5vcm1hbFRleHQsCisgICAgICAgIEJv
b3N0ZWRUZXh0LAorICAgIH07CisKICAgICBXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50Kik7CiAg
ICAgdmlydHVhbCB+V2ViVmlld0ltcGwoKTsKIApAQCAtNTMyLDYgKzU0OCwyMSBAQCBwcml2YXRl
OgogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICNlbmRpZgogCisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQorCisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9m
IHRoZSBibG9jayB0eXBlIG5vZGUgdG91Y2hlZCBieSB0aGUgaW5wdXQKKyAgICAvLyBwb2ludCB3
aXRoIHRoZSBwYWRkaW5nLgorICAgIFdlYlJlY3QgY29tcHV0ZUJsb2NrQm91bmRzKGNvbnN0IFdl
YlJlY3QmLCBBdXRvWm9vbVR5cGUsIEJvb3N0ZWRUZXh0VHlwZSYpOworCisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uOiBXaWRlbnMgdGhlIHdpZHRoIG9mIHxzb3VyY2V8IGJ5IHRoZSBzcGVjaWZpZWQg
bWFyZ2lucworICAgIC8vIHdoaWxlIGtlZXBpbmcgaXQgc21hbGxlciB0aGFuIHBhZ2Ugd2lkdGgu
CisgICAgV2ViUmVjdCB3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKGNvbnN0IFdlYlJlY3QmIHNv
dXJjZSwgaW50IHRhcmdldE1hcmdpbiwgaW50IG1pbmltdW1NYXJnaW4pOworCisgICAgLy8gSGVs
cGVyIG1ldGhvZDogZGlzcGF0Y2hlcyBhIGdlc3R1cmUgZXZlbnQgdG8gdGhlIGV2ZW50IGhhbmRs
ZXIgYW5kCisgICAgLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KKyAg
ICBib29sIGRpc3BhdGNoR2VzdHVyZUV2ZW50KFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUV2ZW50
Jik7CisjZW5kaWYKKwogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgdm9pZCBwb2ludGVy
TG9ja01vdXNlRXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKaW5kZXggYjU5MDAxODYwZGEy
YWI5YmJmMGEyZDgyYjI4MjZkYzgwYmNkYWYyYS4uN2Y5NjUwYmI1M2RjODZlNTdmMjg2OTVmMThi
NTkwNzllYjBiZGQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9X
ZWJGcmFtZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJh
bWVUZXN0LmNwcApAQCAtMTUxLDYgKzE1MSw3OCBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBDaHJv
bWVQYWdlTm9KYXZhc2NyaXB0KQogICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZzo6bnBvcywgY29u
dGVudC5maW5kKCJDbG9iYmVyZWQiKSk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMp
CitURVNUX0YoV2ViRnJhbWVUZXN0LCBEaXZBdXRvWm9vbVBhcmFtc1Rlc3QpCit7CisgICAgcmVn
aXN0ZXJNb2NrZWRIdHRwVVJMTG9hZCgiZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZf
dGVzdC5odG1sIik7CisKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwgPSBzdGF0aWNfY2Fz
dDxXZWJWaWV3SW1wbCo+KEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKG1f
YmFzZVVSTCArICJnZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiLCB0
cnVlKSk7CisgICAgaW50IHBhZ2VXaWR0aCA9IDY0MDsKKyAgICBpbnQgcGFnZUhlaWdodCA9IDQ4
MDsKKyAgICBpbnQgZGl2UG9zWCA9IDIwMDsKKyAgICBpbnQgZGl2UG9zWSA9IDIwMDsKKyAgICBp
bnQgZGl2V2lkdGggPSAyMDA7CisgICAgaW50IGRpdkhlaWdodCA9IDE1MDsKKyAgICBXZWJSZWN0
IGRvdWJsZVRhcFBvaW50KDI1MCwgMjUwLCAwLCAwKTsKKyAgICB3ZWJWaWV3SW1wbC0+cmVzaXpl
KFdlYlNpemUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgZmxvYXQgc2NhbGU7CisgICAg
V2ViUG9pbnQgc2Nyb2xsOworCisgICAgLy8gVGVzdCBmb3IgRG91YmxldGFwIHNjYWxpbmcKKwor
ICAgIC8vIFRlc3RzIGZvciB6b29taW5nIGluIGFuZCBvdXQgd2l0aG91dCBjbGFtcGluZy4KKyAg
ICAvLyBTZXQgZGV2aWNlIHNjYWxlIGFuZCBzY2FsZSBsaW1pdHMgc28gd2UgZG9udCBnZXQgY2xh
bXBlZC4KKyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoNCk7CisgICAgd2Vi
Vmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cygwLCA0IC8gd2ViVmlld0ltcGwtPmRl
dmljZVNjYWxlRmFjdG9yKCkpOworCisgICAgLy8gVGVzdCB6b29taW5nIGludG8gZGl2LgorICAg
IHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBv
aW50LCBXZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBmbG9hdCBz
Y2FsZWREaXZXaWR0aCA9IGRpdldpZHRoICogc2NhbGU7CisgICAgZmxvYXQgc2NhbGVkRGl2SGVp
Z2h0ID0gZGl2SGVpZ2h0ICogc2NhbGU7CisgICAgaW50IGhTY3JvbGwgPSAoKGRpdlBvc1ggKiBz
Y2FsZSkgLSAoKHBhZ2VXaWR0aCAtIHNjYWxlZERpdldpZHRoKSAvIDIpKSAvIHNjYWxlOworICAg
IGludCB2U2Nyb2xsID0gKChkaXZQb3NZICogc2NhbGUpIC0gKChwYWdlSGVpZ2h0IC0gc2NhbGVk
RGl2SGVpZ2h0KSAvIDIpKSAvIHNjYWxlOworICAgIEVYUEVDVF9GTE9BVF9FUShwYWdlV2lkdGgg
LyAoZGl2V2lkdGggKyAxMi4wIC8qIG1hcmdpbiAqLyksIHNjYWxlKTsKKyAgICBFWFBFQ1RfRVEo
aFNjcm9sbCwgc2Nyb2xsLngpOworICAgIEVYUEVDVF9FUSh2U2Nyb2xsLCBzY3JvbGwueSk7CisK
KyAgICAvLyBUZXN0IHpvb20gb3V0IHRvIG92ZXJ2aWV3IHNjYWxlLgorICAgIHdlYlZpZXdJbXBs
LT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55
KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJ
bXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJW
aWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MSwgc2NhbGUpOworICAgIEVYUEVDVF9FUShXZWJQb2ludCgwLCAwKSwgc2Nyb2xsKTsKKworICAg
IC8vIFRlc3RzIGZvciBjbGFtcGVkIHNjYWxpbmcuCisgICAgLy8gVGVzdCBjbGFtcCB0byBkZXZp
Y2Ugc2NhbGU6CisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6
SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2Nh
bGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDIuNSk7
CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91Ymxl
VGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLjUsIHNjYWxlKTsKKworICAgIC8vIFRlc3QgY2xhbXAgdG8gbWluaW11
bSBzY2FsZToKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJ
bnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2Fs
ZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDEu
NSAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpLCA0IC8gd2ViVmlld0ltcGwtPmRl
dmljZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3Jv
bGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2Fs
ZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS41LCBzY2FsZSk7CisgICAgRVhQRUNU
X0VRKFdlYlBvaW50KDAsIDApLCBzY3JvbGwpOworCisgICAgLy8gVGVzdCBjbGFtcCB0byBtYXhp
bXVtIHNjYWxlOgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6
OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNj
YWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsK
KyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDMgLyB3ZWJWaWV3
SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2Fs
ZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVU
YXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBzY2FsZSk7CisKKwor
ICAgIC8vIFRlc3QgZm9yIE5vbi1kb3VibGV0YXAgc2NhbGluZworICAgIHdlYlZpZXdJbXBsLT5z
ZXRQYWdlU2NhbGVGYWN0b3IoMSwgV2ViUG9pbnQoMCwgMCkpOworICAgIHdlYlZpZXdJbXBsLT5z
ZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFj
dG9yTGltaXRzKDAsIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
Ly8gVGVzdCB6b29taW5nIGludG8gZGl2LgorICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVB
bmRTY3JvbGxGb3JIaXRSZWN0KFdlYlJlY3QoMjUwLCAyNTAsIDEwLCAxMCksIFdlYlZpZXdJbXBs
OjpGaW5kSW5QYWdlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEocGFnZVdp
ZHRoIC8gKGRpdldpZHRoICsgMTIuMCAvKiBtYXJnaW4gKi8pLCBzY2FsZSk7Cit9CisjZW5kaWYK
KwogY2xhc3MgVGVzdFJlbG9hZERvZXNudFJlZGlyZWN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMg
V2ViRnJhbWVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgV2ViTmF2aWdhdGlvblBvbGlj
eSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3Qu
aHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1
dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU3YzA3MGNjMDNlNTQ1ZmJi
Y2JlMDdlZTE1ZmVmODRiNzYyMGYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0
Lmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIDxkaXYgc3R5bGU9
ImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDBweDsg
dG9wOiAwcHg7IHdpZHRoOiA2NDBweDsgaGVpZ2h0OiA0ODBweCI+CisgICAgICA8cD5Ub3AgRGl2
PC9wPgorICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IHBvc2l0aW9u
OiBhYnNvbHV0ZTsgbGVmdDogMjAwcHg7IHRvcDogMjAwcHg7IHdpZHRoOiAyMDBweDsgaGVpZ2h0
OiAxNTBweCI+CisgICAgICAgIDxwPkRpdiB0byB6b29tIHRvPC9wPgorICAgICAgPC9kaXY+Cisg
ICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125731</attachid>
            <date>2012-02-06 16:51:19 -0800</date>
            <delta_ts>2012-02-10 09:13:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120206195117.patch</filename>
            <type>text/plain</type>
            <size>15914</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDRmYmFmZmRkY2ZkZTEyZTJiZDgwNTBmNGI3ZTZjYzg0MDJkMDBmZjcuLjI1MDc3NmNhMjZkZDU0
OWE5Yzk0NmFjMDBlY2YxNzU3NWQ3YjY2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMDItMDYgIFZhcnVuIEphaW4gIDx2YXJ1bmphaW5AZ29vZ2xl
LmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2QgdG8gV2ViVmlld0ltcGwgdG8g
ZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUgZXZlbnRzIG9uIHRvdWNoIGRl
dmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToK
KyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2dldF9zY2FsZV9m
b3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMDQgIFNo
YXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBBZGQgc3VwcG9ydCB0byBmb3JjZSBmdWxsIGRhbWFnZSBpbiBDQ0RhbWFnZVRyYWNrZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA4NGRlNzcyOWNj
ZTVhZDkzNmI1MDY2ZDc0MWQ3MWZmY2VlNTEwODg2Li45NjY1MzBiNmRiZTc5NjM4MzBkYjQ3YmQy
NThiMDhhODhjOGE3YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCkBAIC0xOTMsNiArMTkzLDE0IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7
CiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGNvbnRyb2wgcGFyYW1ldGVycyBmb3Ig
YXV0b21hdGVkIHNjYWxpbmcgb2Ygd2VicGFnZXMKKy8vIChzdWNoIGFzIGR1ZSB0byBhIGRvdWJs
ZSB0YXAgZ2VzdHVyZSBvciBmaW5kIGluIHBhZ2UgZXRjLikuIFRoZXNlIGFyZQorLy8gZXhwZXJp
bWVudGFsbHkgZGV0ZXJtaW5lZC4KK3N0YXRpYyBjb25zdCBpbnQga1RvdWNoUG9pbnRQYWRkaW5n
ID0gMzI7CitzdGF0aWMgY29uc3QgZmxvYXQga01pblNjYWxlRGlmZmVyZW5jZSA9IDAuMDE7Citz
dGF0aWMgY29uc3QgZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50RGVmYXVsdE1hcmdpbiA9IDU7
CitzdGF0aWMgY29uc3QgZmxvYXQga0RvdWJsZVRhcFpvb21Db250ZW50TWluaW11bU1hcmdpbiA9
IDI7CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAg
LTgxMSw2ICs4MTksMTc2IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRvdWNoRXZlbnQoY29uc3QgV2Vi
VG91Y2hFdmVudCYgZXZlbnQpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKK1dlYlJlY3QgV2ViVmlld0ltcGw6OmNvbXB1dGVCbG9ja0JvdW5kcyhjb25zdCBXZWJSZWN0
JiByZWN0LCBBdXRvWm9vbVR5cGUgem9vbVR5cGUsIEJvb3N0ZWRUZXh0VHlwZSYgdGV4dFR5cGUp
Cit7CisgICAgdGV4dFR5cGUgPSBCb29zdGVkVGV4dDsKKyAgICBpZiAoIW1haW5GcmFtZUltcGwo
KSkKKyAgICAgICAgcmV0dXJuIFdlYlJlY3QoKTsKKworICAgIC8vIFVzZSB0aGUgcmVjdC1iYXNl
ZCBoaXQgdGVzdCB0byBmaW5kIHRoZSBub2RlLgorICAgIEludFBvaW50IHBvaW50ID0gbWFpbkZy
YW1lSW1wbCgpLT5mcmFtZVZpZXcoKS0+d2luZG93VG9Db250ZW50cyhJbnRQb2ludChyZWN0Lngs
IHJlY3QueSkpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbWFpbkZyYW1lSW1wbCgpLT5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsCisgICAg
ICAgICAgICBmYWxzZSwgem9vbVR5cGUgPT0gRmluZEluUGFnZSwgRG9udEhpdFRlc3RTY3JvbGxi
YXJzLCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LAor
ICAgICAgICAgICAgSW50U2l6ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCkpOworCisgICAgLy8g
RmluZCB0aGUgbW9zdCBib29zdGVkIHRleHQgbm9kZSBpbnRlcnNlY3RlZCBieSB0aGUgaGl0IHRl
c3QgKGlmIGFueSkuCisgICAgTm9kZSogbm9kZSA9IDA7CisgICAgZmxvYXQgZ3JlYXRlc3RCb29z
dGluZ0ZhY3RvciA9IDA7CisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4mIGxp
c3QgPSByZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8
UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBs
aXN0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIE5vZGUqIGN1cnJlbnQgPSBpdC0+Z2V0KCk7Cisg
ICAgICAgIGlmIChjdXJyZW50LT5pc1RleHROb2RlKCkgJiYgY3VycmVudC0+cmVuZGVyZXIoKSkg
eworICAgICAgICAgICAgZmxvYXQgYm9vc3RpbmdGYWN0b3IgPSBjdXJyZW50LT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSAvCisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
LnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAgIGlmIChib29zdGluZ0ZhY3RvciA+IGdyZWF0
ZXN0Qm9vc3RpbmdGYWN0b3IpIHsKKyAgICAgICAgICAgICAgICBub2RlID0gY3VycmVudDsKKyAg
ICAgICAgICAgICAgICB0ZXh0VHlwZSA9IChib29zdGluZ0ZhY3RvciA8PSAxKSA/IE5vcm1hbFRl
eHQgOiBCb29zdGVkVGV4dDsKKyAgICAgICAgICAgICAgICBncmVhdGVzdEJvb3N0aW5nRmFjdG9y
ID0gYm9vc3RpbmdGYWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIG5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7
CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBG
aW5kIHRoZSBibG9jayB0eXBlIG5vZGUgYmFzZWQgb24gdGhlIGhpdCBub2RlLgorICAgIHdoaWxl
IChub2RlICYmICghbm9kZS0+cmVuZGVyZXIoKSB8fCBub2RlLT5yZW5kZXJlcigpLT5pc0lubGlu
ZSgpKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKworICAgIC8vIFJldHVy
biB0aGUgYm91bmRpbmcgYm94IGluIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAg
aWYgKG5vZGUpIHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gbm9kZS0+Tm9kZTo6Z2V0UmVjdCgp
OworICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAg
ICAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICB9
CisgICAgcmV0dXJuIFdlYlJlY3QoKTsKK30KKworV2ViUmVjdCBXZWJWaWV3SW1wbDo6d2lkZW5S
ZWN0V2l0aGluUGFnZUJvdW5kcyhjb25zdCBXZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJn
aW4sIGludCBtaW5pbXVtTWFyZ2luKQoreworICAgIFdlYlNpemUgbWF4U2l6ZTsKKyAgICBpZiAo
bWFpbkZyYW1lKCkpCisgICAgICAgIG1heFNpemUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXpl
KCk7CisgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAg
ICAgICBzY3JvbGxPZmZzZXQgPSBtYWluRnJhbWUoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaW50
IGxlZnRNYXJnaW4gPSB0YXJnZXRNYXJnaW47CisgICAgaW50IHJpZ2h0TWFyZ2luID0gdGFyZ2V0
TWFyZ2luOworCisgICAgY29uc3QgaW50IGFic29sdXRlU291cmNlWCA9IHNvdXJjZS54ICsgc2Ny
b2xsT2Zmc2V0LndpZHRoKCk7CisgICAgaWYgKGxlZnRNYXJnaW4gPiBhYnNvbHV0ZVNvdXJjZVgp
IHsKKyAgICAgICAgbGVmdE1hcmdpbiA9IGFic29sdXRlU291cmNlWDsKKyAgICAgICAgcmlnaHRN
YXJnaW4gPSBtYXgobGVmdE1hcmdpbiwgbWluaW11bU1hcmdpbik7CisgICAgfQorCisgICAgY29u
c3QgaW50IG1heGltdW1SaWdodE1hcmdpbiA9IG1heFNpemUud2lkdGggLSAoc291cmNlLndpZHRo
ICsgYWJzb2x1dGVTb3VyY2VYKTsKKyAgICBpZiAocmlnaHRNYXJnaW4gPiBtYXhpbXVtUmlnaHRN
YXJnaW4pIHsKKyAgICAgICAgcmlnaHRNYXJnaW4gPSBtYXhpbXVtUmlnaHRNYXJnaW47CisgICAg
ICAgIGxlZnRNYXJnaW4gPSBtaW4obGVmdE1hcmdpbiwgbWF4KHJpZ2h0TWFyZ2luLCBtaW5pbXVt
TWFyZ2luKSk7CisgICAgfQorCisgICAgY29uc3QgaW50IG5ld1dpZHRoID0gc291cmNlLndpZHRo
ICsgbGVmdE1hcmdpbiArIHJpZ2h0TWFyZ2luOworICAgIGNvbnN0IGludCBuZXdYID0gc291cmNl
LnggLSBsZWZ0TWFyZ2luOworCisgICAgQVNTRVJUKG5ld1dpZHRoID49IDApOworICAgIEFTU0VS
VChzY3JvbGxPZmZzZXQud2lkdGgoKSArIG5ld1ggKyBuZXdXaWR0aCA8PSBtYXhTaXplLndpZHRo
KTsKKworICAgIHJldHVybiBXZWJSZWN0KG5ld1gsIHNvdXJjZS55LCBuZXdXaWR0aCwgc291cmNl
LmhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZv
ckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0UmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBm
bG9hdCYgc2NhbGUsIFdlYlBvaW50JiBzY3JvbGwpCit7CisgICAgc2NhbGUgPSBwYWdlU2NhbGVG
YWN0b3IoKTsKKyAgICBzY3JvbGwueCA9IHNjcm9sbC55ID0gMDsKKyAgICBXZWJSZWN0IHRhcmdl
dFJlY3QgPSBoaXRSZWN0OworICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
dGFyZ2V0UmVjdC53aWR0aCA9IHRhcmdldFJlY3QuaGVpZ2h0ID0ga1RvdWNoUG9pbnRQYWRkaW5n
OworCisgICAgQm9vc3RlZFRleHRUeXBlIHRleHRUeXBlID0gQm9vc3RlZFRleHQ7CisKKyAgICBX
ZWJSZWN0IHJlY3QgPSBjb21wdXRlQmxvY2tCb3VuZHModGFyZ2V0UmVjdCwgem9vbVR5cGUsIHRl
eHRUeXBlKTsKKworICAgIGNvbnN0IGZsb2F0IG92ZXJ2aWV3U2NhbGUgPSBtX21pbmltdW1QYWdl
U2NhbGVGYWN0b3I7CisgICAgYm9vbCBzY2FsZVVuY2hhbmdlZCA9IHRydWU7CisgICAgaWYgKCFy
ZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBQYWdlcyBzaG91bGQgYmUgYXMgbGVnaWJsZSBh
cyBvbiBkZXNrdG9wIHdoZW4gYXQgZHBpIHNjYWxlLCBzbyBubworICAgICAgICAvLyBuZWVkIHRv
IHpvb20gaW4gZnVydGhlciB3aGVuIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5pbmcgem9vbSBsZXZl
bAorICAgICAgICAvLyAoYWZ0ZXIgZG91YmxlIHRhcCwgZmluZCBpbiBwYWdlLCBldGMpLCB0aG91
Z2ggdGhlIHVzZXIgc2hvdWxkIHN0aWxsCisgICAgICAgIC8vIGJlIGFsbG93ZWQgdG8gbWFudWFs
bHkgcGluY2ggem9vbSBpbiBmdXJ0aGVyIGlmIHRoZXkgZGVzaXJlLgorICAgICAgICAvLyBGSVhN
RTogSW5jbHVkZSBmb250IHNjYWxlIGZhY3RvciBvbmNlIGl0cyBhZGRlZCB0byBzZXR0aW5ncy4K
KyAgICAgICAgY29uc3QgZmxvYXQgbWF4U2NhbGUgPSBkZXZpY2VTY2FsZUZhY3RvcigpICogMSAv
KiBmb250IHNjYWxlIGZhY3RvciAqLzsKKworICAgICAgICBjb25zdCBmbG9hdCBkZWZhdWx0TWFy
Z2luID0ga0RvdWJsZVRhcFpvb21Db250ZW50RGVmYXVsdE1hcmdpbiAqIGRldmljZVNjYWxlRmFj
dG9yKCk7CisgICAgICAgIGNvbnN0IGZsb2F0IG1pbmltdW1NYXJnaW4gPSBrRG91YmxlVGFwWm9v
bUNvbnRlbnRNaW5pbXVtTWFyZ2luICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgLy8g
V2Ugd2FudCB0aGUgbWFyZ2lucyB0byBoYXZlIHRoZSBzYW1lIHBoeXNpY2FsIHNpemUsIHdoaWNo
IG1lYW5zIHdlCisgICAgICAgIC8vIG5lZWQgdG8gZXhwcmVzcyB0aGVtIGluIHBvc3Qtc2NhbGUg
c2l6ZS4gVG8gZG8gdGhhdCB3ZSdkIG5lZWQgdG8ga25vdworICAgICAgICAvLyB0aGUgc2NhbGUg
d2UncmUgc2NhbGluZyB0bywgYnV0IHRoYXQgZGVwZW5kcyBvbiB0aGUgbWFyZ2lucy4gSW5zdGVh
ZAorICAgICAgICAvLyB3ZSBleHByZXNzIHRoZW0gYXMgYSBmcmFjdGlvbiBvZiB0aGUgdGFyZ2V0
IHJlY3RhbmdsZTogdGhpcyB3aWxsIGJlCisgICAgICAgIC8vIGNvcnJlY3QgaWYgd2UgZW5kIHVw
IGZ1bGx5IHpvb21pbmcgdG8gaXQsIGFuZCB3b24ndCBtYXR0ZXIgaWYgd2UKKyAgICAgICAgLy8g
ZG9uJ3QuCisgICAgICAgIHJlY3QgPSB3aWRlblJlY3RXaXRoaW5QYWdlQm91bmRzKHJlY3QsCisg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihkZWZhdWx0TWFyZ2luICogcmVjdC53aWR0
aCAvIG1fc2l6ZS53aWR0aCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaW5p
bXVtTWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6ZS53aWR0aCkpOworCisgICAgICAgIC8vIEZp
dCBibG9jayB0byBzY3JlZW4sIHJlc3BlY3RpbmcgbGltaXRzLgorICAgICAgICBpZiAodGV4dFR5
cGUgPT0gTm9ybWFsVGV4dCkKKyAgICAgICAgICAgIHNjYWxlID0gbWF4U2NhbGU7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgc2NhbGUgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS53
aWR0aCkgLyByZWN0LndpZHRoOworICAgICAgICAgICAgc2NhbGUgPSBtaW4oc2NhbGUsIG1heFNj
YWxlKTsKKyAgICAgICAgfQorICAgICAgICBzY2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9M
aW1pdHMoc2NhbGUpOworCisgICAgICAgIHNjYWxlVW5jaGFuZ2VkID0gZmFicyhwYWdlU2NhbGVG
YWN0b3IoKSAtIHNjYWxlKSA8IGtNaW5TY2FsZURpZmZlcmVuY2U7CisgICAgfQorCisgICAgaWYg
KHpvb21UeXBlID09IERvdWJsZVRhcCkgeworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwg
c2NhbGVVbmNoYW5nZWQpIHsKKyAgICAgICAgICAgIC8vIFpvb20gb3V0IHRvIG92ZXJ2aWV3IG1v
ZGUuCisgICAgICAgICAgICBpZiAob3ZlcnZpZXdTY2FsZSkKKyAgICAgICAgICAgICAgICBzY2Fs
ZSA9IG92ZXJ2aWV3U2NhbGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEtlZXAgY3VycmVudCBzY2Fs
ZSAobm8gbmVlZCB0byBzY3JvbGwgYXMgeCx5IHdpbGwgbm9ybWFsbHkgYWxyZWFkeQorICAgICAg
ICAvLyBiZSB2aXNpYmxlKS4gRklYTUU6IFJldmlzaXQgdGhpcyBpZiBpdCBpc24ndCBhbHdheXMg
dHJ1ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlz
IGJlaW5nIGNhbGxlZCBmb3IgYXV0byB6b29tIGR1cmluZyBmaW5kIGluIHBhZ2UsCisgICAgLy8g
dGhlbiBpZiB0aGUgdXNlciBtYW51YWxseSB6b29tcyBpbiBpdCdkIGJlIG5pY2UgdG8gcHJlc2Vy
dmUgdGhlIHJlbGF0aXZlCisgICAgLy8gaW5jcmVhc2UgaW4gem9vbSB0aGV5IGNhdXNlZCAoaWYg
dGhleSB6b29tIG91dCB0aGVuIGl0J3Mgb2sgdG8gem9vbQorICAgIC8vIHRoZW0gYmFjayBpbiBh
Z2FpbikuIFRoaXMgaXNuJ3QgY29tcGF0aWJsZSB3aXRoIG91ciBjdXJyZW50IGRvdWJsZS10YXAK
KyAgICAvLyB6b29tIHN0cmF0ZWd5IChmaXR0aW5nIHRoZSBjb250YWluaW5nIGJsb2NrIHRvIHRo
ZSBzY3JlZW4pIHRob3VnaC4KKworICAgIGZsb2F0IHNjcmVlbkhlaWdodCA9IG1fc2l6ZS5oZWln
aHQgLyBzY2FsZSAqIHBhZ2VTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IHNjcmVlbldpZHRoID0g
bV9zaXplLndpZHRoIC8gc2NhbGUgKiBwYWdlU2NhbGVGYWN0b3IoKTsKKworICAgIC8vIFNjcm9s
bCB0byB2ZXJ0aWNhbGx5IGFsaWduIHRoZSBibG9jay4KKyAgICBpZiAocmVjdC5oZWlnaHQgPCBz
Y3JlZW5IZWlnaHQpIHsKKyAgICAgICAgLy8gVmVydGljYWxseSBjZW50ZXIgc2hvcnQgYmxvY2tz
LgorICAgICAgICByZWN0LnkgLT0gMC41ICogKHNjcmVlbkhlaWdodCAtIHJlY3QuaGVpZ2h0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBFbnN1cmUgcG9zaXRpb24gd2UncmUgem9vbWluZyB0
byAoKyBwYWRkaW5nKSBpc24ndCBvZmYgdGhlIGJvdHRvbSBvZgorICAgICAgICAvLyB0aGUgc2Ny
ZWVuLgorICAgICAgICByZWN0LnkgPSBtYXgoKGZsb2F0KSByZWN0LnksIGhpdFJlY3QueSArIGtU
b3VjaFBvaW50UGFkZGluZyAtIHNjcmVlbkhlaWdodCk7CisgICAgfSAvLyBPdGhlcndpc2UgdG9w
IGFsaWduIHRoZSBibG9jay4KKworICAgIC8vIERvIHRoZSBzYW1lIHRoaW5nIGZvciBob3Jpem9u
dGFsIGFsaWdubWVudC4KKyAgICBpZiAocmVjdC53aWR0aCA8IHNjcmVlbldpZHRoKQorICAgICAg
ICByZWN0LnggLT0gMC41ICogKHNjcmVlbldpZHRoIC0gcmVjdC53aWR0aCk7CisgICAgZWxzZQor
ICAgICAgICByZWN0LnggPSBtYXgoKGZsb2F0KSByZWN0LngsIGhpdFJlY3QueCArIGtUb3VjaFBv
aW50UGFkZGluZyAtIHNjcmVlbldpZHRoKTsKKworICAgIHNjcm9sbC54ID0gcmVjdC54OworICAg
IHNjcm9sbC55ID0gcmVjdC55OworfQorI2VuZGlmCisKIHZvaWQgV2ViVmlld0ltcGw6Om51bWJl
ck9mV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCBudW1iZXJPZldoZWVsSGFuZGxl
cnMpCiB7CiAgICAgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzID0gbnVtYmVyT2ZXaGVlbEhhbmRs
ZXJzID4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGEw
MzlhMDljZWI4N2MyMGUzZGE4NDMzMzFmMWJlYWFlZDNmNGYxMzEuLmU3MGVmNjA1ZmU0MWFiNWQy
YzY2MDlhN2I2MWZkODBkMDFlMzAwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaApAQCAtOTgsNiArOTgsMTEgQEAgY2xhc3MgV2ViVG91Y2hFdmVudDsKIAogY2xh
c3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdENsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoK
KyAgICBlbnVtIEF1dG9ab29tVHlwZSB7CisgICAgICAgIERvdWJsZVRhcCwKKyAgICAgICAgRmlu
ZEluUGFnZSwKKyAgICB9OworCiAgICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVhbCBXZWJTaXplIHNpemUoKSB7IHJldHVybiBtX3Np
emU7IH0KQEAgLTQ2MSw2ICs0NjYsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEdFU1RVUkVfUkVD
T0dOSVpFUikKICAgICB2b2lkIHJlc2V0R2VzdHVyZVJlY29nbml6ZXIoKTsKICNlbmRpZgorI2lm
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGNvbXB1dGVTY2FsZUFuZFNjcm9sbEZv
ckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0UmVjdCwgQXV0b1pvb21UeXBlLCBmbG9hdCYgc2Nh
bGUsIFdlYlBvaW50JiBzY3JvbGwpOworI2VuZGlmCiAKICAgICB2b2lkIGxvc2VDb21wb3NpdG9y
Q29udGV4dChpbnQgbnVtVGltZXMpOwogCkBAIC00OTIsNiArNTAwLDExIEBAIHByaXZhdGU6CiAg
ICAgICBEcmFnT3ZlcgogICAgIH07CiAKKyAgICBlbnVtIEJvb3N0ZWRUZXh0VHlwZSB7CisgICAg
ICAgIE5vcm1hbFRleHQsCisgICAgICAgIEJvb3N0ZWRUZXh0LAorICAgIH07CisKICAgICBXZWJW
aWV3SW1wbChXZWJWaWV3Q2xpZW50Kik7CiAgICAgdmlydHVhbCB+V2ViVmlld0ltcGwoKTsKIApA
QCAtNTMyLDYgKzU0NSwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmVlVmll
d3BvcnQoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorCisgICAgLy8g
UmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBibG9jayB0eXBlIG5vZGUgdG91Y2hlZCBi
eSB0aGUgV2ViUmVjdC4KKyAgICBXZWJSZWN0IGNvbXB1dGVCbG9ja0JvdW5kcyhjb25zdCBXZWJS
ZWN0JiwgQXV0b1pvb21UeXBlLCBCb29zdGVkVGV4dFR5cGUmKTsKKworICAgIC8vIEhlbHBlciBm
dW5jdGlvbjogV2lkZW5zIHRoZSB3aWR0aCBvZiB8c291cmNlfCBieSB0aGUgc3BlY2lmaWVkIG1h
cmdpbnMKKyAgICAvLyB3aGlsZSBrZWVwaW5nIGl0IHNtYWxsZXIgdGhhbiBwYWdlIHdpZHRoLgor
ICAgIFdlYlJlY3Qgd2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhjb25zdCBXZWJSZWN0JiBzb3Vy
Y2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBtaW5pbXVtTWFyZ2luKTsKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKFBPSU5URVJfTE9DSykKICAgICB2b2lkIHBvaW50ZXJMb2NrTW91c2VFdmVudChjb25z
dCBXZWJJbnB1dEV2ZW50Jik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViRnJhbWVUZXN0LmNwcAppbmRleCBiNTkwMDE4NjBkYTJhYjliYmYwYTJkODJiMjgyNmRj
ODBiY2RhZjJhLi43Zjk2NTBiYjUzZGM4NmU1N2YyODY5NWYxOGI1OTA3OWViMGJkZDFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCkBAIC0xNTEs
NiArMTUxLDc4IEBAIFRFU1RfRihXZWJGcmFtZVRlc3QsIENocm9tZVBhZ2VOb0phdmFzY3JpcHQp
CiAgICAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nOjpucG9zLCBjb250ZW50LmZpbmQoIkNsb2JiZXJl
ZCIpKTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK1RFU1RfRihXZWJGcmFtZVRl
c3QsIERpdkF1dG9ab29tUGFyYW1zVGVzdCkKK3sKKyAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxM
b2FkKCJnZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiKTsKKworICAg
IFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCA9IHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4oRnJh
bWVUZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImdldF9zY2Fs
ZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbCIsIHRydWUpKTsKKyAgICBpbnQgcGFn
ZVdpZHRoID0gNjQwOworICAgIGludCBwYWdlSGVpZ2h0ID0gNDgwOworICAgIGludCBkaXZQb3NY
ID0gMjAwOworICAgIGludCBkaXZQb3NZID0gMjAwOworICAgIGludCBkaXZXaWR0aCA9IDIwMDsK
KyAgICBpbnQgZGl2SGVpZ2h0ID0gMTUwOworICAgIFdlYlJlY3QgZG91YmxlVGFwUG9pbnQoMjUw
LCAyNTAsIDAsIDApOworICAgIHdlYlZpZXdJbXBsLT5yZXNpemUoV2ViU2l6ZShwYWdlV2lkdGgs
IHBhZ2VIZWlnaHQpKTsKKyAgICBmbG9hdCBzY2FsZTsKKyAgICBXZWJQb2ludCBzY3JvbGw7CisK
KyAgICAvLyBUZXN0IGZvciBEb3VibGV0YXAgc2NhbGluZworCisgICAgLy8gVGVzdHMgZm9yIHpv
b21pbmcgaW4gYW5kIG91dCB3aXRob3V0IGNsYW1waW5nLgorICAgIC8vIFNldCBkZXZpY2Ugc2Nh
bGUgYW5kIHNjYWxlIGxpbWl0cyBzbyB3ZSBkb250IGdldCBjbGFtcGVkLgorICAgIHdlYlZpZXdJ
bXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNj
YWxlRmFjdG9yTGltaXRzKDAsIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisKKyAgICAvLyBUZXN0IHpvb21pbmcgaW50byBkaXYuCisgICAgd2ViVmlld0ltcGwtPmNvbXB1
dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpE
b3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIGZsb2F0IHNjYWxlZERpdldpZHRoID0gZGl2
V2lkdGggKiBzY2FsZTsKKyAgICBmbG9hdCBzY2FsZWREaXZIZWlnaHQgPSBkaXZIZWlnaHQgKiBz
Y2FsZTsKKyAgICBpbnQgaFNjcm9sbCA9ICgoZGl2UG9zWCAqIHNjYWxlKSAtICgocGFnZVdpZHRo
IC0gc2NhbGVkRGl2V2lkdGgpIC8gMikpIC8gc2NhbGU7CisgICAgaW50IHZTY3JvbGwgPSAoKGRp
dlBvc1kgKiBzY2FsZSkgLSAoKHBhZ2VIZWlnaHQgLSBzY2FsZWREaXZIZWlnaHQpIC8gMikpIC8g
c2NhbGU7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHBhZ2VXaWR0aCAvIChkaXZXaWR0aCArIDEyLjAg
LyogbWFyZ2luICovKSwgc2NhbGUpOworICAgIEVYUEVDVF9FUShoU2Nyb2xsLCBzY3JvbGwueCk7
CisgICAgRVhQRUNUX0VRKHZTY3JvbGwsIHNjcm9sbC55KTsKKworICAgIC8vIFRlc3Qgem9vbSBv
dXQgdG8gb3ZlcnZpZXcgc2NhbGUuCisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJ
bXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFu
ZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAs
IHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzY2FsZSk7CisgICAgRVhQ
RUNUX0VRKFdlYlBvaW50KDAsIDApLCBzY3JvbGwpOworCisgICAgLy8gVGVzdHMgZm9yIGNsYW1w
ZWQgc2NhbGluZy4KKyAgICAvLyBUZXN0IGNsYW1wIHRvIGRldmljZSBzY2FsZToKKyAgICB3ZWJW
aWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9sbC54LCBz
Y3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICB3
ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoMi41KTsKKyAgICB3ZWJWaWV3SW1wbC0+
Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0lt
cGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIuNSwg
c2NhbGUpOworCisgICAgLy8gVGVzdCBjbGFtcCB0byBtaW5pbXVtIHNjYWxlOgorICAgIHdlYlZp
ZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNj
cm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdl
YlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMS41IC8gd2ViVmlld0ltcGwtPmRl
dmljZVNjYWxlRmFjdG9yKCksIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91Ymxl
VGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgxLjUsIHNjYWxlKTsKKyAgICBFWFBFQ1RfRVEoV2ViUG9pbnQoMCwgMCks
IHNjcm9sbCk7CisKKyAgICAvLyBUZXN0IGNsYW1wIHRvIG1heGltdW0gc2NhbGU6CisgICAgd2Vi
Vmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwg
c2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAg
d2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5z
ZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgMyAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZh
Y3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVj
dChkb3VibGVUYXBQb2ludCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIHNjYWxlKTsKKworCisgICAgLy8gVGVzdCBmb3IgTm9u
LWRvdWJsZXRhcCBzY2FsaW5nCisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3Rvcigx
LCBXZWJQb2ludCgwLCAwKSk7CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9y
KDQpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgNCAvIHdl
YlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAvLyBUZXN0IHpvb21pbmcgaW50
byBkaXYuCisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3Qo
V2ViUmVjdCgyNTAsIDI1MCwgMTAsIDEwKSwgV2ViVmlld0ltcGw6OkZpbmRJblBhZ2UsIHNjYWxl
LCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUShwYWdlV2lkdGggLyAoZGl2V2lkdGggKyAx
Mi4wIC8qIG1hcmdpbiAqLyksIHNjYWxlKTsKK30KKyNlbmRpZgorCiBjbGFzcyBUZXN0UmVsb2Fk
RG9lc250UmVkaXJlY3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCBXZWJOYXZpZ2F0aW9uUG9saWN5IGRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb24oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
Z2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rl
c3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZTdjMDcwY2MwM2U1NDVmYmJjYmUwN2VlMTVmZWY4NGI3NjIw
ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbApAQCAtMCwwICsxLDEw
IEBACis8aHRtbD4KKyAgPGJvZHk+CisgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjog
Z3JlZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMHB4OyB0b3A6IDBweDsgd2lkdGg6IDY0
MHB4OyBoZWlnaHQ6IDQ4MHB4Ij4KKyAgICAgIDxwPlRvcCBEaXY8L3A+CisgICAgICA8ZGl2IHN0
eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAy
MDBweDsgdG9wOiAyMDBweDsgd2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDE1MHB4Ij4KKyAgICAgICAg
PHA+RGl2IHRvIHpvb20gdG88L3A+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126521</attachid>
            <date>2012-02-10 09:13:30 -0800</date>
            <delta_ts>2012-02-10 10:17:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120210121329.patch</filename>
            <type>text/plain</type>
            <size>19689</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDdhZDYzZjM3YmQwMzgxMDdlOTUwNTczNjI1NjdlMDFlZmVlZjViYzYuLjNjMzFiMzFiMDM4ZjVi
NzI2NGI3NzNlM2E1Y2VlNDFhODhlOWZkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTItMDItMTAgIFZhcnVuIEphaW4gIDx2YXJ1bmphaW5AZ29vZ2xl
LmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2QgdG8gV2ViVmlld0ltcGwgdG8g
ZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUgZXZlbnRzIG9uIHRvdWNoIGRl
dmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmaW5kTW9zdEJvb3N0ZWRUZXh0Tm9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToK
KyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6c2V0Q29tcHV0ZWRGb250U2l6ZUZvclRleHREaXYpOgorICAgICAgICAo
V2ViS2l0OjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRv
X3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0wOSAgVy4gSmFtZXMg
TWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3Igc3RhcnRpbmcgcGFnZS9zY2FsZSBhbmltYXRpb25zIG9uIENDIGltcGwg
dGhyZWFkIGZyb20gV2ViVmlld0ltcGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCAwZjM1Mzc5MDY4NDdmNDUyMjZmNDdjMWVlNjcwOTg3YTg5MTRiMTNh
Li45MzA1YmI2YjE3MmVjYWZmMDhmMWU4N2U4MTY0YjA2OGExOTQzNDZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xODksNiArMTg5LDE0IEBAIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRl
cygpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgY29uc3Rh
bnRzIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgYXV0b21hdGVkIHNjYWxpbmcgb2Ygd2VicGFnZXMK
Ky8vIChzdWNoIGFzIGR1ZSB0byBhIGRvdWJsZSB0YXAgZ2VzdHVyZSBvciBmaW5kIGluIHBhZ2Ug
ZXRjLikuIFRoZXNlIGFyZQorLy8gZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KK3N0YXRpYyBj
b25zdCBpbnQgdG91Y2hQb2ludFBhZGRpbmcgPSAzMjsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5T
Y2FsZURpZmZlcmVuY2UgPSAwLjAxOworc3RhdGljIGNvbnN0IGZsb2F0IGRvdWJsZVRhcFpvb21D
b250ZW50RGVmYXVsdE1hcmdpbiA9IDU7CitzdGF0aWMgY29uc3QgZmxvYXQgZG91YmxlVGFwWm9v
bUNvbnRlbnRNaW5pbXVtTWFyZ2luID0gMjsKKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODAzLDYgKzgxMSwxODEgQEAgYm9vbCBXZWJWaWV3SW1w
bDo6dG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50JiBldmVudCkKIH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorTm9kZSogV2ViVmlld0ltcGw6OmZpbmRNb3N0Qm9v
c3RlZFRleHROb2RlKGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+JiBub2RlTGlzdCwg
ZmxvYXQmIGdyZWF0ZXN0Qm9vc3RpbmdGYWN0b3IpCit7CisgICAgTm9kZSogbm9kZSA9IDA7Cisg
ICAgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQ
dHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlTGlzdC5iZWdpbigpOyBpdCAhPSBu
b2RlTGlzdC5lbmQoKTsgKytpdCkgeworICAgICAgICBOb2RlKiBjdXJyZW50ID0gaXQtPmdldCgp
OworICAgICAgICBpZiAoY3VycmVudC0+aXNUZXh0Tm9kZSgpICYmIGN1cnJlbnQtPnJlbmRlcmVy
KCkpIHsKKyAgICAgICAgICAgIGZsb2F0IGJvb3N0aW5nRmFjdG9yID0gY3VycmVudC0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkgLworICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgICAgICAgICBpZiAoYm9vc3RpbmdGYWN0b3IgPiBn
cmVhdGVzdEJvb3N0aW5nRmFjdG9yKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnQ7
CisgICAgICAgICAgICAgICAgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IGJvb3N0aW5nRmFjdG9y
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBub2RlOworfQor
CitXZWJSZWN0IFdlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMoY29uc3QgV2ViUmVjdCYg
cmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBCb29zdGVkVGV4dFR5cGUmIHRleHRUeXBlKQor
eworICAgIGlmICghbWFpbkZyYW1lSW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViUmVjdCgpOwor
CisgICAgLy8gVXNlIHRoZSByZWN0LWJhc2VkIGhpdCB0ZXN0IHRvIGZpbmQgdGhlIG5vZGUuCisg
ICAgSW50UG9pbnQgcG9pbnQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLT53aW5kb3dU
b0NvbnRlbnRzKEludFBvaW50KHJlY3QueCwgcmVjdC55KSk7CisgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0
UmVzdWx0QXRQb2ludChwb2ludCwKKyAgICAgICAgICAgIGZhbHNlLCB6b29tVHlwZSA9PSBGaW5k
SW5QYWdlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksCisgICAgICAgICAgICBJbnRTaXplKHJlY3Qud2lkdGgs
IHJlY3QuaGVpZ2h0KSk7CisKKyAgICAvLyBGaW5kIHRoZSBtb3N0IGJvb3N0ZWQgdGV4dCBub2Rl
IGludGVyc2VjdGVkIGJ5IHRoZSBoaXQgdGVzdCAoaWYgYW55KS4KKyAgICBmbG9hdCBncmVhdGVz
dEJvb3N0aW5nRmFjdG9yID0gMDsKKyAgICBOb2RlKiBub2RlID0gZmluZE1vc3RCb29zdGVkVGV4
dE5vZGUocmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSwgZ3JlYXRlc3RCb29zdGluZ0ZhY3Rv
cik7CisgICAgdGV4dFR5cGUgPSAobm9kZSAmJiBncmVhdGVzdEJvb3N0aW5nRmFjdG9yIDw9IDEp
PyBOb3JtYWxUZXh0IDogQm9vc3RlZFRleHQ7CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIG5v
ZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBGaW5kIHRoZSBibG9jayB0eXBlIG5vZGUg
YmFzZWQgb24gdGhlIGhpdCBub2RlLgorICAgIHdoaWxlIChub2RlICYmICghbm9kZS0+cmVuZGVy
ZXIoKSB8fCBub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKKyAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKKworICAgIC8vIFJldHVybiB0aGUgYm91bmRpbmcgYm94IGluIHRo
ZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgSW50
UmVjdCByZWN0ID0gbm9kZS0+Tm9kZTo6Z2V0UmVjdCgpOworICAgICAgICBGcmFtZSogZnJhbWUg
PSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICByZXR1cm4gZnJhbWUtPnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYlJlY3QoKTsK
K30KKworV2ViUmVjdCBXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhjb25z
dCBXZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBtaW5pbXVtTWFyZ2luKQor
eworICAgIFdlYlNpemUgbWF4U2l6ZTsKKyAgICBpZiAobWFpbkZyYW1lKCkpCisgICAgICAgIG1h
eFNpemUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCk7CisgICAgSW50U2l6ZSBzY3JvbGxP
ZmZzZXQ7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAgICBzY3JvbGxPZmZzZXQgPSBtYWlu
RnJhbWUoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaW50IGxlZnRNYXJnaW4gPSB0YXJnZXRNYXJn
aW47CisgICAgaW50IHJpZ2h0TWFyZ2luID0gdGFyZ2V0TWFyZ2luOworCisgICAgY29uc3QgaW50
IGFic29sdXRlU291cmNlWCA9IHNvdXJjZS54ICsgc2Nyb2xsT2Zmc2V0LndpZHRoKCk7CisgICAg
aWYgKGxlZnRNYXJnaW4gPiBhYnNvbHV0ZVNvdXJjZVgpIHsKKyAgICAgICAgbGVmdE1hcmdpbiA9
IGFic29sdXRlU291cmNlWDsKKyAgICAgICAgcmlnaHRNYXJnaW4gPSBtYXgobGVmdE1hcmdpbiwg
bWluaW11bU1hcmdpbik7CisgICAgfQorCisgICAgY29uc3QgaW50IG1heGltdW1SaWdodE1hcmdp
biA9IG1heFNpemUud2lkdGggLSAoc291cmNlLndpZHRoICsgYWJzb2x1dGVTb3VyY2VYKTsKKyAg
ICBpZiAocmlnaHRNYXJnaW4gPiBtYXhpbXVtUmlnaHRNYXJnaW4pIHsKKyAgICAgICAgcmlnaHRN
YXJnaW4gPSBtYXhpbXVtUmlnaHRNYXJnaW47CisgICAgICAgIGxlZnRNYXJnaW4gPSBtaW4obGVm
dE1hcmdpbiwgbWF4KHJpZ2h0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKSk7CisgICAgfQorCisgICAg
Y29uc3QgaW50IG5ld1dpZHRoID0gc291cmNlLndpZHRoICsgbGVmdE1hcmdpbiArIHJpZ2h0TWFy
Z2luOworICAgIGNvbnN0IGludCBuZXdYID0gc291cmNlLnggLSBsZWZ0TWFyZ2luOworCisgICAg
QVNTRVJUKG5ld1dpZHRoID49IDApOworICAgIEFTU0VSVChzY3JvbGxPZmZzZXQud2lkdGgoKSAr
IG5ld1ggKyBuZXdXaWR0aCA8PSBtYXhTaXplLndpZHRoKTsKKworICAgIHJldHVybiBXZWJSZWN0
KG5ld1gsIHNvdXJjZS55LCBuZXdXaWR0aCwgc291cmNlLmhlaWdodCk7Cit9CisKK3ZvaWQgV2Vi
Vmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYg
aGl0UmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBz
Y3JvbGwpCit7CisgICAgc2NhbGUgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBzY3JvbGwueCA9
IHNjcm9sbC55ID0gMDsKKyAgICBXZWJSZWN0IHRhcmdldFJlY3QgPSBoaXRSZWN0OworICAgIGlm
ICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCA9IHRhcmdl
dFJlY3QuaGVpZ2h0ID0gdG91Y2hQb2ludFBhZGRpbmc7CisKKyAgICBCb29zdGVkVGV4dFR5cGUg
dGV4dFR5cGUgPSBCb29zdGVkVGV4dDsKKworICAgIFdlYlJlY3QgcmVjdCA9IGNvbXB1dGVCbG9j
a0JvdW5kcyh0YXJnZXRSZWN0LCB6b29tVHlwZSwgdGV4dFR5cGUpOworCisgICAgY29uc3QgZmxv
YXQgb3ZlcnZpZXdTY2FsZSA9IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvcjsKKyAgICBib29sIHNj
YWxlVW5jaGFuZ2VkID0gdHJ1ZTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAg
IC8vIFBhZ2VzIHNob3VsZCBiZSBhcyBsZWdpYmxlIGFzIG9uIGRlc2t0b3Agd2hlbiBhdCBkcGkg
c2NhbGUsIHNvIG5vCisgICAgICAgIC8vIG5lZWQgdG8gem9vbSBpbiBmdXJ0aGVyIHdoZW4gYXV0
b21hdGljYWxseSBkZXRlcm1pbmluZyB6b29tIGxldmVsCisgICAgICAgIC8vIChhZnRlciBkb3Vi
bGUgdGFwLCBmaW5kIGluIHBhZ2UsIGV0YyksIHRob3VnaCB0aGUgdXNlciBzaG91bGQgc3RpbGwK
KyAgICAgICAgLy8gYmUgYWxsb3dlZCB0byBtYW51YWxseSBwaW5jaCB6b29tIGluIGZ1cnRoZXIg
aWYgdGhleSBkZXNpcmUuCisgICAgICAgIC8vIEZJWE1FOiBJbmNsdWRlIGZvbnQgc2NhbGUgZmFj
dG9yIG9uY2UgaXRzIGFkZGVkIHRvIHNldHRpbmdzLgorICAgICAgICBjb25zdCBmbG9hdCBtYXhT
Y2FsZSA9IGRldmljZVNjYWxlRmFjdG9yKCkgKiAxIC8qIGZvbnQgc2NhbGUgZmFjdG9yICovOwor
CisgICAgICAgIGNvbnN0IGZsb2F0IGRlZmF1bHRNYXJnaW4gPSBkb3VibGVUYXBab29tQ29udGVu
dERlZmF1bHRNYXJnaW4gKiBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBjb25zdCBmbG9h
dCBtaW5pbXVtTWFyZ2luID0gZG91YmxlVGFwWm9vbUNvbnRlbnRNaW5pbXVtTWFyZ2luICogZGV2
aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgbWFyZ2lucyB0byBoYXZl
IHRoZSBzYW1lIHBoeXNpY2FsIHNpemUsIHdoaWNoIG1lYW5zIHdlCisgICAgICAgIC8vIG5lZWQg
dG8gZXhwcmVzcyB0aGVtIGluIHBvc3Qtc2NhbGUgc2l6ZS4gVG8gZG8gdGhhdCB3ZSdkIG5lZWQg
dG8ga25vdworICAgICAgICAvLyB0aGUgc2NhbGUgd2UncmUgc2NhbGluZyB0bywgYnV0IHRoYXQg
ZGVwZW5kcyBvbiB0aGUgbWFyZ2lucy4gSW5zdGVhZAorICAgICAgICAvLyB3ZSBleHByZXNzIHRo
ZW0gYXMgYSBmcmFjdGlvbiBvZiB0aGUgdGFyZ2V0IHJlY3RhbmdsZTogdGhpcyB3aWxsIGJlCisg
ICAgICAgIC8vIGNvcnJlY3QgaWYgd2UgZW5kIHVwIGZ1bGx5IHpvb21pbmcgdG8gaXQsIGFuZCB3
b24ndCBtYXR0ZXIgaWYgd2UKKyAgICAgICAgLy8gZG9uJ3QuCisgICAgICAgIHJlY3QgPSB3aWRl
blJlY3RXaXRoaW5QYWdlQm91bmRzKHJlY3QsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihkZWZhdWx0TWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6ZS53aWR0aCksCisgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaW5pbXVtTWFyZ2luICogcmVjdC53aWR0aCAvIG1f
c2l6ZS53aWR0aCkpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0byBzY3JlZW4sIHJlc3BlY3Rp
bmcgbGltaXRzLgorICAgICAgICBpZiAodGV4dFR5cGUgPT0gTm9ybWFsVGV4dCkKKyAgICAgICAg
ICAgIHNjYWxlID0gbWF4U2NhbGU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2NhbGUg
Kj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS53aWR0aCkgLyByZWN0LndpZHRoOworICAgICAg
ICAgICAgc2NhbGUgPSBtaW4oc2NhbGUsIG1heFNjYWxlKTsKKyAgICAgICAgfQorICAgICAgICBz
Y2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMoc2NhbGUpOworCisgICAgICAgIHNj
YWxlVW5jaGFuZ2VkID0gZmFicyhwYWdlU2NhbGVGYWN0b3IoKSAtIHNjYWxlKSA8IG1pblNjYWxl
RGlmZmVyZW5jZTsKKyAgICB9CisKKyAgICBpZiAoem9vbVR5cGUgPT0gRG91YmxlVGFwKSB7Cisg
ICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBzY2FsZVVuY2hhbmdlZCkgeworICAgICAgICAg
ICAgLy8gWm9vbSBvdXQgdG8gb3ZlcnZpZXcgbW9kZS4KKyAgICAgICAgICAgIGlmIChvdmVydmll
d1NjYWxlKQorICAgICAgICAgICAgICAgIHNjYWxlID0gb3ZlcnZpZXdTY2FsZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocmVjdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gS2VlcCBjdXJyZW50IHNjYWxlIChubyBuZWVkIHRvIHNjcm9sbCBhcyB4LHkg
d2lsbCBub3JtYWxseSBhbHJlYWR5CisgICAgICAgIC8vIGJlIHZpc2libGUpLiBGSVhNRTogUmV2
aXNpdCB0aGlzIGlmIGl0IGlzbid0IGFsd2F5cyB0cnVlLgorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBhdXRvIHpvb20g
ZHVyaW5nIGZpbmQgaW4gcGFnZSwKKyAgICAvLyB0aGVuIGlmIHRoZSB1c2VyIG1hbnVhbGx5IHpv
b21zIGluIGl0J2QgYmUgbmljZSB0byBwcmVzZXJ2ZSB0aGUgcmVsYXRpdmUKKyAgICAvLyBpbmNy
ZWFzZSBpbiB6b29tIHRoZXkgY2F1c2VkIChpZiB0aGV5IHpvb20gb3V0IHRoZW4gaXQncyBvayB0
byB6b29tCisgICAgLy8gdGhlbSBiYWNrIGluIGFnYWluKS4gVGhpcyBpc24ndCBjb21wYXRpYmxl
IHdpdGggb3VyIGN1cnJlbnQgZG91YmxlLXRhcAorICAgIC8vIHpvb20gc3RyYXRlZ3kgKGZpdHRp
bmcgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHNjcmVlbikgdGhvdWdoLgorCisgICAgZmxv
YXQgc2NyZWVuSGVpZ2h0ID0gbV9zaXplLmhlaWdodCAvIHNjYWxlICogcGFnZVNjYWxlRmFjdG9y
KCk7CisgICAgZmxvYXQgc2NyZWVuV2lkdGggPSBtX3NpemUud2lkdGggLyBzY2FsZSAqIHBhZ2VT
Y2FsZUZhY3RvcigpOworCisgICAgLy8gU2Nyb2xsIHRvIHZlcnRpY2FsbHkgYWxpZ24gdGhlIGJs
b2NrLgorICAgIGlmIChyZWN0LmhlaWdodCA8IHNjcmVlbkhlaWdodCkgeworICAgICAgICAvLyBW
ZXJ0aWNhbGx5IGNlbnRlciBzaG9ydCBibG9ja3MuCisgICAgICAgIHJlY3QueSAtPSAwLjUgKiAo
c2NyZWVuSGVpZ2h0IC0gcmVjdC5oZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEVu
c3VyZSBwb3NpdGlvbiB3ZSdyZSB6b29taW5nIHRvICgrIHBhZGRpbmcpIGlzbid0IG9mZiB0aGUg
Ym90dG9tIG9mCisgICAgICAgIC8vIHRoZSBzY3JlZW4uCisgICAgICAgIHJlY3QueSA9IG1heDxm
bG9hdD4ocmVjdC55LCBoaXRSZWN0LnkgKyB0b3VjaFBvaW50UGFkZGluZyAtIHNjcmVlbkhlaWdo
dCk7CisgICAgfSAvLyBPdGhlcndpc2UgdG9wIGFsaWduIHRoZSBibG9jay4KKworICAgIC8vIERv
IHRoZSBzYW1lIHRoaW5nIGZvciBob3Jpem9udGFsIGFsaWdubWVudC4KKyAgICBpZiAocmVjdC53
aWR0aCA8IHNjcmVlbldpZHRoKQorICAgICAgICByZWN0LnggLT0gMC41ICogKHNjcmVlbldpZHRo
IC0gcmVjdC53aWR0aCk7CisgICAgZWxzZQorICAgICAgICByZWN0LnggPSBtYXg8ZmxvYXQ+KHJl
Y3QueCwgaGl0UmVjdC54ICsgdG91Y2hQb2ludFBhZGRpbmcgLSBzY3JlZW5XaWR0aCk7CisKKyAg
ICBzY3JvbGwueCA9IHJlY3QueDsKKyAgICBzY3JvbGwueSA9IHJlY3QueTsKK30KKyNlbmRpZgor
CiB2b2lkIFdlYlZpZXdJbXBsOjpudW1iZXJPZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5z
aWduZWQgbnVtYmVyT2ZXaGVlbEhhbmRsZXJzKQogewogICAgIG1faGF2ZVdoZWVsRXZlbnRIYW5k
bGVycyA9IG51bWJlck9mV2hlZWxIYW5kbGVycyA+IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCAxOTdmNTgyZTRlOWVkMGM1MmE2ODhhMTFmZmUxZTA1MzA5
ZmI0YzZmLi41NTZjM2E1MGMxYTc2ZGMwNGQzMTc2ZTNkMzk1ZTc4MDY2MWM3MjVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTk2LDYgKzk2LDExIEBAIGNs
YXNzIFdlYlRvdWNoRXZlbnQ7CiAKIGNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcs
IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVk
PFdlYlZpZXdJbXBsPiB7CiBwdWJsaWM6CisgICAgZW51bSBBdXRvWm9vbVR5cGUgeworICAgICAg
ICBEb3VibGVUYXAsCisgICAgICAgIEZpbmRJblBhZ2UsCisgICAgfTsKKwogICAgIC8vIFdlYldp
ZGdldCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2Vi
U2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CkBAIC00NTgsNiArNDYzLDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBhIHBsdWdpbiBjYW4gdXBkYXRlIGl0cyBvd24gem9vbSwgc2F5IGJlY2F1c2Ug
b2YgaXRzIG93biBVSS4KICAgICB2b2lkIGZ1bGxGcmFtZVBsdWdpblpvb21MZXZlbENoYW5nZWQo
ZG91YmxlIHpvb21MZXZlbCk7CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdm9p
ZCBjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGNvbnN0IFdlYlJlY3QmIGhpdFJlY3Qs
IEF1dG9ab29tVHlwZSwgZmxvYXQmIHNjYWxlLCBXZWJQb2ludCYgc2Nyb2xsKTsKKyNlbmRpZgor
CiAgICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsKIAogICAgIHZv
aWQgZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kik7CkBAIC00ODgs
NiArNDk3LDExIEBAIHByaXZhdGU6CiAgICAgICBEcmFnT3ZlcgogICAgIH07CiAKKyAgICBlbnVt
IEJvb3N0ZWRUZXh0VHlwZSB7CisgICAgICAgIE5vcm1hbFRleHQsCisgICAgICAgIEJvb3N0ZWRU
ZXh0LAorICAgIH07CisKICAgICBXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50Kik7CiAgICAgdmly
dHVhbCB+V2ViVmlld0ltcGwoKTsKIApAQCAtNTI4LDYgKzU0MiwxNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQorICAgIFdlYkNvcmU6Ok5vZGUqIGZpbmRNb3N0Qm9vc3RlZFRleHROb2Rl
KGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpOb2RlPiA+JiwgZmxvYXQmIGdyZWF0
ZXN0Qm9vc3RpbmdGYWN0b3IpOworCisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9m
IHRoZSBibG9jayB0eXBlIG5vZGUgdG91Y2hlZCBieSB0aGUgV2ViUmVjdC4KKyAgICBXZWJSZWN0
IGNvbXB1dGVCbG9ja0JvdW5kcyhjb25zdCBXZWJSZWN0JiwgQXV0b1pvb21UeXBlLCBCb29zdGVk
VGV4dFR5cGUmKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbjogV2lkZW5zIHRoZSB3aWR0aCBv
ZiB8c291cmNlfCBieSB0aGUgc3BlY2lmaWVkIG1hcmdpbnMKKyAgICAvLyB3aGlsZSBrZWVwaW5n
IGl0IHNtYWxsZXIgdGhhbiBwYWdlIHdpZHRoLgorICAgIFdlYlJlY3Qgd2lkZW5SZWN0V2l0aGlu
UGFnZUJvdW5kcyhjb25zdCBXZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBt
aW5pbXVtTWFyZ2luKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKICAgICB2
b2lkIHBvaW50ZXJMb2NrTW91c2VFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAppbmRleCBi
NTkwMDE4NjBkYTJhYjliYmYwYTJkODJiMjgyNmRjODBiY2RhZjJhLi4yMmRlYTIwN2Q2MTA5ZDE3
YmVkMDQ3NzkyZGIwODI0N2Y3OTc4NGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCkBAIC0zMCwxMyArMzAsMTggQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWVUZXN0SGVscGVycy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5j
bHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVk
ZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUg
IldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJG
cmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYlJh
bmdlLmgiCiAjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCiAjaW5jbHVkZSAiV2ViU2VhcmNo
YWJsZUZvcm1EYXRhLmgiCkBAIC0xNTEsNiArMTU2LDEyNyBAQCBURVNUX0YoV2ViRnJhbWVUZXN0
LCBDaHJvbWVQYWdlTm9KYXZhc2NyaXB0KQogICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZzo6bnBv
cywgY29udGVudC5maW5kKCJDbG9iYmVyZWQiKSk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCit2b2lkIHNldENvbXB1dGVkRm9udFNpemVGb3JUZXh0RGl2KFdlYlZpZXdJbXBsKiB3
ZWJWaWV3SW1wbCwgY29uc3QgY2hhciogZGl2SWQsIGZsb2F0IGNvbXB1dGVkU2l6ZSkKK3sKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJWaWV3SW1wbC0+bWFpbkZyYW1lSW1w
bCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIG5vZGUgPSBk
b2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQoZGl2SWQpOworICAgIEVYUEVDVF9UUlVFKG5vZGUpOwor
ICAgIEVYUEVDVF9FUSgxLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpKTsKKyAgICBXZWJDb3JlOjpO
b2RlKiBjaGlsZFRleHROb2RlID0gbm9kZS0+Y2hpbGROb2RlcygpLT5pdGVtKDApOworICAgIEVY
UEVDVF9UUlVFKGNoaWxkVGV4dE5vZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgY29uc3QgV2ViQ29y
ZTo6Rm9udERlc2NyaXB0aW9uJiBmZCA9IGNoaWxkVGV4dE5vZGUtPnJlbmRlclN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOworICAgIFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbiBuZXdGZCA9IGZk
OworICAgIG5ld0ZkLnNldENvbXB1dGVkU2l6ZShjb21wdXRlZFNpemUpOworICAgIFdlYkNvcmU6
OkZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gY2hpbGRUZXh0Tm9kZS0+cmVuZGVyU3R5bGUo
KS0+Zm9udCgpLmZvbnRTZWxlY3RvcigpOworICAgIGNoaWxkVGV4dE5vZGUtPnJlbmRlclN0eWxl
KCktPnNldEZvbnREZXNjcmlwdGlvbihuZXdGZCk7CisgICAgY2hpbGRUZXh0Tm9kZS0+cmVuZGVy
U3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworfQorCitURVNUX0YoV2ViRnJh
bWVUZXN0LCBEaXZBdXRvWm9vbVBhcmFtc1Rlc3QpCit7CisgICAgcmVnaXN0ZXJNb2NrZWRIdHRw
VVJMTG9hZCgiZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sIik7CisK
KyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwgPSBzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+
KEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdlYlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJnZXRf
c2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiLCB0cnVlKSk7CisgICAgaW50
IHBhZ2VXaWR0aCA9IDY0MDsKKyAgICBpbnQgcGFnZUhlaWdodCA9IDQ4MDsKKyAgICBpbnQgZGl2
UG9zWCA9IDIwMDsKKyAgICBpbnQgZGl2UG9zWSA9IDIwMDsKKyAgICBpbnQgZGl2V2lkdGggPSAy
MDA7CisgICAgaW50IGRpdkhlaWdodCA9IDE1MDsKKyAgICBXZWJSZWN0IGRvdWJsZVRhcFBvaW50
KDI1MCwgMjUwLCAwLCAwKTsKKyAgICB3ZWJWaWV3SW1wbC0+cmVzaXplKFdlYlNpemUocGFnZVdp
ZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgZmxvYXQgc2NhbGU7CisgICAgV2ViUG9pbnQgc2Nyb2xs
OworCisgICAgLy8gVGVzdCBmb3IgRG91YmxldGFwIHNjYWxpbmcKKworICAgIC8vIFRlc3RzIGZv
ciB6b29taW5nIGluIGFuZCBvdXQgd2l0aG91dCBjbGFtcGluZy4KKyAgICAvLyBTZXQgZGV2aWNl
IHNjYWxlIGFuZCBzY2FsZSBsaW1pdHMgc28gd2UgZG9udCBnZXQgY2xhbXBlZC4KKyAgICB3ZWJW
aWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoNCk7CisgICAgd2ViVmlld0ltcGwtPnNldFBh
Z2VTY2FsZUZhY3RvckxpbWl0cygwLCA0IC8gd2ViVmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9y
KCkpOworCisgICAgLy8gVGVzdCB6b29taW5nIGludG8gZGl2LgorICAgIHdlYlZpZXdJbXBsLT5j
b21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3SW1w
bDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBmbG9hdCBzY2FsZWREaXZXaWR0aCA9
IGRpdldpZHRoICogc2NhbGU7CisgICAgZmxvYXQgc2NhbGVkRGl2SGVpZ2h0ID0gZGl2SGVpZ2h0
ICogc2NhbGU7CisgICAgaW50IGhTY3JvbGwgPSAoKGRpdlBvc1ggKiBzY2FsZSkgLSAoKHBhZ2VX
aWR0aCAtIHNjYWxlZERpdldpZHRoKSAvIDIpKSAvIHNjYWxlOworICAgIGludCB2U2Nyb2xsID0g
KChkaXZQb3NZICogc2NhbGUpIC0gKChwYWdlSGVpZ2h0IC0gc2NhbGVkRGl2SGVpZ2h0KSAvIDIp
KSAvIHNjYWxlOworICAgIEVYUEVDVF9ORUFSKHBhZ2VXaWR0aCAvIGRpdldpZHRoLCBzY2FsZSwg
MC4xKTsKKyAgICBFWFBFQ1RfRVEoaFNjcm9sbCwgc2Nyb2xsLngpOworICAgIEVYUEVDVF9FUSh2
U2Nyb2xsLCBzY3JvbGwueSk7CisKKyAgICAvLyBUZXN0IHpvb20gb3V0IHRvIG92ZXJ2aWV3IHNj
YWxlLgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNp
emUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFj
dG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0
KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgc2NhbGUpOworICAgIEVYUEVDVF9FUShXZWJQb2ludCgw
LCAwKSwgc2Nyb2xsKTsKKworICAgIC8vIFRlc3RzIGZvciBjbGFtcGVkIHNjYWxpbmcuCisgICAg
Ly8gVGVzdCBjbGFtcCB0byBkZXZpY2Ugc2NhbGU6CisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Ny
b2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAv
IHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPnNldERl
dmljZVNjYWxlRmFjdG9yKDIuNSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNj
cm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNj
YWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLjUsIHNjYWxlKTsKKworICAgIC8v
IFRlc3QgY2xhbXAgdG8gbWluaW11bSBzY2FsZToKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3Jv
bGxBbmRTY2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8g
d2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFn
ZVNjYWxlRmFjdG9yTGltaXRzKDEuNSAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3Rvcigp
LCA0IC8gd2ViVmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBs
LT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3
SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS41
LCBzY2FsZSk7CisgICAgRVhQRUNUX0VRKFdlYlBvaW50KDAsIDApLCBzY3JvbGwpOworCisgICAg
Ly8gVGVzdCBjbGFtcCB0byBtYXhpbXVtIHNjYWxlOgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNj
cm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUg
LyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXRE
ZXZpY2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9y
TGltaXRzKDAsIDMgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgd2Vi
Vmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQs
IFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgzLCBzY2FsZSk7CisKKworICAgIC8vIFRlc3QgZm9yIE5vbi1kb3VibGV0YXAgc2NhbGlu
ZworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3IoMSwgV2ViUG9pbnQoMCwgMCkp
OworICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3ZWJWaWV3
SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CisgICAgLy8gVGVzdCB6b29taW5nIGludG8gZGl2LgorICAgIHdlYlZp
ZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KFdlYlJlY3QoMjUwLCAyNTAs
IDEwLCAxMCksIFdlYlZpZXdJbXBsOjpGaW5kSW5QYWdlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBF
WFBFQ1RfTkVBUihwYWdlV2lkdGggLyBkaXZXaWR0aCwgc2NhbGUsIDAuMSk7CisKKyAgICAvLyBG
b2xsb3dpbmcgYXJlIHRlc3RzIHdpdGggYm9vc3RlZC91bi1ib29zdGVkIHRleHQgbm9kZXM6Cisg
ICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDUpOworICAgIHdlYlZpZXdJbXBs
LT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgNyAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKKworICAgIC8vIFRlc3Qgd2l0aCBhIHNpbmdsZSB1bmJvb3N0ZWQgdGV4dCBu
b2RlOgorICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3IoMSwgV2ViUG9pbnQoMCwg
MCkpOworICAgIC8vIEp1c3QgZm9yIGZ1biwgd2Ugd2lsbCBib29zdCB0aGUgdGV4dCBub2RlIG5v
dCBpbnNpZGUgaGl0IHJlY3QuCisgICAgc2V0Q29tcHV0ZWRGb250U2l6ZUZvclRleHREaXYod2Vi
Vmlld0ltcGwsICJpbm5lcklubmVyRGl2IiwgMik7CisgICAgV2ViUmVjdCBoaXRSZWN0KGRpdlBv
c1gsIGRpdlBvc1ksIGRpdldpZHRoLCBkaXZIZWlnaHQpOworICAgIHdlYlZpZXdJbXBsLT5jb21w
dXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGhpdFJlY3QsIFdlYlZpZXdJbXBsOjpGaW5kSW5Q
YWdlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICAvLyBJbiBjYXNlIG9mIHVuYm9vc3RlZCB0ZXh0IG5v
ZGUgaW4gaGl0IHJlY3QsIHdlIHpvb20gaW4gdG8gZGV2aWNlIHNjYWxlLgorICAgIEVYUEVDVF9G
TE9BVF9FUSg1LCBzY2FsZSk7CisKKyAgICAvLyBUZXN0IHdpdGggc2luZ2xlIGJvb3N0ZWQgdGV4
dCBub2RlLgorICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3IoMSwgV2ViUG9pbnQo
MCwgMCkpOworICAgIHNldENvbXB1dGVkRm9udFNpemVGb3JUZXh0RGl2KHdlYlZpZXdJbXBsLCAi
aW5uZXJEaXYiLCAyKTsKKyAgICAvLyBKdXN0IGZvciBmdW4sIHdlIHdpbGwgYm9vc3QgdGhlIHRl
eHQgbm9kZSBub3QgaW5zaWRlIGhpdCByZWN0LgorICAgIHNldENvbXB1dGVkRm9udFNpemVGb3JU
ZXh0RGl2KHdlYlZpZXdJbXBsLCAiaW5uZXJJbm5lckRpdiIsIDIpOworICAgIHdlYlZpZXdJbXBs
LT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGhpdFJlY3QsIFdlYlZpZXdJbXBsOjpG
aW5kSW5QYWdlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfTkVBUihwYWdlV2lkdGggLyBk
aXZXaWR0aCwgc2NhbGUsIDAuMSk7CisKKyAgICAvLyBUZXN0IHdpdGggbW9yZSB0aGFuIG9uZSB0
ZXh0IG5vZGUgKG9ubHkgb25lIG9mIHRoZW0gaXMgYm9vc3RlZCkuCisgICAgd2ViVmlld0ltcGwt
PnNldFBhZ2VTY2FsZUZhY3RvcigxLCBXZWJQb2ludCgwLCAwKSk7CisgICAgLy8gRXhwYW5kIHRo
ZSBoaXQgcmVjdCB0byBpbmNsdWRlIHRoZSBzZWNvbmQgdGV4dCBub2RlLgorICAgIGhpdFJlY3Qu
aGVpZ2h0ID0gMzAwOworICAgIC8vIEhlcmUsIGlubmVyRGl2IGlzIGJvb3N0ZWQgYW5kIGlubmVy
SW5uZXJEaXYgaXMgbm90IGJvb3N0ZWQgYnV0IGJvdGggYXJlCisgICAgLy8gaW5zaWRlIHRoZSBo
aXRSZWN0LgorICAgIHNldENvbXB1dGVkRm9udFNpemVGb3JUZXh0RGl2KHdlYlZpZXdJbXBsLCAi
aW5uZXJEaXYiLCAyKTsKKyAgICBzZXRDb21wdXRlZEZvbnRTaXplRm9yVGV4dERpdih3ZWJWaWV3
SW1wbCwgImlubmVySW5uZXJEaXYiLCAxKTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxl
QW5kU2Nyb2xsRm9ySGl0UmVjdChoaXRSZWN0LCBXZWJWaWV3SW1wbDo6RmluZEluUGFnZSwgc2Nh
bGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX05FQVIocGFnZVdpZHRoIC8gZGl2V2lkdGgsIHNjYWxl
LCAwLjEpOworCit9CisjZW5kaWYKKwogY2xhc3MgVGVzdFJlbG9hZERvZXNudFJlZGlyZWN0V2Vi
RnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1
YWwgV2ViTmF2aWdhdGlvblBvbGljeSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0
b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9nZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTgxN2RjNDdkNTRiNTNiYTJjNDZhNWIwYTliYTc0OTlmY2EyNzBlYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9nZXRfc2NhbGVfZm9yX2F1
dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+CisgIDxi
b2R5PgorICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBwb3NpdGlvbjog
YWJzb2x1dGU7IGxlZnQ6IDBweDsgdG9wOiAwcHg7IHdpZHRoOiA2NDBweDsgaGVpZ2h0OiA0ODBw
eCI+CisgICAgICA8cD5Ub3AgRGl2PC9wPgorICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1j
b2xvcjogd2hpdGU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMjAwcHg7IHRvcDogMjAwcHg7
IHdpZHRoOiAyMDBweDsgaGVpZ2h0OiAxNTBweCI+CisgICAgICAgIDxwIGlkPSJpbm5lckRpdiI+
RGl2IHRvIHpvb20gdG88L3A+CisgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6
IHJlZDsgcG9zaXRpb246IGZpeGVkOyBsZWZ0OiAyMjBweDsgdG9wOiAzNTBweDsgd2lkdGg6IDE2
MHB4OyBoZWlnaHQ6IDQwcHgiPgorICAgICAgICAgIDxwIGlkPSJpbm5lcklubmVyRGl2Ij5EaXYg
Tk9UIHRvIHpvb20gdG88L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9k
aXY+CisgIDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126531</attachid>
            <date>2012-02-10 10:17:25 -0800</date>
            <delta_ts>2012-02-14 12:55:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120210131724.patch</filename>
            <type>text/plain</type>
            <size>19712</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDdhZDYzZjM3YmQwMzgxMDdlOTUwNTczNjI1NjdlMDFlZmVlZjViYzYuLjNjMzFiMzFiMDM4ZjVi
NzI2NGI3NzNlM2E1Y2VlNDFhODhlOWZkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTItMDItMTAgIFZhcnVuIEphaW4gIDx2YXJ1bmphaW5AZ29vZ2xl
LmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2QgdG8gV2ViVmlld0ltcGwgdG8g
ZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUgZXZlbnRzIG9uIHRvdWNoIGRl
dmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpmaW5kTW9zdEJvb3N0ZWRUZXh0Tm9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToK
KyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6c2V0Q29tcHV0ZWRGb250U2l6ZUZvclRleHREaXYpOgorICAgICAgICAo
V2ViS2l0OjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRv
X3pvb21faW50b19kaXZfdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0wOSAgVy4gSmFtZXMg
TWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3Igc3RhcnRpbmcgcGFnZS9zY2FsZSBhbmltYXRpb25zIG9uIENDIGltcGwg
dGhyZWFkIGZyb20gV2ViVmlld0ltcGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCAwZjM1Mzc5MDY4NDdmNDUyMjZmNDdjMWVlNjcwOTg3YTg5MTRiMTNh
Li45MzA1YmI2YjE3MmVjYWZmMDhmMWU4N2U4MTY0YjA2OGExOTQzNDZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xODksNiArMTg5LDE0IEBAIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRl
cygpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9CiAKKy8vIFRoZSBmb2xsb3dpbmcgY29uc3Rh
bnRzIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgYXV0b21hdGVkIHNjYWxpbmcgb2Ygd2VicGFnZXMK
Ky8vIChzdWNoIGFzIGR1ZSB0byBhIGRvdWJsZSB0YXAgZ2VzdHVyZSBvciBmaW5kIGluIHBhZ2Ug
ZXRjLikuIFRoZXNlIGFyZQorLy8gZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KK3N0YXRpYyBj
b25zdCBpbnQgdG91Y2hQb2ludFBhZGRpbmcgPSAzMjsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5T
Y2FsZURpZmZlcmVuY2UgPSAwLjAxOworc3RhdGljIGNvbnN0IGZsb2F0IGRvdWJsZVRhcFpvb21D
b250ZW50RGVmYXVsdE1hcmdpbiA9IDU7CitzdGF0aWMgY29uc3QgZmxvYXQgZG91YmxlVGFwWm9v
bUNvbnRlbnRNaW5pbXVtTWFyZ2luID0gMjsKKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODAzLDYgKzgxMSwxODEgQEAgYm9vbCBXZWJWaWV3SW1w
bDo6dG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50JiBldmVudCkKIH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorTm9kZSogV2ViVmlld0ltcGw6OmZpbmRNb3N0Qm9v
c3RlZFRleHROb2RlKGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+JiBub2RlTGlzdCwg
ZmxvYXQmIGdyZWF0ZXN0Qm9vc3RpbmdGYWN0b3IpCit7CisgICAgTm9kZSogbm9kZSA9IDA7Cisg
ICAgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQ
dHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlTGlzdC5iZWdpbigpOyBpdCAhPSBu
b2RlTGlzdC5lbmQoKTsgKytpdCkgeworICAgICAgICBOb2RlKiBjdXJyZW50ID0gaXQtPmdldCgp
OworICAgICAgICBpZiAoY3VycmVudC0+aXNUZXh0Tm9kZSgpICYmIGN1cnJlbnQtPnJlbmRlcmVy
KCkpIHsKKyAgICAgICAgICAgIGZsb2F0IGJvb3N0aW5nRmFjdG9yID0gY3VycmVudC0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkgLworICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgICAgICAgICBpZiAoYm9vc3RpbmdGYWN0b3IgPiBn
cmVhdGVzdEJvb3N0aW5nRmFjdG9yKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnQ7
CisgICAgICAgICAgICAgICAgZ3JlYXRlc3RCb29zdGluZ0ZhY3RvciA9IGJvb3N0aW5nRmFjdG9y
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBub2RlOworfQor
CitXZWJSZWN0IFdlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMoY29uc3QgV2ViUmVjdCYg
cmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBCb29zdGVkVGV4dFR5cGUmIHRleHRUeXBlKQor
eworICAgIGlmICghbWFpbkZyYW1lSW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViUmVjdCgpOwor
CisgICAgLy8gVXNlIHRoZSByZWN0LWJhc2VkIGhpdCB0ZXN0IHRvIGZpbmQgdGhlIG5vZGUuCisg
ICAgSW50UG9pbnQgcG9pbnQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLT53aW5kb3dU
b0NvbnRlbnRzKEludFBvaW50KHJlY3QueCwgcmVjdC55KSk7CisgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0
UmVzdWx0QXRQb2ludChwb2ludCwKKyAgICAgICAgICAgIGZhbHNlLCB6b29tVHlwZSA9PSBGaW5k
SW5QYWdlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHksCisgICAgICAgICAgICBJbnRTaXplKHJlY3Qud2lkdGgs
IHJlY3QuaGVpZ2h0KSk7CisKKyAgICAvLyBGaW5kIHRoZSBtb3N0IGJvb3N0ZWQgdGV4dCBub2Rl
IGludGVyc2VjdGVkIGJ5IHRoZSBoaXQgdGVzdCAoaWYgYW55KS4KKyAgICBmbG9hdCBncmVhdGVz
dEJvb3N0aW5nRmFjdG9yID0gMDsKKyAgICBOb2RlKiBub2RlID0gZmluZE1vc3RCb29zdGVkVGV4
dE5vZGUocmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSwgZ3JlYXRlc3RCb29zdGluZ0ZhY3Rv
cik7CisgICAgdGV4dFR5cGUgPSAobm9kZSAmJiBncmVhdGVzdEJvb3N0aW5nRmFjdG9yIDw9IDEp
PyBOb3JtYWxUZXh0IDogQm9vc3RlZFRleHQ7CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIG5v
ZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBGaW5kIHRoZSBibG9jayB0eXBlIG5vZGUg
YmFzZWQgb24gdGhlIGhpdCBub2RlLgorICAgIHdoaWxlIChub2RlICYmICghbm9kZS0+cmVuZGVy
ZXIoKSB8fCBub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKKyAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKKworICAgIC8vIFJldHVybiB0aGUgYm91bmRpbmcgYm94IGluIHRo
ZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgSW50
UmVjdCByZWN0ID0gbm9kZS0+Tm9kZTo6Z2V0UmVjdCgpOworICAgICAgICBGcmFtZSogZnJhbWUg
PSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICByZXR1cm4gZnJhbWUtPnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYlJlY3QoKTsK
K30KKworV2ViUmVjdCBXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhjb25z
dCBXZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBtaW5pbXVtTWFyZ2luKQor
eworICAgIFdlYlNpemUgbWF4U2l6ZTsKKyAgICBpZiAobWFpbkZyYW1lKCkpCisgICAgICAgIG1h
eFNpemUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCk7CisgICAgSW50U2l6ZSBzY3JvbGxP
ZmZzZXQ7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAgICBzY3JvbGxPZmZzZXQgPSBtYWlu
RnJhbWUoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaW50IGxlZnRNYXJnaW4gPSB0YXJnZXRNYXJn
aW47CisgICAgaW50IHJpZ2h0TWFyZ2luID0gdGFyZ2V0TWFyZ2luOworCisgICAgY29uc3QgaW50
IGFic29sdXRlU291cmNlWCA9IHNvdXJjZS54ICsgc2Nyb2xsT2Zmc2V0LndpZHRoKCk7CisgICAg
aWYgKGxlZnRNYXJnaW4gPiBhYnNvbHV0ZVNvdXJjZVgpIHsKKyAgICAgICAgbGVmdE1hcmdpbiA9
IGFic29sdXRlU291cmNlWDsKKyAgICAgICAgcmlnaHRNYXJnaW4gPSBtYXgobGVmdE1hcmdpbiwg
bWluaW11bU1hcmdpbik7CisgICAgfQorCisgICAgY29uc3QgaW50IG1heGltdW1SaWdodE1hcmdp
biA9IG1heFNpemUud2lkdGggLSAoc291cmNlLndpZHRoICsgYWJzb2x1dGVTb3VyY2VYKTsKKyAg
ICBpZiAocmlnaHRNYXJnaW4gPiBtYXhpbXVtUmlnaHRNYXJnaW4pIHsKKyAgICAgICAgcmlnaHRN
YXJnaW4gPSBtYXhpbXVtUmlnaHRNYXJnaW47CisgICAgICAgIGxlZnRNYXJnaW4gPSBtaW4obGVm
dE1hcmdpbiwgbWF4KHJpZ2h0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKSk7CisgICAgfQorCisgICAg
Y29uc3QgaW50IG5ld1dpZHRoID0gc291cmNlLndpZHRoICsgbGVmdE1hcmdpbiArIHJpZ2h0TWFy
Z2luOworICAgIGNvbnN0IGludCBuZXdYID0gc291cmNlLnggLSBsZWZ0TWFyZ2luOworCisgICAg
QVNTRVJUKG5ld1dpZHRoID49IDApOworICAgIEFTU0VSVChzY3JvbGxPZmZzZXQud2lkdGgoKSAr
IG5ld1ggKyBuZXdXaWR0aCA8PSBtYXhTaXplLndpZHRoKTsKKworICAgIHJldHVybiBXZWJSZWN0
KG5ld1gsIHNvdXJjZS55LCBuZXdXaWR0aCwgc291cmNlLmhlaWdodCk7Cit9CisKK3ZvaWQgV2Vi
Vmlld0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYg
aGl0UmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBz
Y3JvbGwpCit7CisgICAgc2NhbGUgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBzY3JvbGwueCA9
IHNjcm9sbC55ID0gMDsKKyAgICBXZWJSZWN0IHRhcmdldFJlY3QgPSBoaXRSZWN0OworICAgIGlm
ICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCA9IHRhcmdl
dFJlY3QuaGVpZ2h0ID0gdG91Y2hQb2ludFBhZGRpbmc7CisKKyAgICBCb29zdGVkVGV4dFR5cGUg
dGV4dFR5cGUgPSBCb29zdGVkVGV4dDsKKworICAgIFdlYlJlY3QgcmVjdCA9IGNvbXB1dGVCbG9j
a0JvdW5kcyh0YXJnZXRSZWN0LCB6b29tVHlwZSwgdGV4dFR5cGUpOworCisgICAgY29uc3QgZmxv
YXQgb3ZlcnZpZXdTY2FsZSA9IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvcjsKKyAgICBib29sIHNj
YWxlVW5jaGFuZ2VkID0gdHJ1ZTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAg
IC8vIFBhZ2VzIHNob3VsZCBiZSBhcyBsZWdpYmxlIGFzIG9uIGRlc2t0b3Agd2hlbiBhdCBkcGkg
c2NhbGUsIHNvIG5vCisgICAgICAgIC8vIG5lZWQgdG8gem9vbSBpbiBmdXJ0aGVyIHdoZW4gYXV0
b21hdGljYWxseSBkZXRlcm1pbmluZyB6b29tIGxldmVsCisgICAgICAgIC8vIChhZnRlciBkb3Vi
bGUgdGFwLCBmaW5kIGluIHBhZ2UsIGV0YyksIHRob3VnaCB0aGUgdXNlciBzaG91bGQgc3RpbGwK
KyAgICAgICAgLy8gYmUgYWxsb3dlZCB0byBtYW51YWxseSBwaW5jaCB6b29tIGluIGZ1cnRoZXIg
aWYgdGhleSBkZXNpcmUuCisgICAgICAgIC8vIEZJWE1FOiBJbmNsdWRlIGZvbnQgc2NhbGUgZmFj
dG9yIG9uY2UgaXRzIGFkZGVkIHRvIHNldHRpbmdzLgorICAgICAgICBjb25zdCBmbG9hdCBtYXhT
Y2FsZSA9IGRldmljZVNjYWxlRmFjdG9yKCkgKiAxIC8qIGZvbnQgc2NhbGUgZmFjdG9yICovOwor
CisgICAgICAgIGNvbnN0IGZsb2F0IGRlZmF1bHRNYXJnaW4gPSBkb3VibGVUYXBab29tQ29udGVu
dERlZmF1bHRNYXJnaW4gKiBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBjb25zdCBmbG9h
dCBtaW5pbXVtTWFyZ2luID0gZG91YmxlVGFwWm9vbUNvbnRlbnRNaW5pbXVtTWFyZ2luICogZGV2
aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgbWFyZ2lucyB0byBoYXZl
IHRoZSBzYW1lIHBoeXNpY2FsIHNpemUsIHdoaWNoIG1lYW5zIHdlCisgICAgICAgIC8vIG5lZWQg
dG8gZXhwcmVzcyB0aGVtIGluIHBvc3Qtc2NhbGUgc2l6ZS4gVG8gZG8gdGhhdCB3ZSdkIG5lZWQg
dG8ga25vdworICAgICAgICAvLyB0aGUgc2NhbGUgd2UncmUgc2NhbGluZyB0bywgYnV0IHRoYXQg
ZGVwZW5kcyBvbiB0aGUgbWFyZ2lucy4gSW5zdGVhZAorICAgICAgICAvLyB3ZSBleHByZXNzIHRo
ZW0gYXMgYSBmcmFjdGlvbiBvZiB0aGUgdGFyZ2V0IHJlY3RhbmdsZTogdGhpcyB3aWxsIGJlCisg
ICAgICAgIC8vIGNvcnJlY3QgaWYgd2UgZW5kIHVwIGZ1bGx5IHpvb21pbmcgdG8gaXQsIGFuZCB3
b24ndCBtYXR0ZXIgaWYgd2UKKyAgICAgICAgLy8gZG9uJ3QuCisgICAgICAgIHJlY3QgPSB3aWRl
blJlY3RXaXRoaW5QYWdlQm91bmRzKHJlY3QsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihkZWZhdWx0TWFyZ2luICogcmVjdC53aWR0aCAvIG1fc2l6ZS53aWR0aCksCisgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaW5pbXVtTWFyZ2luICogcmVjdC53aWR0aCAvIG1f
c2l6ZS53aWR0aCkpOworCisgICAgICAgIC8vIEZpdCBibG9jayB0byBzY3JlZW4sIHJlc3BlY3Rp
bmcgbGltaXRzLgorICAgICAgICBpZiAodGV4dFR5cGUgPT0gTm9ybWFsVGV4dCkKKyAgICAgICAg
ICAgIHNjYWxlID0gbWF4U2NhbGU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2NhbGUg
Kj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2l6ZS53aWR0aCkgLyByZWN0LndpZHRoOworICAgICAg
ICAgICAgc2NhbGUgPSBtaW4oc2NhbGUsIG1heFNjYWxlKTsKKyAgICAgICAgfQorICAgICAgICBz
Y2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMoc2NhbGUpOworCisgICAgICAgIHNj
YWxlVW5jaGFuZ2VkID0gZmFicyhwYWdlU2NhbGVGYWN0b3IoKSAtIHNjYWxlKSA8IG1pblNjYWxl
RGlmZmVyZW5jZTsKKyAgICB9CisKKyAgICBpZiAoem9vbVR5cGUgPT0gRG91YmxlVGFwKSB7Cisg
ICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBzY2FsZVVuY2hhbmdlZCkgeworICAgICAgICAg
ICAgLy8gWm9vbSBvdXQgdG8gb3ZlcnZpZXcgbW9kZS4KKyAgICAgICAgICAgIGlmIChvdmVydmll
d1NjYWxlKQorICAgICAgICAgICAgICAgIHNjYWxlID0gb3ZlcnZpZXdTY2FsZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocmVjdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gS2VlcCBjdXJyZW50IHNjYWxlIChubyBuZWVkIHRvIHNjcm9sbCBhcyB4LHkg
d2lsbCBub3JtYWxseSBhbHJlYWR5CisgICAgICAgIC8vIGJlIHZpc2libGUpLiBGSVhNRTogUmV2
aXNpdCB0aGlzIGlmIGl0IGlzbid0IGFsd2F5cyB0cnVlLgorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBhdXRvIHpvb20g
ZHVyaW5nIGZpbmQgaW4gcGFnZSwKKyAgICAvLyB0aGVuIGlmIHRoZSB1c2VyIG1hbnVhbGx5IHpv
b21zIGluIGl0J2QgYmUgbmljZSB0byBwcmVzZXJ2ZSB0aGUgcmVsYXRpdmUKKyAgICAvLyBpbmNy
ZWFzZSBpbiB6b29tIHRoZXkgY2F1c2VkIChpZiB0aGV5IHpvb20gb3V0IHRoZW4gaXQncyBvayB0
byB6b29tCisgICAgLy8gdGhlbSBiYWNrIGluIGFnYWluKS4gVGhpcyBpc24ndCBjb21wYXRpYmxl
IHdpdGggb3VyIGN1cnJlbnQgZG91YmxlLXRhcAorICAgIC8vIHpvb20gc3RyYXRlZ3kgKGZpdHRp
bmcgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHNjcmVlbikgdGhvdWdoLgorCisgICAgZmxv
YXQgc2NyZWVuSGVpZ2h0ID0gbV9zaXplLmhlaWdodCAvIHNjYWxlICogcGFnZVNjYWxlRmFjdG9y
KCk7CisgICAgZmxvYXQgc2NyZWVuV2lkdGggPSBtX3NpemUud2lkdGggLyBzY2FsZSAqIHBhZ2VT
Y2FsZUZhY3RvcigpOworCisgICAgLy8gU2Nyb2xsIHRvIHZlcnRpY2FsbHkgYWxpZ24gdGhlIGJs
b2NrLgorICAgIGlmIChyZWN0LmhlaWdodCA8IHNjcmVlbkhlaWdodCkgeworICAgICAgICAvLyBW
ZXJ0aWNhbGx5IGNlbnRlciBzaG9ydCBibG9ja3MuCisgICAgICAgIHJlY3QueSAtPSAwLjUgKiAo
c2NyZWVuSGVpZ2h0IC0gcmVjdC5oZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEVu
c3VyZSBwb3NpdGlvbiB3ZSdyZSB6b29taW5nIHRvICgrIHBhZGRpbmcpIGlzbid0IG9mZiB0aGUg
Ym90dG9tIG9mCisgICAgICAgIC8vIHRoZSBzY3JlZW4uCisgICAgICAgIHJlY3QueSA9IG1heDxm
bG9hdD4ocmVjdC55LCBoaXRSZWN0LnkgKyB0b3VjaFBvaW50UGFkZGluZyAtIHNjcmVlbkhlaWdo
dCk7CisgICAgfSAvLyBPdGhlcndpc2UgdG9wIGFsaWduIHRoZSBibG9jay4KKworICAgIC8vIERv
IHRoZSBzYW1lIHRoaW5nIGZvciBob3Jpem9udGFsIGFsaWdubWVudC4KKyAgICBpZiAocmVjdC53
aWR0aCA8IHNjcmVlbldpZHRoKQorICAgICAgICByZWN0LnggLT0gMC41ICogKHNjcmVlbldpZHRo
IC0gcmVjdC53aWR0aCk7CisgICAgZWxzZQorICAgICAgICByZWN0LnggPSBtYXg8ZmxvYXQ+KHJl
Y3QueCwgaGl0UmVjdC54ICsgdG91Y2hQb2ludFBhZGRpbmcgLSBzY3JlZW5XaWR0aCk7CisKKyAg
ICBzY3JvbGwueCA9IHJlY3QueDsKKyAgICBzY3JvbGwueSA9IHJlY3QueTsKK30KKyNlbmRpZgor
CiB2b2lkIFdlYlZpZXdJbXBsOjpudW1iZXJPZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5z
aWduZWQgbnVtYmVyT2ZXaGVlbEhhbmRsZXJzKQogewogICAgIG1faGF2ZVdoZWVsRXZlbnRIYW5k
bGVycyA9IG51bWJlck9mV2hlZWxIYW5kbGVycyA+IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCAxOTdmNTgyZTRlOWVkMGM1MmE2ODhhMTFmZmUxZTA1MzA5
ZmI0YzZmLi41NTZjM2E1MGMxYTc2ZGMwNGQzMTc2ZTNkMzk1ZTc4MDY2MWM3MjVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTk2LDYgKzk2LDExIEBAIGNs
YXNzIFdlYlRvdWNoRXZlbnQ7CiAKIGNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcs
IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVk
PFdlYlZpZXdJbXBsPiB7CiBwdWJsaWM6CisgICAgZW51bSBBdXRvWm9vbVR5cGUgeworICAgICAg
ICBEb3VibGVUYXAsCisgICAgICAgIEZpbmRJblBhZ2UsCisgICAgfTsKKwogICAgIC8vIFdlYldp
ZGdldCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgV2Vi
U2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CkBAIC00NTgsNiArNDYzLDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBhIHBsdWdpbiBjYW4gdXBkYXRlIGl0cyBvd24gem9vbSwgc2F5IGJlY2F1c2Ug
b2YgaXRzIG93biBVSS4KICAgICB2b2lkIGZ1bGxGcmFtZVBsdWdpblpvb21MZXZlbENoYW5nZWQo
ZG91YmxlIHpvb21MZXZlbCk7CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgdm9p
ZCBjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGNvbnN0IFdlYlJlY3QmIGhpdFJlY3Qs
IEF1dG9ab29tVHlwZSwgZmxvYXQmIHNjYWxlLCBXZWJQb2ludCYgc2Nyb2xsKTsKKyNlbmRpZgor
CiAgICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsKIAogICAgIHZv
aWQgZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kik7CkBAIC00ODgs
NiArNDk3LDExIEBAIHByaXZhdGU6CiAgICAgICBEcmFnT3ZlcgogICAgIH07CiAKKyAgICBlbnVt
IEJvb3N0ZWRUZXh0VHlwZSB7CisgICAgICAgIE5vcm1hbFRleHQsCisgICAgICAgIEJvb3N0ZWRU
ZXh0LAorICAgIH07CisKICAgICBXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50Kik7CiAgICAgdmly
dHVhbCB+V2ViVmlld0ltcGwoKTsKIApAQCAtNTI4LDYgKzU0MiwxNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQorICAgIFdlYkNvcmU6Ok5vZGUqIGZpbmRNb3N0Qm9vc3RlZFRleHROb2Rl
KGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpOb2RlPiA+JiwgZmxvYXQmIGdyZWF0
ZXN0Qm9vc3RpbmdGYWN0b3IpOworCisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9m
IHRoZSBibG9jayB0eXBlIG5vZGUgdG91Y2hlZCBieSB0aGUgV2ViUmVjdC4KKyAgICBXZWJSZWN0
IGNvbXB1dGVCbG9ja0JvdW5kcyhjb25zdCBXZWJSZWN0JiwgQXV0b1pvb21UeXBlLCBCb29zdGVk
VGV4dFR5cGUmKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbjogV2lkZW5zIHRoZSB3aWR0aCBv
ZiB8c291cmNlfCBieSB0aGUgc3BlY2lmaWVkIG1hcmdpbnMKKyAgICAvLyB3aGlsZSBrZWVwaW5n
IGl0IHNtYWxsZXIgdGhhbiBwYWdlIHdpZHRoLgorICAgIFdlYlJlY3Qgd2lkZW5SZWN0V2l0aGlu
UGFnZUJvdW5kcyhjb25zdCBXZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBt
aW5pbXVtTWFyZ2luKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKICAgICB2
b2lkIHBvaW50ZXJMb2NrTW91c2VFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAppbmRleCBi
NTkwMDE4NjBkYTJhYjliYmYwYTJkODJiMjgyNmRjODBiY2RhZjJhLi4zNWMxMTMzMTJkMDQzNzdi
Yjk2YzFkNmQyMzM4ZGZhM2VmNTA2M2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCkBAIC0zMCwxMyArMzAsMTggQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWVUZXN0SGVscGVycy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5j
bHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVk
ZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUg
IldlYkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJG
cmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYlJh
bmdlLmgiCiAjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCiAjaW5jbHVkZSAiV2ViU2VhcmNo
YWJsZUZvcm1EYXRhLmgiCkBAIC0xNTEsNiArMTU2LDEyNyBAQCBURVNUX0YoV2ViRnJhbWVUZXN0
LCBDaHJvbWVQYWdlTm9KYXZhc2NyaXB0KQogICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZzo6bnBv
cywgY29udGVudC5maW5kKCJDbG9iYmVyZWQiKSk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9F
VkVOVFMpCit2b2lkIHNldENvbXB1dGVkRm9udFNpemVGb3JUZXh0RGl2KFdlYlZpZXdJbXBsKiB3
ZWJWaWV3SW1wbCwgY29uc3QgY2hhciogZGl2SWQsIGZsb2F0IGNvbXB1dGVkU2l6ZSkKK3sKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJWaWV3SW1wbC0+bWFpbkZyYW1lSW1w
bCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIG5vZGUgPSBk
b2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQoZGl2SWQpOworICAgIEVYUEVDVF9UUlVFKG5vZGUpOwor
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMSksIG5vZGUtPmNoaWxkTm9kZUNv
dW50KCkpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNoaWxkVGV4dE5vZGUgPSBub2RlLT5jaGlsZE5v
ZGVzKCktPml0ZW0oMCk7CisgICAgRVhQRUNUX1RSVUUoY2hpbGRUZXh0Tm9kZS0+aXNUZXh0Tm9k
ZSgpKTsKKyAgICBjb25zdCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24mIGZkID0gY2hpbGRUZXh0
Tm9kZS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgV2ViQ29yZTo6Rm9u
dERlc2NyaXB0aW9uIG5ld0ZkID0gZmQ7CisgICAgbmV3RmQuc2V0Q29tcHV0ZWRTaXplKGNvbXB1
dGVkU2l6ZSk7CisgICAgV2ViQ29yZTo6Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSBjaGls
ZFRleHROb2RlLT5yZW5kZXJTdHlsZSgpLT5mb250KCkuZm9udFNlbGVjdG9yKCk7CisgICAgY2hp
bGRUZXh0Tm9kZS0+cmVuZGVyU3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZkKTsKKyAg
ICBjaGlsZFRleHROb2RlLT5yZW5kZXJTdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rv
cik7Cit9CisKK1RFU1RfRihXZWJGcmFtZVRlc3QsIERpdkF1dG9ab29tUGFyYW1zVGVzdCkKK3sK
KyAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJnZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9p
bnRvX2Rpdl90ZXN0Lmh0bWwiKTsKKworICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCA9IHN0
YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4oRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0Fu
ZExvYWQobV9iYXNlVVJMICsgImdldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3Qu
aHRtbCIsIHRydWUpKTsKKyAgICBpbnQgcGFnZVdpZHRoID0gNjQwOworICAgIGludCBwYWdlSGVp
Z2h0ID0gNDgwOworICAgIGludCBkaXZQb3NYID0gMjAwOworICAgIGludCBkaXZQb3NZID0gMjAw
OworICAgIGludCBkaXZXaWR0aCA9IDIwMDsKKyAgICBpbnQgZGl2SGVpZ2h0ID0gMTUwOworICAg
IFdlYlJlY3QgZG91YmxlVGFwUG9pbnQoMjUwLCAyNTAsIDAsIDApOworICAgIHdlYlZpZXdJbXBs
LT5yZXNpemUoV2ViU2l6ZShwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsKKyAgICBmbG9hdCBzY2Fs
ZTsKKyAgICBXZWJQb2ludCBzY3JvbGw7CisKKyAgICAvLyBUZXN0IGZvciBEb3VibGV0YXAgc2Nh
bGluZworCisgICAgLy8gVGVzdHMgZm9yIHpvb21pbmcgaW4gYW5kIG91dCB3aXRob3V0IGNsYW1w
aW5nLgorICAgIC8vIFNldCBkZXZpY2Ugc2NhbGUgYW5kIHNjYWxlIGxpbWl0cyBzbyB3ZSBkb250
IGdldCBjbGFtcGVkLgorICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsK
KyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDQgLyB3ZWJWaWV3
SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAgICAvLyBUZXN0IHpvb21pbmcgaW50byBk
aXYuCisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91
YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAg
IGZsb2F0IHNjYWxlZERpdldpZHRoID0gZGl2V2lkdGggKiBzY2FsZTsKKyAgICBmbG9hdCBzY2Fs
ZWREaXZIZWlnaHQgPSBkaXZIZWlnaHQgKiBzY2FsZTsKKyAgICBpbnQgaFNjcm9sbCA9ICgoZGl2
UG9zWCAqIHNjYWxlKSAtICgocGFnZVdpZHRoIC0gc2NhbGVkRGl2V2lkdGgpIC8gMikpIC8gc2Nh
bGU7CisgICAgaW50IHZTY3JvbGwgPSAoKGRpdlBvc1kgKiBzY2FsZSkgLSAoKHBhZ2VIZWlnaHQg
LSBzY2FsZWREaXZIZWlnaHQpIC8gMikpIC8gc2NhbGU7CisgICAgRVhQRUNUX05FQVIocGFnZVdp
ZHRoIC8gZGl2V2lkdGgsIHNjYWxlLCAwLjEpOworICAgIEVYUEVDVF9FUShoU2Nyb2xsLCBzY3Jv
bGwueCk7CisgICAgRVhQRUNUX0VRKHZTY3JvbGwsIHNjcm9sbC55KTsKKworICAgIC8vIFRlc3Qg
em9vbSBvdXQgdG8gb3ZlcnZpZXcgc2NhbGUuCisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xs
QW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdl
YlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVT
Y2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3Vi
bGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzY2FsZSk7Cisg
ICAgRVhQRUNUX0VRKFdlYlBvaW50KDAsIDApLCBzY3JvbGwpOworCisgICAgLy8gVGVzdHMgZm9y
IGNsYW1wZWQgc2NhbGluZy4KKyAgICAvLyBUZXN0IGNsYW1wIHRvIGRldmljZSBzY2FsZToKKyAg
ICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9s
bC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsK
KyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoMi41KTsKKyAgICB3ZWJWaWV3
SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2Vi
Vmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDIuNSwgc2NhbGUpOworCisgICAgLy8gVGVzdCBjbGFtcCB0byBtaW5pbXVtIHNjYWxlOgorICAg
IHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xs
LngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOwor
ICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMS41IC8gd2ViVmlld0lt
cGwtPmRldmljZVNjYWxlRmFjdG9yKCksIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3Qo
ZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLjUsIHNjYWxlKTsKKyAgICBFWFBFQ1RfRVEoV2ViUG9pbnQo
MCwgMCksIHNjcm9sbCk7CisKKyAgICAvLyBUZXN0IGNsYW1wIHRvIG1heGltdW0gc2NhbGU6Cisg
ICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3Jv
bGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7
CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIHdlYlZpZXdJ
bXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgMyAvIHdlYlZpZXdJbXBsLT5kZXZpY2VT
Y2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9y
SGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNj
cm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIHNjYWxlKTsKKworCisgICAgLy8gVGVzdCBm
b3IgTm9uLWRvdWJsZXRhcCBzY2FsaW5nCisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZh
Y3RvcigxLCBXZWJQb2ludCgwLCAwKSk7CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxl
RmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwg
NCAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAvLyBUZXN0IHpvb21p
bmcgaW50byBkaXYuCisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhp
dFJlY3QoV2ViUmVjdCgyNTAsIDI1MCwgMTAsIDEwKSwgV2ViVmlld0ltcGw6OkZpbmRJblBhZ2Us
IHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9ORUFSKHBhZ2VXaWR0aCAvIGRpdldpZHRoLCBz
Y2FsZSwgMC4xKTsKKworICAgIC8vIEZvbGxvd2luZyBhcmUgdGVzdHMgd2l0aCBib29zdGVkL3Vu
LWJvb3N0ZWQgdGV4dCBub2RlczoKKyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0
b3IoNSk7CisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cygwLCA3IC8g
d2ViVmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9yKCkpOworCisgICAgLy8gVGVzdCB3aXRoIGEg
c2luZ2xlIHVuYm9vc3RlZCB0ZXh0IG5vZGU6CisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VTY2Fs
ZUZhY3RvcigxLCBXZWJQb2ludCgwLCAwKSk7CisgICAgLy8gSnVzdCBmb3IgZnVuLCB3ZSB3aWxs
IGJvb3N0IHRoZSB0ZXh0IG5vZGUgbm90IGluc2lkZSBoaXQgcmVjdC4KKyAgICBzZXRDb21wdXRl
ZEZvbnRTaXplRm9yVGV4dERpdih3ZWJWaWV3SW1wbCwgImlubmVySW5uZXJEaXYiLCAyKTsKKyAg
ICBXZWJSZWN0IGhpdFJlY3QoZGl2UG9zWCwgZGl2UG9zWSwgZGl2V2lkdGgsIGRpdkhlaWdodCk7
CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoaGl0UmVj
dCwgV2ViVmlld0ltcGw6OkZpbmRJblBhZ2UsIHNjYWxlLCBzY3JvbGwpOworICAgIC8vIEluIGNh
c2Ugb2YgdW5ib29zdGVkIHRleHQgbm9kZSBpbiBoaXQgcmVjdCwgd2Ugem9vbSBpbiB0byBkZXZp
Y2Ugc2NhbGUuCisgICAgRVhQRUNUX0ZMT0FUX0VRKDUsIHNjYWxlKTsKKworICAgIC8vIFRlc3Qg
d2l0aCBzaW5nbGUgYm9vc3RlZCB0ZXh0IG5vZGUuCisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VT
Y2FsZUZhY3RvcigxLCBXZWJQb2ludCgwLCAwKSk7CisgICAgc2V0Q29tcHV0ZWRGb250U2l6ZUZv
clRleHREaXYod2ViVmlld0ltcGwsICJpbm5lckRpdiIsIDIpOworICAgIC8vIEp1c3QgZm9yIGZ1
biwgd2Ugd2lsbCBib29zdCB0aGUgdGV4dCBub2RlIG5vdCBpbnNpZGUgaGl0IHJlY3QuCisgICAg
c2V0Q29tcHV0ZWRGb250U2l6ZUZvclRleHREaXYod2ViVmlld0ltcGwsICJpbm5lcklubmVyRGl2
IiwgMik7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3Qo
aGl0UmVjdCwgV2ViVmlld0ltcGw6OkZpbmRJblBhZ2UsIHNjYWxlLCBzY3JvbGwpOworICAgIEVY
UEVDVF9ORUFSKHBhZ2VXaWR0aCAvIGRpdldpZHRoLCBzY2FsZSwgMC4xKTsKKworICAgIC8vIFRl
c3Qgd2l0aCBtb3JlIHRoYW4gb25lIHRleHQgbm9kZSAob25seSBvbmUgb2YgdGhlbSBpcyBib29z
dGVkKS4KKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yKDEsIFdlYlBvaW50KDAs
IDApKTsKKyAgICAvLyBFeHBhbmQgdGhlIGhpdCByZWN0IHRvIGluY2x1ZGUgdGhlIHNlY29uZCB0
ZXh0IG5vZGUuCisgICAgaGl0UmVjdC5oZWlnaHQgPSAzMDA7CisgICAgLy8gSGVyZSwgaW5uZXJE
aXYgaXMgYm9vc3RlZCBhbmQgaW5uZXJJbm5lckRpdiBpcyBub3QgYm9vc3RlZCBidXQgYm90aCBh
cmUKKyAgICAvLyBpbnNpZGUgdGhlIGhpdFJlY3QuCisgICAgc2V0Q29tcHV0ZWRGb250U2l6ZUZv
clRleHREaXYod2ViVmlld0ltcGwsICJpbm5lckRpdiIsIDIpOworICAgIHNldENvbXB1dGVkRm9u
dFNpemVGb3JUZXh0RGl2KHdlYlZpZXdJbXBsLCAiaW5uZXJJbm5lckRpdiIsIDEpOworICAgIHdl
YlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGhpdFJlY3QsIFdlYlZp
ZXdJbXBsOjpGaW5kSW5QYWdlLCBzY2FsZSwgc2Nyb2xsKTsKKyAgICBFWFBFQ1RfTkVBUihwYWdl
V2lkdGggLyBkaXZXaWR0aCwgc2NhbGUsIDAuMSk7CisKK30KKyNlbmRpZgorCiBjbGFzcyBUZXN0
UmVsb2FkRG9lc250UmVkaXJlY3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJOYXZpZ2F0aW9uUG9saWN5IGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb24oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9f
ZGl2X3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODE3ZGM0N2Q1NGI1M2JhMmM0NmE1YjBhOWJhNzQ5
OWZjYTI3MGVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8aHRtbD4KKyAgPGJvZHk+CisgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1j
b2xvcjogZ3JlZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMHB4OyB0b3A6IDBweDsgd2lk
dGg6IDY0MHB4OyBoZWlnaHQ6IDQ4MHB4Ij4KKyAgICAgIDxwPlRvcCBEaXY8L3A+CisgICAgICA8
ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcG9zaXRpb246IGFic29sdXRlOyBs
ZWZ0OiAyMDBweDsgdG9wOiAyMDBweDsgd2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDE1MHB4Ij4KKyAg
ICAgICAgPHAgaWQ9ImlubmVyRGl2Ij5EaXYgdG8gem9vbSB0bzwvcD4KKyAgICAgICAgPGRpdiBz
dHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmVkOyBwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDIyMHB4
OyB0b3A6IDM1MHB4OyB3aWR0aDogMTYwcHg7IGhlaWdodDogNDBweCI+CisgICAgICAgICAgPHAg
aWQ9ImlubmVySW5uZXJEaXYiPkRpdiBOT1QgdG8gem9vbSB0bzwvcD4KKyAgICAgICAgPC9kaXY+
CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127023</attachid>
            <date>2012-02-14 12:55:06 -0800</date>
            <delta_ts>2012-02-16 21:34:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72909-20120214155505.patch</filename>
            <type>text/plain</type>
            <size>14756</size>
            <attacher name="Varun Jain">varunjain</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGM2ZWU4MTBjZmY5MWY4ZDU4ZTVhYTg0NGUwMzNkMGVmZGNiNjQ0M2QuLjgwNWY0NmMxZWJjZDUy
ZDI3N2M0YTNhMDQxYTc4OTY4N2E0MGJiNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMDItMTQgIFZhcnVuIEphaW4gIDx2YXJ1bmphaW5AZ29vZ2xl
LmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBtZXRob2QgdG8gV2ViVmlld0ltcGwgdG8g
ZXh0cmFjdCB6b29tL3Njcm9sbCBwYXJhbXMgZm9yIGdlc3R1cmUgZXZlbnRzIG9uIHRvdWNoIGRl
dmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoc3RkKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlQmxvY2tCb3VuZHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToK
KyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2dldF9zY2FsZV9m
b3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMTQgIFZz
ZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTWFrZSBTY3JpcHRzTmF2aWdhdG9yIGRlZmF1bHQgZmlsZSBzZWxlY3Rvci4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1NWI5YTFkYWNmNGE5
OWQyZTc3OGU3OTcyZGQ0MGMzYzA5ZjJhODk2Li42MWEyYjUyMjBlMGUzYTdlZGJkNzRjOWU3YzQ0
NzYwNGExYzE1ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCkBAIC0xODgsNiArMTg4LDE0IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdl
dENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9
CiAKKy8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgYXV0
b21hdGVkIHNjYWxpbmcgb2Ygd2VicGFnZXMKKy8vIChzdWNoIGFzIGR1ZSB0byBhIGRvdWJsZSB0
YXAgZ2VzdHVyZSBvciBmaW5kIGluIHBhZ2UgZXRjLikuIFRoZXNlIGFyZQorLy8gZXhwZXJpbWVu
dGFsbHkgZGV0ZXJtaW5lZC4KK3N0YXRpYyBjb25zdCBpbnQgdG91Y2hQb2ludFBhZGRpbmcgPSAz
MjsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TY2FsZURpZmZlcmVuY2UgPSAwLjAxOworc3RhdGlj
IGNvbnN0IGZsb2F0IGRvdWJsZVRhcFpvb21Db250ZW50RGVmYXVsdE1hcmdpbiA9IDU7CitzdGF0
aWMgY29uc3QgZmxvYXQgZG91YmxlVGFwWm9vbUNvbnRlbnRNaW5pbXVtTWFyZ2luID0gMjsKKwog
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODAxLDYg
KzgwOSwxNDkgQEAgYm9vbCBXZWJWaWV3SW1wbDo6dG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2
ZW50JiBldmVudCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorV2Vi
UmVjdCBXZWJWaWV3SW1wbDo6Y29tcHV0ZUJsb2NrQm91bmRzKGNvbnN0IFdlYlJlY3QmIHJlY3Qs
IEF1dG9ab29tVHlwZSB6b29tVHlwZSkKK3sKKyAgICBpZiAoIW1haW5GcmFtZUltcGwoKSkKKyAg
ICAgICAgcmV0dXJuIFdlYlJlY3QoKTsKKworICAgIC8vIFVzZSB0aGUgcmVjdC1iYXNlZCBoaXQg
dGVzdCB0byBmaW5kIHRoZSBub2RlLgorICAgIEludFBvaW50IHBvaW50ID0gbWFpbkZyYW1lSW1w
bCgpLT5mcmFtZVZpZXcoKS0+d2luZG93VG9Db250ZW50cyhJbnRQb2ludChyZWN0LngsIHJlY3Qu
eSkpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsCisgICAgICAgICAg
ICBmYWxzZSwgem9vbVR5cGUgPT0gRmluZEluUGFnZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LAorICAgICAg
ICAgICAgSW50U2l6ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCkpOworCisgICAgTm9kZSogbm9k
ZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybiBXZWJSZWN0KCk7CisKKyAgICAvLyBGaW5kIHRoZSBibG9jayB0eXBlIG5vZGUgYmFz
ZWQgb24gdGhlIGhpdCBub2RlLgorICAgIHdoaWxlIChub2RlICYmICghbm9kZS0+cmVuZGVyZXIo
KSB8fCBub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKKyAgICAgICAgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKKworICAgIC8vIFJldHVybiB0aGUgYm91bmRpbmcgYm94IGluIHRoZSB3
aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgSW50UmVj
dCByZWN0ID0gbm9kZS0+Tm9kZTo6Z2V0UmVjdCgpOworICAgICAgICBGcmFtZSogZnJhbWUgPSBu
b2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYlJlY3QoKTsKK30K
KworV2ViUmVjdCBXZWJWaWV3SW1wbDo6d2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhjb25zdCBX
ZWJSZWN0JiBzb3VyY2UsIGludCB0YXJnZXRNYXJnaW4sIGludCBtaW5pbXVtTWFyZ2luKQorewor
ICAgIFdlYlNpemUgbWF4U2l6ZTsKKyAgICBpZiAobWFpbkZyYW1lKCkpCisgICAgICAgIG1heFNp
emUgPSBtYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCk7CisgICAgSW50U2l6ZSBzY3JvbGxPZmZz
ZXQ7CisgICAgaWYgKG1haW5GcmFtZSgpKQorICAgICAgICBzY3JvbGxPZmZzZXQgPSBtYWluRnJh
bWUoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgaW50IGxlZnRNYXJnaW4gPSB0YXJnZXRNYXJnaW47
CisgICAgaW50IHJpZ2h0TWFyZ2luID0gdGFyZ2V0TWFyZ2luOworCisgICAgY29uc3QgaW50IGFi
c29sdXRlU291cmNlWCA9IHNvdXJjZS54ICsgc2Nyb2xsT2Zmc2V0LndpZHRoKCk7CisgICAgaWYg
KGxlZnRNYXJnaW4gPiBhYnNvbHV0ZVNvdXJjZVgpIHsKKyAgICAgICAgbGVmdE1hcmdpbiA9IGFi
c29sdXRlU291cmNlWDsKKyAgICAgICAgcmlnaHRNYXJnaW4gPSBtYXgobGVmdE1hcmdpbiwgbWlu
aW11bU1hcmdpbik7CisgICAgfQorCisgICAgY29uc3QgaW50IG1heGltdW1SaWdodE1hcmdpbiA9
IG1heFNpemUud2lkdGggLSAoc291cmNlLndpZHRoICsgYWJzb2x1dGVTb3VyY2VYKTsKKyAgICBp
ZiAocmlnaHRNYXJnaW4gPiBtYXhpbXVtUmlnaHRNYXJnaW4pIHsKKyAgICAgICAgcmlnaHRNYXJn
aW4gPSBtYXhpbXVtUmlnaHRNYXJnaW47CisgICAgICAgIGxlZnRNYXJnaW4gPSBtaW4obGVmdE1h
cmdpbiwgbWF4KHJpZ2h0TWFyZ2luLCBtaW5pbXVtTWFyZ2luKSk7CisgICAgfQorCisgICAgY29u
c3QgaW50IG5ld1dpZHRoID0gc291cmNlLndpZHRoICsgbGVmdE1hcmdpbiArIHJpZ2h0TWFyZ2lu
OworICAgIGNvbnN0IGludCBuZXdYID0gc291cmNlLnggLSBsZWZ0TWFyZ2luOworCisgICAgQVNT
RVJUKG5ld1dpZHRoID49IDApOworICAgIEFTU0VSVChzY3JvbGxPZmZzZXQud2lkdGgoKSArIG5l
d1ggKyBuZXdXaWR0aCA8PSBtYXhTaXplLndpZHRoKTsKKworICAgIHJldHVybiBXZWJSZWN0KG5l
d1gsIHNvdXJjZS55LCBuZXdXaWR0aCwgc291cmNlLmhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmll
d0ltcGw6OmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoY29uc3QgV2ViUmVjdCYgaGl0
UmVjdCwgQXV0b1pvb21UeXBlIHpvb21UeXBlLCBmbG9hdCYgc2NhbGUsIFdlYlBvaW50JiBzY3Jv
bGwpCit7CisgICAgc2NhbGUgPSBwYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBzY3JvbGwueCA9IHNj
cm9sbC55ID0gMDsKKyAgICBXZWJSZWN0IHRhcmdldFJlY3QgPSBoaXRSZWN0OworICAgIGlmICh0
YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCA9IHRhcmdldFJl
Y3QuaGVpZ2h0ID0gdG91Y2hQb2ludFBhZGRpbmc7CisKKyAgICBXZWJSZWN0IHJlY3QgPSBjb21w
dXRlQmxvY2tCb3VuZHModGFyZ2V0UmVjdCwgem9vbVR5cGUpOworCisgICAgY29uc3QgZmxvYXQg
b3ZlcnZpZXdTY2FsZSA9IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvcjsKKyAgICBib29sIHNjYWxl
VW5jaGFuZ2VkID0gdHJ1ZTsKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8v
IFBhZ2VzIHNob3VsZCBiZSBhcyBsZWdpYmxlIGFzIG9uIGRlc2t0b3Agd2hlbiBhdCBkcGkgc2Nh
bGUsIHNvIG5vCisgICAgICAgIC8vIG5lZWQgdG8gem9vbSBpbiBmdXJ0aGVyIHdoZW4gYXV0b21h
dGljYWxseSBkZXRlcm1pbmluZyB6b29tIGxldmVsCisgICAgICAgIC8vIChhZnRlciBkb3VibGUg
dGFwLCBmaW5kIGluIHBhZ2UsIGV0YyksIHRob3VnaCB0aGUgdXNlciBzaG91bGQgc3RpbGwKKyAg
ICAgICAgLy8gYmUgYWxsb3dlZCB0byBtYW51YWxseSBwaW5jaCB6b29tIGluIGZ1cnRoZXIgaWYg
dGhleSBkZXNpcmUuCisgICAgICAgIGNvbnN0IGZsb2F0IG1heFNjYWxlID0gZGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgICAgICBjb25zdCBmbG9hdCBkZWZhdWx0TWFyZ2luID0gZG91YmxlVGFw
Wm9vbUNvbnRlbnREZWZhdWx0TWFyZ2luICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAg
Y29uc3QgZmxvYXQgbWluaW11bU1hcmdpbiA9IGRvdWJsZVRhcFpvb21Db250ZW50TWluaW11bU1h
cmdpbiAqIGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIC8vIFdlIHdhbnQgdGhlIG1hcmdp
bnMgdG8gaGF2ZSB0aGUgc2FtZSBwaHlzaWNhbCBzaXplLCB3aGljaCBtZWFucyB3ZQorICAgICAg
ICAvLyBuZWVkIHRvIGV4cHJlc3MgdGhlbSBpbiBwb3N0LXNjYWxlIHNpemUuIFRvIGRvIHRoYXQg
d2UnZCBuZWVkIHRvIGtub3cKKyAgICAgICAgLy8gdGhlIHNjYWxlIHdlJ3JlIHNjYWxpbmcgdG8s
IGJ1dCB0aGF0IGRlcGVuZHMgb24gdGhlIG1hcmdpbnMuIEluc3RlYWQKKyAgICAgICAgLy8gd2Ug
ZXhwcmVzcyB0aGVtIGFzIGEgZnJhY3Rpb24gb2YgdGhlIHRhcmdldCByZWN0YW5nbGU6IHRoaXMg
d2lsbCBiZQorICAgICAgICAvLyBjb3JyZWN0IGlmIHdlIGVuZCB1cCBmdWxseSB6b29taW5nIHRv
IGl0LCBhbmQgd29uJ3QgbWF0dGVyIGlmIHdlCisgICAgICAgIC8vIGRvbid0LgorICAgICAgICBy
ZWN0ID0gd2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhyZWN0LAorICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludD4oZGVmYXVsdE1hcmdpbiAqIHJlY3Qud2lkdGggLyBtX3NpemUud2lkdGgp
LAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obWluaW11bU1hcmdpbiAqIHJlY3Qu
d2lkdGggLyBtX3NpemUud2lkdGgpKTsKKworICAgICAgICAvLyBGaXQgYmxvY2sgdG8gc2NyZWVu
LCByZXNwZWN0aW5nIGxpbWl0cy4KKyAgICAgICAgc2NhbGUgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fc2l6ZS53aWR0aCkgLyByZWN0LndpZHRoOworICAgICAgICBzY2FsZSA9IG1pbihzY2FsZSwg
bWF4U2NhbGUpOworICAgICAgICBzY2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMo
c2NhbGUpOworCisgICAgICAgIHNjYWxlVW5jaGFuZ2VkID0gZmFicyhwYWdlU2NhbGVGYWN0b3Io
KSAtIHNjYWxlKSA8IG1pblNjYWxlRGlmZmVyZW5jZTsKKyAgICB9CisKKyAgICBpZiAoem9vbVR5
cGUgPT0gRG91YmxlVGFwKSB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBzY2FsZVVu
Y2hhbmdlZCkgeworICAgICAgICAgICAgLy8gWm9vbSBvdXQgdG8gb3ZlcnZpZXcgbW9kZS4KKyAg
ICAgICAgICAgIGlmIChvdmVydmlld1NjYWxlKQorICAgICAgICAgICAgICAgIHNjYWxlID0gb3Zl
cnZpZXdTY2FsZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAocmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gS2VlcCBjdXJyZW50IHNjYWxlIChubyBu
ZWVkIHRvIHNjcm9sbCBhcyB4LHkgd2lsbCBub3JtYWxseSBhbHJlYWR5CisgICAgICAgIC8vIGJl
IHZpc2libGUpLiBGSVhNRTogUmV2aXNpdCB0aGlzIGlmIGl0IGlzbid0IGFsd2F5cyB0cnVlLgor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYmVpbmcg
Y2FsbGVkIGZvciBhdXRvIHpvb20gZHVyaW5nIGZpbmQgaW4gcGFnZSwKKyAgICAvLyB0aGVuIGlm
IHRoZSB1c2VyIG1hbnVhbGx5IHpvb21zIGluIGl0J2QgYmUgbmljZSB0byBwcmVzZXJ2ZSB0aGUg
cmVsYXRpdmUKKyAgICAvLyBpbmNyZWFzZSBpbiB6b29tIHRoZXkgY2F1c2VkIChpZiB0aGV5IHpv
b20gb3V0IHRoZW4gaXQncyBvayB0byB6b29tCisgICAgLy8gdGhlbSBiYWNrIGluIGFnYWluKS4g
VGhpcyBpc24ndCBjb21wYXRpYmxlIHdpdGggb3VyIGN1cnJlbnQgZG91YmxlLXRhcAorICAgIC8v
IHpvb20gc3RyYXRlZ3kgKGZpdHRpbmcgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHNjcmVl
bikgdGhvdWdoLgorCisgICAgZmxvYXQgc2NyZWVuSGVpZ2h0ID0gbV9zaXplLmhlaWdodCAvIHNj
YWxlICogcGFnZVNjYWxlRmFjdG9yKCk7CisgICAgZmxvYXQgc2NyZWVuV2lkdGggPSBtX3NpemUu
d2lkdGggLyBzY2FsZSAqIHBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgLy8gU2Nyb2xsIHRvIHZl
cnRpY2FsbHkgYWxpZ24gdGhlIGJsb2NrLgorICAgIGlmIChyZWN0LmhlaWdodCA8IHNjcmVlbkhl
aWdodCkgeworICAgICAgICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBzaG9ydCBibG9ja3MuCisgICAg
ICAgIHJlY3QueSAtPSAwLjUgKiAoc2NyZWVuSGVpZ2h0IC0gcmVjdC5oZWlnaHQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEVuc3VyZSBwb3NpdGlvbiB3ZSdyZSB6b29taW5nIHRvICgrIHBh
ZGRpbmcpIGlzbid0IG9mZiB0aGUgYm90dG9tIG9mCisgICAgICAgIC8vIHRoZSBzY3JlZW4uCisg
ICAgICAgIHJlY3QueSA9IG1heDxmbG9hdD4ocmVjdC55LCBoaXRSZWN0LnkgKyB0b3VjaFBvaW50
UGFkZGluZyAtIHNjcmVlbkhlaWdodCk7CisgICAgfSAvLyBPdGhlcndpc2UgdG9wIGFsaWduIHRo
ZSBibG9jay4KKworICAgIC8vIERvIHRoZSBzYW1lIHRoaW5nIGZvciBob3Jpem9udGFsIGFsaWdu
bWVudC4KKyAgICBpZiAocmVjdC53aWR0aCA8IHNjcmVlbldpZHRoKQorICAgICAgICByZWN0Lngg
LT0gMC41ICogKHNjcmVlbldpZHRoIC0gcmVjdC53aWR0aCk7CisgICAgZWxzZQorICAgICAgICBy
ZWN0LnggPSBtYXg8ZmxvYXQ+KHJlY3QueCwgaGl0UmVjdC54ICsgdG91Y2hQb2ludFBhZGRpbmcg
LSBzY3JlZW5XaWR0aCk7CisKKyAgICBzY3JvbGwueCA9IHJlY3QueDsKKyAgICBzY3JvbGwueSA9
IHJlY3QueTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlZpZXdJbXBsOjpudW1iZXJPZldoZWVsRXZl
bnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQgbnVtYmVyT2ZXaGVlbEhhbmRsZXJzKQogewogICAg
IG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyA9IG51bWJlck9mV2hlZWxIYW5kbGVycyA+IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAxOTdmNTgyZTRlOWVk
MGM1MmE2ODhhMTFmZmUxZTA1MzA5ZmI0YzZmLi5hNzM2OWZjNTc2ZTQ0NDk2YWU3ZDIzOThiNGYz
YzM3M2U0NjczYzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
QEAgLTk2LDYgKzk2LDExIEBAIGNsYXNzIFdlYlRvdWNoRXZlbnQ7CiAKIGNsYXNzIFdlYlZpZXdJ
bXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDbGll
bnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CiBwdWJsaWM6CisgICAgZW51bSBB
dXRvWm9vbVR5cGUgeworICAgICAgICBEb3VibGVUYXAsCisgICAgICAgIEZpbmRJblBhZ2UsCisg
ICAgfTsKKwogICAgIC8vIFdlYldpZGdldCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZSgpOwogICAgIHZpcnR1YWwgV2ViU2l6ZSBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CkBAIC00
NTgsNiArNDYzLDEwIEBAIHB1YmxpYzoKICAgICAvLyBhIHBsdWdpbiBjYW4gdXBkYXRlIGl0cyBv
d24gem9vbSwgc2F5IGJlY2F1c2Ugb2YgaXRzIG93biBVSS4KICAgICB2b2lkIGZ1bGxGcmFtZVBs
dWdpblpvb21MZXZlbENoYW5nZWQoZG91YmxlIHpvb21MZXZlbCk7CiAKKyNpZiBFTkFCTEUoR0VT
VFVSRV9FVkVOVFMpCisgICAgdm9pZCBjb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGNv
bnN0IFdlYlJlY3QmIGhpdFJlY3QsIEF1dG9ab29tVHlwZSwgZmxvYXQmIHNjYWxlLCBXZWJQb2lu
dCYgc2Nyb2xsKTsKKyNlbmRpZgorCiAgICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50
IG51bVRpbWVzKTsKIAogICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3Jl
OjpFbGVtZW50Kik7CkBAIC01MjgsNiArNTM3LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRh
dGVMYXllclRyZWVWaWV3cG9ydCgpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCisgICAgLy8gUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBibG9jayB0eXBlIG5v
ZGUgdG91Y2hlZCBieSB0aGUgV2ViUmVjdC4KKyAgICBXZWJSZWN0IGNvbXB1dGVCbG9ja0JvdW5k
cyhjb25zdCBXZWJSZWN0JiwgQXV0b1pvb21UeXBlKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlv
bjogV2lkZW5zIHRoZSB3aWR0aCBvZiB8c291cmNlfCBieSB0aGUgc3BlY2lmaWVkIG1hcmdpbnMK
KyAgICAvLyB3aGlsZSBrZWVwaW5nIGl0IHNtYWxsZXIgdGhhbiBwYWdlIHdpZHRoLgorICAgIFdl
YlJlY3Qgd2lkZW5SZWN0V2l0aGluUGFnZUJvdW5kcyhjb25zdCBXZWJSZWN0JiBzb3VyY2UsIGlu
dCB0YXJnZXRNYXJnaW4sIGludCBtaW5pbXVtTWFyZ2luKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFBPSU5URVJfTE9DSykKICAgICB2b2lkIHBvaW50ZXJMb2NrTW91c2VFdmVudChjb25zdCBXZWJJ
bnB1dEV2ZW50Jik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
RnJhbWVUZXN0LmNwcAppbmRleCBiNTkwMDE4NjBkYTJhYjliYmYwYTJkODJiMjgyNmRjODBiY2Rh
ZjJhLi5mNjFlOTg2NDg4NmViNzM1ZGVjZjA3ZGZlM2QxMjQxNWZmZmJiYjlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCkBAIC0xNTEsNiArMTUx
LDc4IEBAIFRFU1RfRihXZWJGcmFtZVRlc3QsIENocm9tZVBhZ2VOb0phdmFzY3JpcHQpCiAgICAg
RVhQRUNUX0VRKHN0ZDo6c3RyaW5nOjpucG9zLCBjb250ZW50LmZpbmQoIkNsb2JiZXJlZCIpKTsK
IH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKK1RFU1RfRihXZWJGcmFtZVRlc3QsIERp
dkF1dG9ab29tUGFyYW1zVGVzdCkKK3sKKyAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJn
ZXRfc2NhbGVfZm9yX2F1dG9fem9vbV9pbnRvX2Rpdl90ZXN0Lmh0bWwiKTsKKworICAgIFdlYlZp
ZXdJbXBsKiB3ZWJWaWV3SW1wbCA9IHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4oRnJhbWVUZXN0
SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImdldF9zY2FsZV9mb3Jf
YXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbCIsIHRydWUpKTsKKyAgICBpbnQgcGFnZVdpZHRo
ID0gNjQwOworICAgIGludCBwYWdlSGVpZ2h0ID0gNDgwOworICAgIGludCBkaXZQb3NYID0gMjAw
OworICAgIGludCBkaXZQb3NZID0gMjAwOworICAgIGludCBkaXZXaWR0aCA9IDIwMDsKKyAgICBp
bnQgZGl2SGVpZ2h0ID0gMTUwOworICAgIFdlYlJlY3QgZG91YmxlVGFwUG9pbnQoMjUwLCAyNTAs
IDAsIDApOworICAgIHdlYlZpZXdJbXBsLT5yZXNpemUoV2ViU2l6ZShwYWdlV2lkdGgsIHBhZ2VI
ZWlnaHQpKTsKKyAgICBmbG9hdCBzY2FsZTsKKyAgICBXZWJQb2ludCBzY3JvbGw7CisKKyAgICAv
LyBUZXN0IGZvciBEb3VibGV0YXAgc2NhbGluZworCisgICAgLy8gVGVzdHMgZm9yIHpvb21pbmcg
aW4gYW5kIG91dCB3aXRob3V0IGNsYW1waW5nLgorICAgIC8vIFNldCBkZXZpY2Ugc2NhbGUgYW5k
IHNjYWxlIGxpbWl0cyBzbyB3ZSBkb250IGdldCBjbGFtcGVkLgorICAgIHdlYlZpZXdJbXBsLT5z
ZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFj
dG9yTGltaXRzKDAsIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAg
ICAvLyBUZXN0IHpvb21pbmcgaW50byBkaXYuCisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2Fs
ZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVU
YXAsIHNjYWxlLCBzY3JvbGwpOworICAgIGZsb2F0IHNjYWxlZERpdldpZHRoID0gZGl2V2lkdGgg
KiBzY2FsZTsKKyAgICBmbG9hdCBzY2FsZWREaXZIZWlnaHQgPSBkaXZIZWlnaHQgKiBzY2FsZTsK
KyAgICBpbnQgaFNjcm9sbCA9ICgoZGl2UG9zWCAqIHNjYWxlKSAtICgocGFnZVdpZHRoIC0gc2Nh
bGVkRGl2V2lkdGgpIC8gMikpIC8gc2NhbGU7CisgICAgaW50IHZTY3JvbGwgPSAoKGRpdlBvc1kg
KiBzY2FsZSkgLSAoKHBhZ2VIZWlnaHQgLSBzY2FsZWREaXZIZWlnaHQpIC8gMikpIC8gc2NhbGU7
CisgICAgRVhQRUNUX05FQVIocGFnZVdpZHRoIC8gZGl2V2lkdGgsIHNjYWxlLCAwLjEpOworICAg
IEVYUEVDVF9FUShoU2Nyb2xsLCBzY3JvbGwueCk7CisgICAgRVhQRUNUX0VRKHZTY3JvbGwsIHNj
cm9sbC55KTsKKworICAgIC8vIFRlc3Qgem9vbSBvdXQgdG8gb3ZlcnZpZXcgc2NhbGUuCisgICAg
d2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwu
eCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFw
UG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgxLCBzY2FsZSk7CisgICAgRVhQRUNUX0VRKFdlYlBvaW50KDAsIDApLCBzY3Jv
bGwpOworCisgICAgLy8gVGVzdHMgZm9yIGNsYW1wZWQgc2NhbGluZy4KKyAgICAvLyBUZXN0IGNs
YW1wIHRvIGRldmljZSBzY2FsZToKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2Fs
ZShXZWJDb3JlOjpJbnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0lt
cGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVG
YWN0b3IoMi41KTsKKyAgICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0
UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9s
bCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIuNSwgc2NhbGUpOworCisgICAgLy8gVGVzdCBjbGFt
cCB0byBtaW5pbXVtIHNjYWxlOgorICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxl
KFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1w
bC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0
b3JMaW1pdHMoMS41IC8gd2ViVmlld0ltcGwtPmRldmljZVNjYWxlRmFjdG9yKCksIDQgLyB3ZWJW
aWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVT
Y2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3Vi
bGVUYXAsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjUsIHNjYWxlKTsK
KyAgICBFWFBFQ1RfRVEoV2ViUG9pbnQoMCwgMCksIHNjcm9sbCk7CisKKyAgICAvLyBUZXN0IGNs
YW1wIHRvIG1heGltdW0gc2NhbGU6CisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJ
bXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxl
RmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwg
MyAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+
Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0lt
cGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIHNj
YWxlKTsKKworCisgICAgLy8gVGVzdCBmb3IgTm9uLWRvdWJsZXRhcCBzY2FsaW5nCisgICAgd2Vi
Vmlld0ltcGwtPnNldFBhZ2VTY2FsZUZhY3RvcigxLCBXZWJQb2ludCgwLCAwKSk7CisgICAgd2Vi
Vmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDQpOworICAgIHdlYlZpZXdJbXBsLT5zZXRQ
YWdlU2NhbGVGYWN0b3JMaW1pdHMoMCwgNCAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICAvLyBUZXN0IHpvb21pbmcgaW50byBkaXYuCisgICAgd2ViVmlld0ltcGwtPmNv
bXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoV2ViUmVjdCgyNTAsIDI1MCwgMTAsIDEwKSwg
V2ViVmlld0ltcGw6OkZpbmRJblBhZ2UsIHNjYWxlLCBzY3JvbGwpOworICAgIEVYUEVDVF9ORUFS
KHBhZ2VXaWR0aCAvIGRpdldpZHRoLCBzY2FsZSwgMC4xKTsKK30KKyNlbmRpZgorCiBjbGFzcyBU
ZXN0UmVsb2FkRG9lc250UmVkaXJlY3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNs
aWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJOYXZpZ2F0aW9uUG9saWN5IGRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb24oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvZ2V0X3NjYWxlX2Zvcl9hdXRvX3pvb21faW50b19kaXZfdGVzdC5odG1sIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2lu
dG9fZGl2X3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODE3ZGM0N2Q1NGI1M2JhMmM0NmE1YjBhOWJh
NzQ5OWZjYTI3MGVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL2dldF9zY2FsZV9mb3JfYXV0b196b29tX2ludG9fZGl2X3Rlc3QuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8aHRtbD4KKyAgPGJvZHk+CisgICAgPGRpdiBzdHlsZT0iYmFja2dyb3Vu
ZC1jb2xvcjogZ3JlZW47IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMHB4OyB0b3A6IDBweDsg
d2lkdGg6IDY0MHB4OyBoZWlnaHQ6IDQ4MHB4Ij4KKyAgICAgIDxwPlRvcCBEaXY8L3A+CisgICAg
ICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcG9zaXRpb246IGFic29sdXRl
OyBsZWZ0OiAyMDBweDsgdG9wOiAyMDBweDsgd2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDE1MHB4Ij4K
KyAgICAgICAgPHAgaWQ9ImlubmVyRGl2Ij5EaXYgdG8gem9vbSB0bzwvcD4KKyAgICAgICAgPGRp
diBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmVkOyBwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDIy
MHB4OyB0b3A6IDM1MHB4OyB3aWR0aDogMTYwcHg7IGhlaWdodDogNDBweCI+CisgICAgICAgICAg
PHAgaWQ9ImlubmVySW5uZXJEaXYiPkRpdiBOT1QgdG8gem9vbSB0bzwvcD4KKyAgICAgICAgPC9k
aXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>