<?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>82612</bug_id>
          
          <creation_ts>2012-03-29 07:03:19 -0700</creation_ts>
          <short_desc>Web Inspector: [Chromium] Implement Chromium-specific part of the device metrics emulation</short_desc>
          <delta_ts>2012-03-30 10:54:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>75963</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591149</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-29 07:03:19 -0700</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591157</commentid>
    <comment_count>1</comment_count>
      <attachid>134574</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-29 07:13:07 -0700</bug_when>
    <thetext>Created attachment 134574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591165</commentid>
    <comment_count>2</comment_count>
      <attachid>134574</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-29 07:26:45 -0700</bug_when>
    <thetext>Comment on attachment 134574
Patch

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

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:179
&gt; +WebDevToolsAgentImpl::WidgetFrameMetrics::WidgetFrameMetrics(WebViewImpl* webView)

It sounds like you could define it entirely in the cpp. I would call it FrameViewSizeEmulationSupport or similarly.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:182
&gt; +    WebCore::FrameView* view = frameView();

Does it make sense to create these for 0 frame view?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:318
&gt; +    long overrideWidth = 0;

Sounds like this code could be next to setDeviceMetrics.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:321
&gt; +    InspectorInstrumentation::applyScreenWidthOverride(frame, &amp;overrideWidth);

I think there should be a single method fetching those.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:343
&gt; +void WebDevToolsAgentImpl::overrideDeviceMetrics(int width, int height, float fontScaleFactor)

I would delegate it into the WidgetFrameMetrics

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:365
&gt; +void WebDevToolsAgentImpl::autoZoomPageToFitWidth()

ditto

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:406
&gt; +void WebDevToolsAgentImpl::paintViewportGutter(WebCanvas* canvas)

ditto

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1269
&gt; +        devToolsAgentPrivate()-&gt;didWebFrameResize(webFrame, newSize);

You should make it clear that didWebFrameResize resizes frame view as well. Something like:

if (devToolsAgentPrivate() &amp;&amp; devToolsAgentPrivate()-&gt;shouldEmulateSize()) {
...
} else {
...
}

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2232
&gt; +            frame-&gt;setPageAndTextZoomFactors(zoomFactor, m_textZoomFactor);

I would use the approach as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591292</commentid>
    <comment_count>3</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-29 10:38:23 -0700</bug_when>
    <thetext>Attaching a new patch shortly.

(In reply to comment #2)
&gt; (From update of attachment 134574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134574&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:179
&gt; &gt; +WebDevToolsAgentImpl::WidgetFrameMetrics::WidgetFrameMetrics(WebViewImpl* webView)
&gt; 
&gt; It sounds like you could define it entirely in the cpp. I would call it FrameViewSizeEmulationSupport or similarly.

Fixed.

&gt; &gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:182
&gt; &gt; +    WebCore::FrameView* view = frameView();
&gt; 
&gt; Does it make sense to create these for 0 frame view?

Fixed.

&gt; &gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:318
&gt; &gt; +    long overrideWidth = 0;
&gt; 
&gt; Sounds like this code could be next to setDeviceMetrics.

Refactored.

&gt; &gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:321
&gt; &gt; +    InspectorInstrumentation::applyScreenWidthOverride(frame, &amp;overrideWidth);
&gt; 
&gt; I think there should be a single method fetching those.

Let&apos;s handle this in a separate change, as this requires touching the WebCore.

&gt; &gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:343
&gt; &gt; +void WebDevToolsAgentImpl::overrideDeviceMetrics(int width, int height, float fontScaleFactor)
&gt; 
&gt; I would delegate it into the WidgetFrameMetrics

Done.

&gt; &gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:365
&gt; &gt; +void WebDevToolsAgentImpl::autoZoomPageToFitWidth()
&gt; 
&gt; ditto

Done.

&gt; &gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:406
&gt; &gt; +void WebDevToolsAgentImpl::paintViewportGutter(WebCanvas* canvas)
&gt; 
&gt; ditto

Done.

&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1269
&gt; &gt; +        devToolsAgentPrivate()-&gt;didWebFrameResize(webFrame, newSize);
&gt; 
&gt; You should make it clear that didWebFrameResize resizes frame view as well. Something like:
&gt; 
&gt; if (devToolsAgentPrivate() &amp;&amp; devToolsAgentPrivate()-&gt;shouldEmulateSize()) {
&gt; ...
&gt; } else {
&gt; ...
&gt; }

Done.

&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2232
&gt; &gt; +            frame-&gt;setPageAndTextZoomFactors(zoomFactor, m_textZoomFactor);
&gt; 
&gt; I would use the approach as above.

This is a different situation discussed offline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591305</commentid>
    <comment_count>4</comment_count>
      <attachid>134615</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-29 10:47:18 -0700</bug_when>
    <thetext>Created attachment 134615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591382</commentid>
    <comment_count>5</comment_count>
      <attachid>134615</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-29 11:38:30 -0700</bug_when>
    <thetext>Comment on attachment 134615
Patch

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

I&apos;ll continue review later.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.h:62
&gt; +class DeviceMetricsSupport;

Please mind the alphabetic order.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentPrivate.h:48
&gt; +    virtual void didWebFrameResize(WebFrameImpl*, const WebSize&amp;) = 0;

Could you rename this to didResizeWebFrame? Also, please provide documentation for these methods.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3001
&gt; +    mainFrameImpl()-&gt;frame()-&gt;setTextZoomFactor(m_emulatedTextZoomFactor);

It sounds inconsistent with the cases above.

&gt; Source/WebKit/chromium/src/WebViewImpl.h:403
&gt; +    float emulatedTextZoomFactor() const

Please document these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592010</commentid>
    <comment_count>6</comment_count>
      <attachid>134615</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-30 03:26:56 -0700</bug_when>
    <thetext>Comment on attachment 134615
Patch

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

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:187
&gt; +        return !m_emulatedFrameSize.isEmpty();

Could we encode non-emulated mode with 0 device metrics pointer?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:193
&gt; +        WebSize newSize = WebSize(static_cast&lt;int&gt;(width), static_cast&lt;int&gt;(height));

So you call it with int arguments, then accept long arguments to cast them into ints?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:197
&gt; +            m_emulatedFrameSize = newSize;

Can this happen?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:203
&gt; +        bool cancelEmulation = !width &amp;&amp; !height;

You can have explicit method for this. discard/restore?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:207
&gt; +                view-&gt;setHorizontalScrollbarLock(false);

Then this method will be extracted.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:243
&gt; +        InspectorInstrumentation::applyScreenWidthOverride(frame, &amp;overrideWidth);

You should use the values from setDeviceMetrics instead.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:249
&gt; +        float zoomFactor = static_cast&lt;float&gt;(overrideWidth) / frame-&gt;view()-&gt;contentsWidth();

This seems to be copying the logic from above.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:255
&gt; +        long overrideWidth = 0;

I would expect this method to call setDeviceMetrics with stored values.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:270
&gt; +    WebSize applySizeOverrideInternal(FrameView* frameView, long&amp; overrideWidth, long&amp; overrideHeight)

private?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:287
&gt; +    void setSize(const WebSize&amp; size)

Rename back to overrideResize to better reflect the nature?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:293
&gt; +        IntSize newSize = IntSize(size.width, size.height);

It does not seem to override anything.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:386
&gt; +void WebDevToolsAgentImpl::didWebFrameResize(WebFrameImpl*, const WebSize&amp; newSize)

unused?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:1265
&gt; +    if (!devToolsAgentPrivate() || !devToolsAgentPrivate()-&gt;areMetricsEmulated()) {

Given that you don&apos;t have the alternate branch, metricsOverriden() sounds more intuitive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592138</commentid>
    <comment_count>7</comment_count>
      <attachid>134804</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-30 07:13:22 -0700</bug_when>
    <thetext>Created attachment 134804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592195</commentid>
    <comment_count>8</comment_count>
      <attachid>134804</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-30 09:00:11 -0700</bug_when>
    <thetext>Comment on attachment 134804
Patch

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

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:191
&gt; +            return;

What for were we creating newSize?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:200
&gt; +        if (!wasEmulated) {

You should instead split init and update methods.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:205
&gt; +

Too much white space

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3447
&gt; +    m_layerTreeView.setViewportSize(size());

Why did this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592211</commentid>
    <comment_count>9</comment_count>
      <attachid>134825</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-30 09:21:15 -0700</bug_when>
    <thetext>Created attachment 134825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592221</commentid>
    <comment_count>10</comment_count>
      <attachid>134825</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-30 09:27:54 -0700</bug_when>
    <thetext>Comment on attachment 134825
Patch

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

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:183
&gt; +        m_webView-&gt;addPageOverlay(this, 97);

What is 97? We should introduce a common place with these constants.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:221
&gt; +    void autoZoomPageToFitWidth(Frame* frame)

You should have two methods for this.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:356
&gt; +            m_metricsSupport-&gt;restore();

I think you should call restore from destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592238</commentid>
    <comment_count>11</comment_count>
      <attachid>134825</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-30 10:01:59 -0700</bug_when>
    <thetext>Comment on attachment 134825
Patch

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

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:3447
&gt; +    m_layerTreeView.setViewportSize(size());

Nice. Yeah, that seems like its needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592292</commentid>
    <comment_count>12</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-30 10:54:25 -0700</bug_when>
    <thetext>Committed r112690: &lt;http://trac.webkit.org/changeset/112690&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134574</attachid>
            <date>2012-03-29 07:13:07 -0700</date>
            <delta_ts>2012-03-29 10:47:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82612-20120329181305.patch</filename>
            <type>text/plain</type>
            <size>21906</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGZhYTA1YWVhOTJiMzQ0NGQzYmFlYWQyMTAwMzU2YzRlZDAyYWIyNjcuLjFkNjhjMWEwN2MxY2Zm
NGJiZmExNDY3NGQ4NjBhZmVkMjBkNDU4YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTItMDMtMjkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEltcGxlbWVu
dCBDaHJvbWl1bS1zcGVjaWZpYyBwYXJ0IG9mIHRoZSBkZXZpY2UgbWV0cmljcyBlbXVsYXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjEyCisK
KyAgICAgICAgVGhlIGNoYW5nZSBpbXBsZW1lbnRzIHRoZSBDaHJvbWl1bS1zcGVjaWZpYyBjb2Rl
IGZvciByZXNpemluZyB0aGUgRnJhbWVWaWV3IGluc2lkZSBXZWJWaWV3SW1wbCwKKyAgICAgICAg
bWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgdGV4dCB6b29tIGZhY3RvciAobmVjZXNzYXJ5IGZvciBj
ZXJ0YWluIGVtdWxhdGVkIGRldmljZXMpLCBhbmQKKyAgICAgICAgcGFpbnRpbmcgdGhlIGd1dHRl
ciBhcm91bmQgdGhlIGRvd25zaXplZCBGcmFtZVZpZXcgdXNpbmcgYW4gb3ZlcmxheS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9JbnNwZWN0
b3JDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50SW1wbDo6
Y2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKTogQ2FwYWJpbGl0eSBhY2Nlc3Nvci4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudEltcGw6Om92ZXJyaWRl
RGV2aWNlTWV0cmljcyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmF1
dG9ab29tUGFnZVRvRml0V2lkdGgpOiBSZXNpemVzIGEgbmV3IEZyYW1lVmlldyBvbiBuYXZpZ2F0
aW9uIGlmIG1ldHJpY3MgZW11bGF0aW9uIGlzIGVuYWJsZWQuCisgICAgICAgICogc3JjL0luc3Bl
Y3RvckNsaWVudEltcGwuaDoKKyAgICAgICAgKEluc3BlY3RvckNsaWVudEltcGwpOgorICAgICAg
ICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6V2lkZ2V0RnJhbWVNZXRyaWNzOjpX
aWRnZXRGcmFtZU1ldHJpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1w
bDo6V2lkZ2V0RnJhbWVNZXRyaWNzOjpmcmFtZVZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
ZXZUb29sc0FnZW50SW1wbDo6V2lkZ2V0RnJhbWVNZXRyaWNzOjpzZXREZXZpY2VNZXRyaWNzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OldpZGdldEZyYW1lTWV0cmlj
czo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJE
ZXZUb29sc0FnZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBs
OjptYWluRnJhbWVWaWV3Q3JlYXRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdl
bnRJbXBsOjpkaWRXZWJGcmFtZVJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xz
QWdlbnRJbXBsOjpvdmVycmlkZURldmljZU1ldHJpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
ZXZUb29sc0FnZW50SW1wbDo6YXV0b1pvb21QYWdlVG9GaXRXaWR0aCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpwYWludFZpZXdwb3J0R3V0dGVyKToKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViRGV2VG9vbHNBZ2VudEltcGwpOgorICAgICAgICAoV2lkZ2V0RnJhbWVNZXRyaWNzKTog
VGhpcyBpcyBhIGRlbGVnYXRlIFdlYlZpZXdJbXBsIHVzZXMgZm9yIG1haW50YWluaW5nIHRoZSBy
aWdodCBGcmFtZVZpZXcgbWV0cmljcy4KKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OldpZGdldEZyYW1lTWV0cmljczo6aXNTaXplRW11bGF0ZWQpOgorICAgICAgICAoVmll
d3BvcnRHdXR0ZXJPdmVybGF5KTogQW4gb3ZlcmxheSB0aGF0IHBhaW50cyBhIGd1dHRlciBhcm91
bmQgdGhlIGRvd25zaXplZCBGcmFtZVZpZXcgZHVyaW5nIG1ldHJpY3MgZW11bGF0aW9uLgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Vmlld3BvcnRHdXR0ZXJPdmVybGF5
OjpWaWV3cG9ydEd1dHRlck92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6Vmlld3BvcnRHdXR0ZXJPdmVybGF5OjpwYWludFBhZ2VPdmVybGF5KToKKyAgICAg
ICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSk6CisgICAgICAgICogc3JjL1dlYkZyYW1l
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y3JlYXRlRnJhbWVWaWV3
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRab29tTGV2ZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0VGV4dFpvb21G
YWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmll
d3BvcnQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6dGV4dFpvb21GYWN0b3IpOiBBIHByb3BlcnR5IGZvciBjdXN0b20gdGV4dCB6
b29tIGZhY3Rvci4KKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMi0wMy0yOSAgVG9tbXkg
V2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBNZWRpYVN0cmVhbSBB
UEk6IEFkZGluZyBiZXR0ZXIgY29tbWVudHMgZm9yIHRoZSBXZWJSVEMgbWV0aG9kcyBpbiBXZWJL
aXRQbGF0Zm9ybVN1cHBvcnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
bnNwZWN0b3JDbGllbnRJbXBsLmNwcAppbmRleCAzMTdiNTc2OTM0YTljOGVkYjU3YzUyZTBmNjFi
NjhjYjMyYTU2MzExLi42MjcwNTViMDdjMjg3ZGIwMzlhODRjYzE3NjBkZGZmZGExNmY5MzNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmNwcApAQCAtMTI4LDYgKzEyOCwyMyBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmNsZWFy
QnJvd3NlckNvb2tpZXMoKQogICAgICAgICBhZ2VudC0+Y2xlYXJCcm93c2VyQ29va2llcygpOwog
fQogCitib29sIEluc3BlY3RvckNsaWVudEltcGw6OmNhbk92ZXJyaWRlRGV2aWNlTWV0cmljcygp
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6b3Zl
cnJpZGVEZXZpY2VNZXRyaWNzKGludCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgZm9udFNjYWxl
RmFjdG9yKQoreworICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBkZXZUb29s
c0FnZW50KCkpCisgICAgICAgIGFnZW50LT5vdmVycmlkZURldmljZU1ldHJpY3Mod2lkdGgsIGhl
aWdodCwgZm9udFNjYWxlRmFjdG9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjph
dXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCkKK3sKKyAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwq
IGFnZW50ID0gZGV2VG9vbHNBZ2VudCgpKQorICAgICAgICBhZ2VudC0+YXV0b1pvb21QYWdlVG9G
aXRXaWR0aCgpOworfQorCiBXZWJEZXZUb29sc0FnZW50SW1wbCogSW5zcGVjdG9yQ2xpZW50SW1w
bDo6ZGV2VG9vbHNBZ2VudCgpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkRldlRvb2xz
QWdlbnRJbXBsKj4obV9pbnNwZWN0ZWRXZWJWaWV3LT5kZXZUb29sc0FnZW50KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCmluZGV4IGIx
NmI2ZjQ2ODE4YzMzY2U0Mjk1ZTVmODNhNmE3NWM5YjVlMjFkMmMuLjVjY2VjODFkZDRhZjI1M2I0
ZGI5MWI4MWE2NzVkMjBjMDUxODJkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKQEAgLTYzLDYgKzYzLDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ2FjaGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Q2xlYXJCcm93c2VyQ29va2llcygpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDb29r
aWVzKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKCk7Cisg
ICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQsIGludCwgZmxvYXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBhdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCk7CisKIHByaXZhdGU6CiAg
ICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIGRldlRvb2xzQWdlbnQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDUy
ZWIzNzQwMGY0ZTY5N2M0NTBkYmYzMDhiNjhiYjljYTNjMDg3ZmIuLjdhOGRmMzc2ZmJmMjRkN2Zj
NThiMzk3NjRjMDE3MTdlMmIwZDg2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNs
dWRlICJXZWJEZXZUb29sc0FnZW50SW1wbC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKQEAgLTE3Myw2ICsxNzUsODUgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8V2ViRGV2VG9vbHNBZ2VudDo6TWVzc2FnZURlc2NyaXB0b3I+
IG1fZGVzY3JpcHRvcjsKIH07CiAKKworV2ViRGV2VG9vbHNBZ2VudEltcGw6OldpZGdldEZyYW1l
TWV0cmljczo6V2lkZ2V0RnJhbWVNZXRyaWNzKFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQorICAgIDog
bV93ZWJWaWV3KHdlYlZpZXcpCit7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZyYW1l
U2l6ZSA9IHZpZXctPnNpemUoKTsKK30KKworaW5saW5lIFdlYkNvcmU6OkZyYW1lVmlldyogV2Vi
RGV2VG9vbHNBZ2VudEltcGw6OldpZGdldEZyYW1lTWV0cmljczo6ZnJhbWVWaWV3KCkKK3sKKyAg
ICByZXR1cm4gbV93ZWJWaWV3LT5tYWluRnJhbWVJbXBsKCkgPyBtX3dlYlZpZXctPm1haW5GcmFt
ZUltcGwoKS0+ZnJhbWVWaWV3KCkgOiAwOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBs
OjpXaWRnZXRGcmFtZU1ldHJpY3M6OnNldERldmljZU1ldHJpY3MoY29uc3QgV2ViU2l6ZSYgc2l6
ZSwgZmxvYXQgdGV4dFpvb21GYWN0b3IpCit7CisgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aDsK
KyAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7CisgICAgaW50IHJlcXVlc3RlZFdpZHRoID0g
d2lkdGg7CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsKKyAg
ICBpZiAoIXZpZXcpIHsKKyAgICAgICAgbV9lbXVsYXRlZEZyYW1lU2l6ZSA9IHNpemU7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3dlYlZpZXctPnNldFRleHRab29tRmFjdG9yKHRl
eHRab29tRmFjdG9yKTsKKworICAgIGJvb2wgY2FuY2VsRW11bGF0aW9uID0gIXdpZHRoICYmICFo
ZWlnaHQ7CisKKyAgICBpZiAoY2FuY2VsRW11bGF0aW9uKSB7CisgICAgICAgIGlmIChpc1NpemVF
bXVsYXRlZCgpKSB7CisgICAgICAgICAgICB2aWV3LT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTG9j
ayhmYWxzZSk7CisgICAgICAgICAgICB2aWV3LT5zZXRWZXJ0aWNhbFNjcm9sbGJhckxvY2soZmFs
c2UpOworICAgICAgICAgICAgdmlldy0+c2V0U2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyQXV0bywg
U2Nyb2xsYmFyQXV0bywgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIHZpZXctPnJlc2l6ZShJ
bnRTaXplKG1fd2ViVmlldy0+c2l6ZSgpKSk7CisgICAgICAgICAgICBtX3dlYlZpZXctPnNldFpv
b21MZXZlbChmYWxzZSwgMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
IWlzU2l6ZUVtdWxhdGVkKCkpCisgICAgICAgICAgICB2aWV3LT5zZXRTY3JvbGxiYXJNb2RlcyhT
Y3JvbGxiYXJBbHdheXNPbiwgU2Nyb2xsYmFyQWx3YXlzT24sIHRydWUsIHRydWUpOworCisgICAg
ICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsQmFyID0gdmlldy0+dmVydGljYWxTY3JvbGxiYXIo
KSkKKyAgICAgICAgICAgIHdpZHRoICs9ICF2ZXJ0aWNhbEJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkgPyB2ZXJ0aWNhbEJhci0+d2lkdGgoKSA6IDA7CisgICAgICAgIGlmIChTY3JvbGxiYXIqIGhv
cml6b250YWxCYXIgPSB2aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICBo
ZWlnaHQgKz0gIWhvcml6b250YWxCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpID8gaG9yaXpvbnRh
bEJhci0+aGVpZ2h0KCkgOiAwOworICAgICAgICBpZiAoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSAh
PSB2aWV3LT5zaXplKCkpCisgICAgICAgICAgICB2aWV3LT5yZXNpemUod2lkdGgsIGhlaWdodCk7
CisgICAgfQorCisgICAgbV9lbXVsYXRlZEZyYW1lU2l6ZSA9IFdlYlNpemUod2lkdGgsIGhlaWdo
dCk7CisKKyAgICBpZiAoIWNhbmNlbEVtdWxhdGlvbikgeworICAgICAgICBtX3dlYlZpZXctPnNl
dFpvb21MZXZlbChmYWxzZSwgMCk7CisgICAgICAgIGRvdWJsZSB6b29tRmFjdG9yID0gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihyZXF1ZXN0ZWRXaWR0aCkgLyB2aWV3LT5jb250ZW50c1dpZHRoKCk7Cisg
ICAgICAgIHZpZXctPmZyYW1lKCktPnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoem9vbUZhY3Rv
ciwgdGV4dFpvb21GYWN0b3IpOworICAgIH0KK30KKworCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjpXaWRnZXRGcmFtZU1ldHJpY3M6OnNldFNpemUoY29uc3QgV2ViU2l6ZSYgc2l6ZSkKK3sK
KyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc1NpemVFbXVsYXRlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKHNpemUud2lkdGgsIHNp
emUuaGVpZ2h0KTsKKyAgICBpZiAodmlldy0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIHZpZXctPnJlc2l6ZShuZXdTaXplKTsKK30KKworCiBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwoCiAgICAgV2ViVmlld0ltcGwqIHdlYlZpZXdJ
bXBsLAogICAgIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGNsaWVudCkKQEAgLTE4MCw2ICsyNjEs
NyBAQCBXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwoCiAgICAgLCBt
X2NsaWVudChjbGllbnQpCiAgICAgLCBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQogICAgICwg
bV9hdHRhY2hlZChmYWxzZSkKKyAgICAsIG1fZnJhbWVNZXRyaWNzKHdlYlZpZXdJbXBsKQogewog
ICAgIEFTU0VSVChtX2hvc3RJZCA+IDApOwogfQpAQCAtMjMxLDYgKzMxMyw3MiBAQCB2b2lkIFdl
YkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUltcGwqIHdl
YmZyYW1lKQogICAgICAgICBwcm94eS0+c2V0Q29udGV4dERlYnVnSWQobV9ob3N0SWQpOwogfQog
Cit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjptYWluRnJhbWVWaWV3Q3JlYXRlZChXZWJGcmFt
ZUltcGwqIHdlYkZyYW1lKQoreworICAgIGxvbmcgb3ZlcnJpZGVXaWR0aCA9IDA7CisgICAgbG9u
ZyBvdmVycmlkZUhlaWdodCA9IDA7CisgICAgRnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3SW1wbC0+
bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKGZyYW1lLCAmb3ZlcnJpZGVXaWR0aCk7CisgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKGZyYW1lLCAm
b3ZlcnJpZGVIZWlnaHQpOworCisgICAgaWYgKCFvdmVycmlkZVdpZHRoIHx8ICFvdmVycmlkZUhl
aWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFt
ZS0+dmlldygpOworCisgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJB
bHdheXNPbiwgU2Nyb2xsYmFyQWx3YXlzT24sIHRydWUsIHRydWUpOworICAgIGlmIChTY3JvbGxi
YXIqIHZlcnRpY2FsQmFyID0gZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAg
ICBvdmVycmlkZVdpZHRoICs9ICF2ZXJ0aWNhbEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgPyB2
ZXJ0aWNhbEJhci0+d2lkdGgoKSA6IDA7CisgICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbEJh
ciA9IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBvdmVycmlkZUhl
aWdodCArPSAhaG9yaXpvbnRhbEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgPyBob3Jpem9udGFs
QmFyLT5oZWlnaHQoKSA6IDA7CisKKyAgICBmcmFtZVZpZXctPnJlc2l6ZShvdmVycmlkZVdpZHRo
LCBvdmVycmlkZUhlaWdodCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZFdl
YkZyYW1lUmVzaXplKFdlYkZyYW1lSW1wbCosIGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCit7Cisg
ICAgbV9mcmFtZU1ldHJpY3Muc2V0U2l6ZShuZXdTaXplKTsKK30KKwordm9pZCBXZWJEZXZUb29s
c0FnZW50SW1wbDo6b3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGludCB3aWR0aCwgaW50IGhlaWdodCwg
ZmxvYXQgZm9udFNjYWxlRmFjdG9yKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1fd2ViVmlld0lt
cGwtPnBhZ2UoKSA/IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgOiAwOworICAg
IGlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YlNpemUgbmV3U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2ZyYW1lTWV0cmljcy5zZXREZXZp
Y2VNZXRyaWNzKG5ld1NpemUsIGZvbnRTY2FsZUZhY3Rvcik7CisKKyAgICBpZiAobmV3U2l6ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgbV93ZWJWaWV3SW1wbC0+cmVtb3ZlUGFnZU92ZXJsYXkobV92
aWV3cG9ydE92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3ZpZXdwb3J0T3ZlcmxheS5jbGVhcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV92aWV3cG9ydE92ZXJsYXkpIHsKKyAgICAg
ICAgICAgIG1fdmlld3BvcnRPdmVybGF5ID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0R3V0dGVyT3Zl
cmxheSh0aGlzKSk7CisgICAgICAgICAgICBtX3dlYlZpZXdJbXBsLT5hZGRQYWdlT3ZlcmxheSht
X3ZpZXdwb3J0T3ZlcmxheS5nZXQoKSwgOTYpOworICAgICAgICB9CisgICAgfQorCisgICAgbV93
ZWJWaWV3SW1wbC0+c2VuZFJlc2l6ZUV2ZW50QW5kUmVwYWludCgpOworfQorCit2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjphdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCkKK3sKKyAgICBpZiAoIW1f
ZnJhbWVNZXRyaWNzLmlzU2l6ZUVtdWxhdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGxv
bmcgb3ZlcnJpZGVXaWR0aCA9IDA7CisgICAgRnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3SW1wbC0+
bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKGZyYW1lLCAmb3ZlcnJpZGVXaWR0aCk7CisgICAgaWYg
KCFvdmVycmlkZVdpZHRoKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYlZpZXdJbXBsLT5z
ZXRab29tTGV2ZWwoZmFsc2UsIDApOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0YXRpY19j
YXN0PGZsb2F0PihvdmVycmlkZVdpZHRoKSAvIGZyYW1lLT52aWV3KCktPmNvbnRlbnRzV2lkdGgo
KTsKKyAgICBmcmFtZS0+c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyh6b29tRmFjdG9yLCBtX3dl
YlZpZXdJbXBsLT50ZXh0Wm9vbUZhY3RvcigpKTsKK30KKwogdm9pZCBXZWJEZXZUb29sc0FnZW50
SW1wbDo6ZGlzcGF0Y2hPbkluc3BlY3RvckJhY2tlbmQoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdl
KQogewogICAgIGluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250
ZW5kKG1lc3NhZ2UpOwpAQCAtMjU1LDYgKzQwMywyMyBAQCBGcmFtZSogV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6Om1haW5GcmFtZSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OnBhaW50Vmlld3BvcnRHdXR0ZXIoV2ViQ2FudmFzKiBjYW52YXMpCit7CisgICAg
aWYgKCFtX2ZyYW1lTWV0cmljcy5pc1NpemVFbXVsYXRlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFt
ZS0+dmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRCdWlsZGVy
IGJ1aWxkZXIoY2FudmFzKTsKKyAgICBHcmFwaGljc0NvbnRleHQmIGdjID0gYnVpbGRlci5jb250
ZXh0KCk7CisgICAgZ2MuY2xpcE91dChJbnRSZWN0KEludFBvaW50KCksIGZyYW1lLT52aWV3KCkt
PnNpemUoKSkpOworICAgIGdjLnNldEZpbGxDb2xvcihDb2xvcjo6ZGFya0dyYXksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGdjLmRyYXdSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV93ZWJW
aWV3SW1wbC0+c2l6ZSgpKSk7Cit9CisKKwogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5z
cGVjdG9yRGVzdHJveWVkKCkKIHsKICAgICAvLyBPdXIgbGlmZXRpbWUgaXMgYm91bmQgdG8gdGhl
IFdlYlZpZXdJbXBsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmgKaW5kZXggNjZmZDZjNmVlYTY4OGIwMzhkZTcyNDc3YTNiMTljNWI1MTVh
N2I1MS4uMzdmMWUzODJmMTQ5ZWUwYjVkNWI2YTdjZmQ0MGM2MmVmODJjYzgxZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCkBAIC0z
NSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgog
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00
Miw2ICs0Myw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNz
IEZyYW1lOworY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3Mg
SW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKQEAgLTY4LDcgKzcw
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYkRldlRvb2xzQWdlbnRJbXBsKCk7CiAKICAg
ICAvLyBXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKiBmcmFtZSk7CisgICAgdmly
dHVhbCB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCopOworICAgIHZpcnR1
YWwgdm9pZCBkaWRXZWJGcmFtZVJlc2l6ZShXZWJGcmFtZUltcGwqLCBjb25zdCBXZWJTaXplJik7
CisgICAgdmlydHVhbCB2b2lkIG1haW5GcmFtZVZpZXdDcmVhdGVkKFdlYkZyYW1lSW1wbCopOwog
CiAgICAgLy8gV2ViRGV2VG9vbHNBZ2VudCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CkBAIC05NSwxOSArOTksNjIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckJyb3dzZXJDYWNoZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDb29r
aWVzKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGludCB3aWR0
aCwgaW50IGhlaWdodCwgZmxvYXQgZm9udFNjYWxlRmFjdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpOworCiAgICAgaW50IGhvc3RJZCgpIHsgcmV0dXJuIG1f
aG9zdElkOyB9CiAKICAgICAvLyBXZWJQYWdlT3ZlcmxheQogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFBhZ2VPdmVybGF5KFdlYkNhbnZhcyopOwogCiBwcml2YXRlOgorICAgIGNsYXNzIFdpZGdldEZy
YW1lTWV0cmljcyB7CisgICAgcHVibGljOgorICAgICAgICBXaWRnZXRGcmFtZU1ldHJpY3MoV2Vi
Vmlld0ltcGwqKTsKKyAgICAgICAgYm9vbCBpc1NpemVFbXVsYXRlZCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhbV9lbXVsYXRlZEZyYW1lU2l6ZS5pc0VtcHR5KCk7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHNldERldmljZU1ldHJpY3MoY29uc3QgV2ViU2l6ZSYsIGZsb2F0
KTsKKyAgICAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYlNpemUmKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3KCk7CisKKyAgICAgICAgV2Vi
Vmlld0ltcGwqIG1fd2ViVmlldzsKKyAgICAgICAgV2ViU2l6ZSBtX2ZyYW1lU2l6ZTsKKyAgICAg
ICAgV2ViU2l6ZSBtX2VtdWxhdGVkRnJhbWVTaXplOworICAgIH07CisKKyAgICBjbGFzcyBWaWV3
cG9ydEd1dHRlck92ZXJsYXkgOiBwdWJsaWMgV2ViUGFnZU92ZXJsYXkgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVmlld3BvcnRHdXR0ZXJPdmVybGF5KFdlYkRldlRvb2xzQWdlbnRJbXBsKiBhZ2Vu
dCkKKyAgICAgICAgICAgIDogbV9hZ2VudChhZ2VudCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKiBjYW52YXMp
CisgICAgICAgIHsKKyAgICAgICAgICBtX2FnZW50LT5wYWludFZpZXdwb3J0R3V0dGVyKGNhbnZh
cyk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFdlYkRldlRvb2xzQWdlbnRJ
bXBsKiBtX2FnZW50OworICAgIH07CisKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZSgp
OwogCisgICAgdm9pZCBwYWludFZpZXdwb3J0R3V0dGVyKFdlYkNhbnZhcyopOworICAgIGZyaWVu
ZCBjbGFzcyBWaWV3cG9ydEd1dHRlck92ZXJsYXk7CisKICAgICBpbnQgbV9ob3N0SWQ7CiAgICAg
V2ViRGV2VG9vbHNBZ2VudENsaWVudCogbV9jbGllbnQ7CiAgICAgV2ViVmlld0ltcGwqIG1fd2Vi
Vmlld0ltcGw7CiAgICAgYm9vbCBtX2F0dGFjaGVkOworICAgIFdpZGdldEZyYW1lTWV0cmljcyBt
X2ZyYW1lTWV0cmljczsKKyAgICBPd25QdHI8Vmlld3BvcnRHdXR0ZXJPdmVybGF5PiBtX3ZpZXdw
b3J0T3ZlcmxheTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgKaW5kZXggNzAz
OGE1ZTVjYjgzMmRlMDA5YWE3YThjNmY3MmZjYWM0MGU3ODVhMy4uNmY1NjM0MWUxYWFiODA4MmUx
OGU1NmQ2NTZmYjBlMDY1ODU2MWMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCkBAIC0zNSw2ICszNSw3IEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRnJhbWVJbXBsOworY2xhc3MgV2ViU2l6ZTsKIAog
Y2xhc3MgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUgOiBwdWJsaWMgV2ViRGV2VG9vbHNBZ2VudCB7
CiBwdWJsaWM6CkBAIC00Myw2ICs0NCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHdpbmRvdyBv
YmplY3QgZm9yIHRoZSBmcmFtZSBoYXMgYmVlbiBjbGVhcmVkIG9mIGFueSBleHRyYSBwcm9wZXJ0
aWVzCiAgICAgLy8gdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBieSBzY3JpcHQgZnJvbSB0aGUgcHJl
dmlvdXNseSBsb2FkZWQgZG9jdW1lbnQuCiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFyV2luZG93
T2JqZWN0KFdlYkZyYW1lSW1wbCopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRXZWJGcmFt
ZVJlc2l6ZShXZWJGcmFtZUltcGwqLCBjb25zdCBXZWJTaXplJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIG1haW5GcmFtZVZpZXdDcmVhdGVkKFdlYkZyYW1lSW1wbCopID0gMDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5jcHAKaW5kZXggMzk4OTdjODIzNjJhODMyY2JlMmYxYzljMTI1MzhkYWFhMmE3NjhiMS4u
M2Q0M2MxZjU5NDQ3Nzk3ZDA0Y2Y0ZDg0OGUyMzRmZjgyNTZlMmNiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCkBAIC0xNDIsNiArMTQyLDcgQEAKICNp
bmNsdWRlICJXZWJET01FdmVudC5oIgogI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2luY2x1ZGUgIldlYkRldlRvb2xzQWdl
bnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJGaW5k
T3B0aW9ucy5oIgogI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCkBAIC0yMDgzLDYgKzIwODQs
OSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6Y3JlYXRlRnJhbWVWaWV3KCkKICAgICBtX2ZyYW1lLT5j
cmVhdGVWaWV3KHdlYlZpZXctPnNpemUoKSwgQ29sb3I6OndoaXRlLCB3ZWJWaWV3LT5pc1RyYW5z
cGFyZW50KCksICB3ZWJWaWV3LT5maXhlZExheW91dFNpemUoKSwgaXNNYWluRnJhbWUgPyB3ZWJW
aWV3LT5pc0ZpeGVkTGF5b3V0TW9kZUVuYWJsZWQoKSA6IDApOwogICAgIGlmICh3ZWJWaWV3LT5z
aG91bGRBdXRvUmVzaXplKCkgJiYgaXNNYWluRnJhbWUpCiAgICAgICAgIG1fZnJhbWUtPnZpZXco
KS0+ZW5hYmxlQXV0b1NpemVNb2RlKHRydWUsIHdlYlZpZXctPm1pbkF1dG9TaXplKCksIHdlYlZp
ZXctPm1heEF1dG9TaXplKCkpOworCisgICAgaWYgKGlzTWFpbkZyYW1lICYmIHdlYlZpZXctPmRl
dlRvb2xzQWdlbnRQcml2YXRlKCkpCisgICAgICAgIHdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2
YXRlKCktPm1haW5GcmFtZVZpZXdDcmVhdGVkKHRoaXMpOwogfQogCiBXZWJGcmFtZUltcGwqIFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAxYjNhYjU4OWQ2ZjdjNGU3YWJkYzExMTQ0OWQy
N2E4MWJlZjIzMTI1Li5lYmUzNmVlMGYzNDA0ZjliOWM2Y2MwMGZiYWU4ZDI2YzIzM2M3ODQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMzYsNiAr
MTM2LDcgQEAKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVu
dC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlICJwYWludGluZy9HcmFwaGlj
c0NvbnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRHJhZ0RhdGEuaCIKICNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJJbWFnZS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBs
YXRmb3JtU3VwcG9ydC5oIgpAQCAtMjM1LDYgKzIzNiw3IEBAIHN0YXRpYyBjb25zdCBQb3B1cENv
bnRhaW5lclNldHRpbmdzIGF1dG9maWxsUG9wdXBTZXR0aW5ncyA9IHsKIAogc3RhdGljIGJvb2wg
c2hvdWxkVXNlRXh0ZXJuYWxQb3B1cE1lbnVzID0gZmFsc2U7CiAKKwogLy8gV2ViVmlldyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIFdlYlZpZXcqIFdlYlZpZXc6OmNyZWF0ZShXZWJWaWV3Q2xpZW50KiBjbGllbnQpCkBA
IC0zNjUsNiArMzY3LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQq
IGNsaWVudCkKICNlbmRpZgogICAgICwgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5KGFk
b3B0UHRyKG5ldyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5KGNsaWVudCA/IGNsaWVudC0+
ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKSA6IDApKSkKICAgICAsIG1fZ2VvbG9jYXRpb25DbGll
bnRQcm94eShhZG9wdFB0cihuZXcgR2VvbG9jYXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGll
bnQtPmdlb2xvY2F0aW9uQ2xpZW50KCkgOiAwKSkpCisgICAgLCBtX3RleHRab29tRmFjdG9yKDEp
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAsIG1fdXNlck1lZGlhQ2xpZW50SW1wbCh0
aGlzKQogI2VuZGlmCkBAIC0xMjU4LDEwICsxMjYxLDE2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJl
c2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQogewogICAgIGlmIChtX3Nob3VsZEF1dG9SZXNp
emUgfHwgbV9zaXplID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKKwogICAgIG1fc2l6ZSA9
IG5ld1NpemU7CiAKLSAgICBpZiAobWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKSkKLSAgICAg
ICAgbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKS0+cmVzaXplKG1fc2l6ZS53aWR0aCwgbV9z
aXplLmhlaWdodCk7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IG1haW5GcmFtZUltcGwo
KTsKKyAgICBpZiAoZGV2VG9vbHNBZ2VudFByaXZhdGUoKSkKKyAgICAgICAgZGV2VG9vbHNBZ2Vu
dFByaXZhdGUoKS0+ZGlkV2ViRnJhbWVSZXNpemUod2ViRnJhbWUsIG5ld1NpemUpOworICAgIGVs
c2UgeworICAgICAgICBpZiAod2ViRnJhbWUtPmZyYW1lVmlldygpKQorICAgICAgICAgICAgd2Vi
RnJhbWUtPmZyYW1lVmlldygpLT5yZXNpemUobmV3U2l6ZS53aWR0aCwgbmV3U2l6ZS5oZWlnaHQp
OworICAgIH0KIAogICAgIHNlbmRSZXNpemVFdmVudEFuZFJlcGFpbnQoKTsKIH0KQEAgLTIyMjAs
NyArMjIyOSw3IEBAIGRvdWJsZSBXZWJWaWV3SW1wbDo6c2V0Wm9vbUxldmVsKGJvb2wgdGV4dE9u
bHksIGRvdWJsZSB6b29tTGV2ZWwpCiAgICAgICAgIGlmICh0ZXh0T25seSkKICAgICAgICAgICAg
IGZyYW1lLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKDEsIHpvb21GYWN0b3IpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBmcmFtZS0+c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyh6b29t
RmFjdG9yLCAxKTsKKyAgICAgICAgICAgIGZyYW1lLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3Jz
KHpvb21GYWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpOwogICAgIH0KICAgICByZXR1cm4gbV96b29t
TGV2ZWw7CiB9CkBAIC0yOTkwLDYgKzI5OTksMTIgQEAgYm9vbCBXZWJWaWV3SW1wbDo6dXNlRXh0
ZXJuYWxQb3B1cE1lbnVzKCkKICAgICByZXR1cm4gc2hvdWxkVXNlRXh0ZXJuYWxQb3B1cE1lbnVz
OwogfQogCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRUZXh0Wm9vbUZhY3RvcihmbG9hdCB0ZXh0Wm9v
bUZhY3RvcikKK3sKKyAgICBtX3RleHRab29tRmFjdG9yID0gdGV4dFpvb21GYWN0b3I7CisgICAg
bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5zZXRUZXh0Wm9vbUZhY3RvcihtX3RleHRab29tRmFj
dG9yKTsKK30KKwogYm9vbCBXZWJWaWV3SW1wbDo6bmF2aWdhdGlvblBvbGljeUZyb21Nb3VzZUV2
ZW50KHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGN0cmwsIGJvb2wgc2hpZnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHQsIGJvb2wgbWV0YSwK
QEAgLTM0MzEsNyArMzQ0Niw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZp
ZXdwb3J0KCkKICAgICAgICAgbGF5ZXJBZGp1c3RYID0gLXZpZXctPmNvbnRlbnRzU2l6ZSgpLndp
ZHRoKCkgKyB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpLndpZHRoKCk7CiAgICAgfQog
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdC5z
aXplKCksIHZpZXctPmNvbnRlbnRzU2l6ZSgpLCBzY3JvbGwsIHBhZ2VTY2FsZUZhY3RvcigpLCBs
YXllckFkanVzdFgpOwotICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRWaWV3cG9ydFNpemUodmlzaWJs
ZVJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZVZpZXcuc2V0Vmlld3BvcnRTaXplKHNpemUo
KSk7CiAgICAgbV9sYXllclRyZWVWaWV3LnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhwYWdl
U2NhbGVGYWN0b3IoKSwgbV9taW5pbXVtUGFnZVNjYWxlRmFjdG9yLCBtX21heGltdW1QYWdlU2Nh
bGVGYWN0b3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApp
bmRleCAzMDgyZDRlMDEzNWFmZWRiYTI1MzA4OTRjZTYwMDNiZTQyYjg1MWFkLi44NTg1OGExZDhh
MjgxZTY2MGFmYTViMTc5MjdjNWNmN2VkZWI2MzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKQEAgLTQ1LDE1ICs0NSwxOSBAQAogI2luY2x1ZGUgIkNvbnRleHRN
ZW51Q2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkRyYWdDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VPdmVybGF5TGlzdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0LmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIK
ICNpbmNsdWRlICJVc2VyTWVkaWFDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJs
YXkuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIApAQCAtNDAwLDYgKzQwNCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2luaXRp
YWxOYXZpZ2F0aW9uUG9saWN5OwogICAgIH0KIAorICAgIGZsb2F0IHRleHRab29tRmFjdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RleHRab29tRmFjdG9yOworICAgIH0KKwor
ICAgIHZvaWQgc2V0VGV4dFpvb21GYWN0b3IoZmxvYXQpOworCiAgICAgLy8gRGV0ZXJtaW5lcyB3
aGV0aGVyIGEgcGFnZSBzaG91bGQgZS5nLiBiZSBvcGVuZWQgaW4gYSBiYWNrZ3JvdW5kIHRhYi4K
ICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGhhcyBubyBvcGluaW9uLCBpbiB3aGljaCBjYXNl
IGl0IGRvZXNuJ3Qgc2V0ICpwb2xpY3kuCiAgICAgc3RhdGljIGJvb2wgbmF2aWdhdGlvblBvbGlj
eUZyb21Nb3VzZUV2ZW50KApAQCAtNDkyLDYgKzUwMyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGVu
dGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopOwogICAgIHZvaWQgZXhp
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqKTsKIAorICAgIC8vIEV4cG9z
ZWQgZm9yIHRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgZGV2aWNlIG1ldHJpY3MuCisgICAgdm9p
ZCBzZW5kUmVzaXplRXZlbnRBbmRSZXBhaW50KCk7CisKICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0
aW5nIHB1cnBvc2VzLgogICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIGJv
b2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKTsKQEAgLTU0Nyw3ICs1NjEsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJQ
b2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERyYWdBY3Rpb24pOwogCi0gICAgdm9pZCBzZW5kUmVzaXplRXZlbnRBbmRSZXBh
aW50KCk7CiAgICAgdm9pZCBjb25maWd1cmVBdXRvUmVzaXplTW9kZSgpOwogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNzI1LDYgKzczOCw4IEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPERldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHk+IG1fZGV2aWNlT3JpZW50YXRpb25D
bGllbnRQcm94eTsKICAgICBPd25QdHI8R2VvbG9jYXRpb25DbGllbnRQcm94eT4gbV9nZW9sb2Nh
dGlvbkNsaWVudFByb3h5OwogCisgICAgZmxvYXQgbV90ZXh0Wm9vbUZhY3RvcjsKKwogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAgICAgVXNlck1lZGlhQ2xpZW50SW1wbCBtX3VzZXJNZWRpYUNs
aWVudEltcGw7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134615</attachid>
            <date>2012-03-29 10:47:18 -0700</date>
            <delta_ts>2012-03-30 07:13:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82612-20120329214716.patch</filename>
            <type>text/plain</type>
            <size>20242</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGZhYTA1YWVhOTJiMzQ0NGQzYmFlYWQyMTAwMzU2YzRlZDAyYWIyNjcuLjEwNDIzMzc5MWQ5ZGQw
ZWIyZDYyZDhjNzEyMTRkM2RmMzFkM2Y2M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTItMDMtMjkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEltcGxlbWVu
dCBDaHJvbWl1bS1zcGVjaWZpYyBwYXJ0IG9mIHRoZSBkZXZpY2UgbWV0cmljcyBlbXVsYXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjEyCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyB0aGUgQ2hyb21pdW0tc3BlY2lmaWMgY29k
ZSBmb3Igb3ZlcnJpZGluZyBkZXZpY2UgbWV0cmljcyBzdWNoIGFzCisgICAgICAgIHNjcmVlbiBz
aXplIChieSBjaGFuZ2luZyB0aGUgRnJhbWVWaWV3IHNpemUpIGFuZCB0aGUgZGVmYXVsdCBmb250
IHNjYWxpbmcgKHJlcXVpcmVkIGZvciBjZXJ0YWluIGRldmljZXMsKQorICAgICAgICBhbmQgcGFp
bnRpbmcgYW4gb3ZlcmxheSBmb3IgdGhlIGd1dHRlciBzdXJyb3VuZGluZyB0aGUgZG93bnNpemVk
IEZyYW1lVmlldy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5z
cGVjdG9yQ2xpZW50SW1wbDo6Y2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudEltcGw6Om92ZXJyaWRlRGV2
aWNlTWV0cmljcyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmF1dG9a
b29tUGFnZVRvRml0V2lkdGgpOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmg6
CisgICAgICAgIChJbnNwZWN0b3JDbGllbnRJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoRGV2aWNlTWV0cmljc1N1cHBvcnQpOgorICAgICAg
ICAoV2ViS2l0OjpEZXZpY2VNZXRyaWNzU3VwcG9ydDo6RGV2aWNlTWV0cmljc1N1cHBvcnQpOgor
ICAgICAgICAoV2ViS2l0OjpEZXZpY2VNZXRyaWNzU3VwcG9ydDo6aXNTaXplRW11bGF0ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpEZXZpY2VNZXRyaWNzU3VwcG9ydDo6c2V0RGV2aWNlTWV0cmljcyk6
CisgICAgICAgIChXZWJLaXQ6OkRldmljZU1ldHJpY3NTdXBwb3J0OjphdXRvWm9vbVBhZ2VUb0Zp
dFdpZHRoKToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNlTWV0cmljc1N1cHBvcnQ6OmFwcGx5U2l6
ZU92ZXJyaWRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VNZXRyaWNzU3Vw
cG9ydDo6YXBwbHlTaXplT3ZlcnJpZGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OkRldmlj
ZU1ldHJpY3NTdXBwb3J0OjpzZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNlTWV0cmlj
c1N1cHBvcnQ6OnBhaW50UGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VNZXRy
aWNzU3VwcG9ydDo6ZnJhbWVWaWV3KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0FnZW50SW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRXZWJGcmFtZVJlc2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjptYWluRnJhbWVWaWV3Q3JlYXRlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphcmVNZXRyaWNzRW11bGF0
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6b3ZlcnJpZGVEZXZp
Y2VNZXRyaWNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmF1dG9a
b29tUGFnZVRvRml0V2lkdGgpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViRGV2
VG9vbHNBZ2VudEltcGwpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5o
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkRldlRvb2xzQWdlbnRQcml2YXRlKToK
KyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpjcmVhdGVGcmFtZVZpZXcpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmll
d0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFpvb21MZXZlbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzZXRFbXVsYXRlZFRleHRab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KToKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmVtdWxhdGVkVGV4dFpv
b21GYWN0b3IpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEyLTAzLTI5ICBUb21teSBX
aWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQ
STogQWRkaW5nIGJldHRlciBjb21tZW50cyBmb3IgdGhlIFdlYlJUQyBtZXRob2RzIGluIFdlYktp
dFBsYXRmb3JtU3VwcG9ydC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lu
c3BlY3RvckNsaWVudEltcGwuY3BwCmluZGV4IDMxN2I1NzY5MzRhOWM4ZWRiNTdjNTJlMGY2MWI2
OGNiMzJhNTYzMTEuLjYyNzA1NWIwN2MyODdkYjAzOWE4NGNjMTc2MGRkZmZkYTE2ZjkzM2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwu
Y3BwCkBAIC0xMjgsNiArMTI4LDIzIEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y2xlYXJC
cm93c2VyQ29va2llcygpCiAgICAgICAgIGFnZW50LT5jbGVhckJyb3dzZXJDb29raWVzKCk7CiB9
CiAKK2Jvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKCkK
K3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpvdmVy
cmlkZURldmljZU1ldHJpY3MoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBmbG9hdCBmb250U2NhbGVG
YWN0b3IpCit7CisgICAgaWYgKFdlYkRldlRvb2xzQWdlbnRJbXBsKiBhZ2VudCA9IGRldlRvb2xz
QWdlbnQoKSkKKyAgICAgICAgYWdlbnQtPm92ZXJyaWRlRGV2aWNlTWV0cmljcyh3aWR0aCwgaGVp
Z2h0LCBmb250U2NhbGVGYWN0b3IpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmF1
dG9ab29tUGFnZVRvRml0V2lkdGgoKQoreworICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1wbCog
YWdlbnQgPSBkZXZUb29sc0FnZW50KCkpCisgICAgICAgIGFnZW50LT5hdXRvWm9vbVBhZ2VUb0Zp
dFdpZHRoKCk7Cit9CisKIFdlYkRldlRvb2xzQWdlbnRJbXBsKiBJbnNwZWN0b3JDbGllbnRJbXBs
OjpkZXZUb29sc0FnZW50KCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNB
Z2VudEltcGwqPihtX2luc3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKaW5kZXggYjE2
YjZmNDY4MThjMzNjZTQyOTVlNWY4M2E2YTc1YzliNWUyMWQyYy4uNWNjZWM4MWRkNGFmMjUzYjRk
YjkxYjgxYTY3NWQyMGMwNTE4MmRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0luc3BlY3RvckNsaWVudEltcGwuaApAQCAtNjMsNiArNjMsMTEgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDYWNoZSgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5D
bGVhckJyb3dzZXJDb29raWVzKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNvb2tp
ZXMoKTsKKworICAgIHZpcnR1YWwgYm9vbCBjYW5PdmVycmlkZURldmljZU1ldHJpY3MoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGludCwgaW50LCBmbG9hdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGF1dG9ab29tUGFnZVRvRml0V2lkdGgoKTsKKwogcHJpdmF0ZToKICAg
ICBXZWJEZXZUb29sc0FnZW50SW1wbCogZGV2VG9vbHNBZ2VudCgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKaW5kZXggNTJl
YjM3NDAwZjRlNjk3YzQ1MGRiZjMwOGI2OGJiOWNhM2MwODdmYi4uYjMxNTQ2NWNlMGE5NTBkMDFl
MDUyN2U0NGNiMjhlZWJiYmVmMGY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1
ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgpAQCAtMTczLDYgKzE3NSwxNTUgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8V2ViRGV2VG9vbHNBZ2VudDo6TWVzc2FnZURlc2NyaXB0b3I+
IG1fZGVzY3JpcHRvcjsKIH07CiAKK2NsYXNzIERldmljZU1ldHJpY3NTdXBwb3J0IDogcHVibGlj
IFdlYlBhZ2VPdmVybGF5IHsKK3B1YmxpYzoKKyAgICBEZXZpY2VNZXRyaWNzU3VwcG9ydChXZWJW
aWV3SW1wbCogd2ViVmlldykKKyAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBpc1NpemVFbXVsYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4g
IW1fZW11bGF0ZWRGcmFtZVNpemUuaXNFbXB0eSgpOworICAgIH0KKworICAgIHZvaWQgc2V0RGV2
aWNlTWV0cmljcyhsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgZmxvYXQgdGV4dFpvb21GYWN0b3Ip
CisgICAgeworICAgICAgICBsb25nIHJlcXVlc3RlZFdpZHRoID0gd2lkdGg7CisgICAgICAgIFdl
YlNpemUgbmV3U2l6ZSA9IFdlYlNpemUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIHN0YXRpY19j
YXN0PGludD4oaGVpZ2h0KSk7CisKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0g
ZnJhbWVWaWV3KCk7CisgICAgICAgIGlmICghdmlldykgeworICAgICAgICAgICAgbV9lbXVsYXRl
ZEZyYW1lU2l6ZSA9IG5ld1NpemU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBtX3dlYlZpZXctPnNldEVtdWxhdGVkVGV4dFpvb21GYWN0b3IodGV4dFpvb21GYWN0
b3IpOworCisgICAgICAgIGJvb2wgY2FuY2VsRW11bGF0aW9uID0gIXdpZHRoICYmICFoZWlnaHQ7
CisKKyAgICAgICAgaWYgKGNhbmNlbEVtdWxhdGlvbikgeworICAgICAgICAgICAgaWYgKGlzU2l6
ZUVtdWxhdGVkKCkpIHsKKyAgICAgICAgICAgICAgICB2aWV3LT5zZXRIb3Jpem9udGFsU2Nyb2xs
YmFyTG9jayhmYWxzZSk7CisgICAgICAgICAgICAgICAgdmlldy0+c2V0VmVydGljYWxTY3JvbGxi
YXJMb2NrKGZhbHNlKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5zZXRTY3JvbGxiYXJNb2RlcyhT
Y3JvbGxiYXJBdXRvLCBTY3JvbGxiYXJBdXRvLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHZpZXctPnJlc2l6ZShJbnRTaXplKG1fd2ViVmlldy0+c2l6ZSgpKSk7CisgICAgICAgICAg
ICAgICAgbV93ZWJWaWV3LT5zZXRab29tTGV2ZWwoZmFsc2UsIDApOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFwcGx5U2l6ZU92ZXJyaWRlSW50ZXJuYWwodmll
dywgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgaWYgKGNhbmNlbEVtdWxhdGlvbikKKyAgICAg
ICAgICAgIG1fd2ViVmlldy0+cmVtb3ZlUGFnZU92ZXJsYXkodGhpcyk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgbV93ZWJWaWV3LT5zZXRab29tTGV2ZWwoZmFsc2UsIDApOworICAgICAg
ICAgICAgZG91YmxlIHpvb21GYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHJlcXVlc3RlZFdp
ZHRoKSAvIHZpZXctPmNvbnRlbnRzV2lkdGgoKTsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9
IHZpZXctPmZyYW1lKCk7CisgICAgICAgICAgICBpZiAoZnJhbWUpCisgICAgICAgICAgICAgICAg
ZnJhbWUtPnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoem9vbUZhY3RvciwgdGV4dFpvb21GYWN0
b3IpOworICAgICAgICAgICAgaWYgKCFpc1NpemVFbXVsYXRlZCgpKQorICAgICAgICAgICAgICAg
IG1fd2ViVmlldy0+YWRkUGFnZU92ZXJsYXkodGhpcywgOTcpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9lbXVsYXRlZEZyYW1lU2l6ZSA9IG5ld1NpemU7CisKKyAgICAgICAgbV93ZWJWaWV3LT5z
ZW5kUmVzaXplRXZlbnRBbmRSZXBhaW50KCk7CisgICAgfQorCisgICAgdm9pZCBhdXRvWm9vbVBh
Z2VUb0ZpdFdpZHRoKCkKKyAgICB7CisgICAgICAgIGlmICghaXNTaXplRW11bGF0ZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsb25nIG92ZXJyaWRlV2lkdGggPSAwOworICAg
ICAgICBGcmFtZSogZnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKTsK
KyAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZShmcmFtZSwgJm92
ZXJyaWRlV2lkdGgpOworICAgICAgICBpZiAoIW92ZXJyaWRlV2lkdGgpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV93ZWJWaWV3LT5zZXRab29tTGV2ZWwoZmFsc2UsIDApOworCisg
ICAgICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4ob3ZlcnJpZGVXaWR0
aCkgLyBmcmFtZS0+dmlldygpLT5jb250ZW50c1dpZHRoKCk7CisgICAgICAgIGZyYW1lLT5zZXRQ
YWdlQW5kVGV4dFpvb21GYWN0b3JzKHpvb21GYWN0b3IsIG1fd2ViVmlldy0+ZW11bGF0ZWRUZXh0
Wm9vbUZhY3RvcigpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGx5U2l6ZU92ZXJyaWRlSWZOZWNl
c3NhcnkoKQorICAgIHsKKyAgICAgICAgbG9uZyBvdmVycmlkZVdpZHRoID0gMDsKKyAgICAgICAg
bG9uZyBvdmVycmlkZUhlaWdodCA9IDA7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fd2ViVmll
dy0+bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlT
Y3JlZW5XaWR0aE92ZXJyaWRlKGZyYW1lLCAmb3ZlcnJpZGVXaWR0aCk7CisgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShmcmFtZSwgJm92
ZXJyaWRlSGVpZ2h0KTsKKyAgICAgICAgaWYgKCFvdmVycmlkZVdpZHRoIHx8ICFvdmVycmlkZUhl
aWdodCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZnJhbWUtPnZpZXcoKSkK
KyAgICAgICAgICAgIGFwcGx5U2l6ZU92ZXJyaWRlSW50ZXJuYWwoZnJhbWUtPnZpZXcoKSwgb3Zl
cnJpZGVXaWR0aCwgb3ZlcnJpZGVIZWlnaHQpOworICAgIH0KKworICAgIFdlYlNpemUgYXBwbHlT
aXplT3ZlcnJpZGVJbnRlcm5hbChGcmFtZVZpZXcqIGZyYW1lVmlldywgbG9uZyYgb3ZlcnJpZGVX
aWR0aCwgbG9uZyYgb3ZlcnJpZGVIZWlnaHQpCisgICAgeworICAgICAgICBmcmFtZVZpZXctPnNl
dFNjcm9sbGJhck1vZGVzKFNjcm9sbGJhckFsd2F5c09uLCBTY3JvbGxiYXJBbHdheXNPbiwgdHJ1
ZSwgdHJ1ZSk7CisgICAgICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsQmFyID0gZnJhbWVWaWV3
LT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICAgICAgb3ZlcnJpZGVXaWR0aCArPSAhdmVy
dGljYWxCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpID8gdmVydGljYWxCYXItPndpZHRoKCkgOiAw
OworICAgICAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsQmFyID0gZnJhbWVWaWV3LT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICBvdmVycmlkZUhlaWdodCArPSAhaG9yaXpv
bnRhbEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgPyBob3Jpem9udGFsQmFyLT5oZWlnaHQoKSA6
IDA7CisKKyAgICAgICAgaWYgKEludFNpemUob3ZlcnJpZGVXaWR0aCwgb3ZlcnJpZGVIZWlnaHQp
ICE9IGZyYW1lVmlldy0+c2l6ZSgpKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZXNpemUob3Zl
cnJpZGVXaWR0aCwgb3ZlcnJpZGVIZWlnaHQpOworCisgICAgICAgIGZyYW1lVmlldy0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+cmVjYWxjU3R5bGUoTm9kZTo6Rm9yY2UpOworICAgICAgICBmcmFtZVZp
ZXctPmZyYW1lKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworCisgICAgICAgIHJldHVy
biBXZWJTaXplKG92ZXJyaWRlV2lkdGgsIG92ZXJyaWRlSGVpZ2h0KTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFNpemUoY29uc3QgV2ViU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IGZyYW1lVmlldygpOworICAgICAgICBpZiAoIXZpZXcpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZShzaXpl
LndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgICAgIGlmICh2aWV3LT5zaXplKCkgPT0gbmV3U2l6
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2aWV3LT5yZXNpemUobmV3U2l6ZSk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKiBj
YW52YXMpCisgICAgeworICAgICAgICBpZiAoIWlzU2l6ZUVtdWxhdGVkKCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB0aGlzLT5mcmFtZVZp
ZXcoKTsKKyAgICAgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWlsZGVyKGNhbnZhcyk7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dCYgZ2MgPSBidWlsZGVyLmNvbnRleHQoKTsKKyAgICAgICAgZ2MuY2xpcE91
dChJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+c2l6ZSgpKSk7CisgICAgICAgIGdjLnNl
dEZpbGxDb2xvcihDb2xvcjo6ZGFya0dyYXksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAg
ICBnYy5kcmF3UmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fd2ViVmlldy0+c2l6ZSgpKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3dlYlZpZXctPm1haW5GcmFtZUltcGwoKSA/IG1fd2ViVmll
dy0+bWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKSA6IDA7CisgICAgfQorCisgICAgV2ViVmll
d0ltcGwqIG1fd2ViVmlldzsKKyAgICBXZWJTaXplIG1fZW11bGF0ZWRGcmFtZVNpemU7Cit9Owor
CisKIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0FnZW50SW1wbCgKICAgICBXZWJW
aWV3SW1wbCogd2ViVmlld0ltcGwsCiAgICAgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogY2xpZW50
KQpAQCAtMTgwLDYgKzMzMSw3IEBAIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0Fn
ZW50SW1wbCgKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fd2ViVmlld0ltcGwod2Vi
Vmlld0ltcGwpCiAgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQorICAgICwgbV9tZXRyaWNzU3VwcG9y
dChhZG9wdFB0cihuZXcgRGV2aWNlTWV0cmljc1N1cHBvcnQod2ViVmlld0ltcGwpKSkKIHsKICAg
ICBBU1NFUlQobV9ob3N0SWQgPiAwKTsKIH0KQEAgLTIzMSw2ICszODMsMzEgQEAgdm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKiB3ZWJm
cmFtZSkKICAgICAgICAgcHJveHktPnNldENvbnRleHREZWJ1Z0lkKG1faG9zdElkKTsKIH0KIAor
dm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkV2ViRnJhbWVSZXNpemUoV2ViRnJhbWVJbXBs
KiwgY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX21ldHJpY3NTdXBwb3J0LT5zZXRT
aXplKG5ld1NpemUpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjptYWluRnJhbWVW
aWV3Q3JlYXRlZChXZWJGcmFtZUltcGwqIHdlYkZyYW1lKQoreworICAgIG1fbWV0cmljc1N1cHBv
cnQtPmFwcGx5U2l6ZU92ZXJyaWRlSWZOZWNlc3NhcnkoKTsKK30KKworYm9vbCBXZWJEZXZUb29s
c0FnZW50SW1wbDo6YXJlTWV0cmljc0VtdWxhdGVkKCkKK3sKKyAgICByZXR1cm4gbV9tZXRyaWNz
U3VwcG9ydC0+aXNTaXplRW11bGF0ZWQoKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1w
bDo6b3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGludCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgZm9u
dFNjYWxlRmFjdG9yKQoreworICAgIG1fbWV0cmljc1N1cHBvcnQtPnNldERldmljZU1ldHJpY3Mo
d2lkdGgsIGhlaWdodCwgZm9udFNjYWxlRmFjdG9yKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6YXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpCit7CisgICAgbV9tZXRyaWNzU3VwcG9y
dC0+YXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpOworfQorCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yQmFja2VuZChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2Up
CiB7CiAgICAgaW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRl
bmQobWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuaAppbmRleCA2NmZkNmM2ZWVhNjg4YjAzOGRlNzI0NzdhM2IxOWM1YjUxNWE3
YjUxLi4xNzlkYjk4YzgxMzc3NzA5NTdiZjA1OWIyYmM0MzE1YmEwOTE3ZTc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKQEAgLTM1
LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCiAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQy
LDYgKzQzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERvY3VtZW50OwogY2xhc3Mg
RnJhbWU7CitjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJ
bnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwpAQCAtNTcsNiArNTks
NyBAQCBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkxSZXF1ZXN0OwogY2xhc3MgV2ViVVJM
UmVzcG9uc2U7CiBjbGFzcyBXZWJWaWV3SW1wbDsKK2NsYXNzIERldmljZU1ldHJpY3NTdXBwb3J0
Owogc3RydWN0IFdlYlVSTEVycm9yOwogc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGE7CiAK
QEAgLTY4LDcgKzcxLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJEZXZUb29sc0FnZW50
SW1wbCgpOwogCiAgICAgLy8gV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUgaW1wbGVtZW50YXRpb24u
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCogZnJh
bWUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUltcGwq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkV2ViRnJhbWVSZXNpemUoV2ViRnJhbWVJbXBsKiwgY29u
c3QgV2ViU2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBtYWluRnJhbWVWaWV3Q3JlYXRlZChXZWJG
cmFtZUltcGwqKTsKKyAgICB2aXJ0dWFsIGJvb2wgYXJlTWV0cmljc0VtdWxhdGVkKCk7CiAKICAg
ICAvLyBXZWJEZXZUb29sc0FnZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goKTsKQEAgLTk1LDYgKzEwMSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJCcm93c2VyQ2FjaGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ29va2llcygp
OwogCisgICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGZsb2F0IGZvbnRTY2FsZUZhY3Rvcik7CisgICAgdmlydHVhbCB2b2lkIGF1dG9a
b29tUGFnZVRvRml0V2lkdGgoKTsKKwogICAgIGludCBob3N0SWQoKSB7IHJldHVybiBtX2hvc3RJ
ZDsgfQogCiAgICAgLy8gV2ViUGFnZU92ZXJsYXkKQEAgLTEwOCw2ICsxMTcsNyBAQCBwcml2YXRl
OgogICAgIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIG1fY2xpZW50OwogICAgIFdlYlZpZXdJbXBs
KiBtX3dlYlZpZXdJbXBsOwogICAgIGJvb2wgbV9hdHRhY2hlZDsKKyAgICBPd25QdHI8RGV2aWNl
TWV0cmljc1N1cHBvcnQ+IG1fbWV0cmljc1N1cHBvcnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Fn
ZW50UHJpdmF0ZS5oCmluZGV4IDcwMzhhNWU1Y2I4MzJkZTAwOWFhN2E4YzZmNzJmY2FjNDBlNzg1
YTMuLjllYTMwZjY3NzI2NWI5ZjdiYWM4NTliMDEzNDE3ZTJlNjcyYWIxMzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaApA
QCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkZyYW1lSW1w
bDsKK2NsYXNzIFdlYlNpemU7CiAKIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlIDogcHVi
bGljIFdlYkRldlRvb2xzQWdlbnQgewogcHVibGljOgpAQCAtNDMsNiArNDQsMTIgQEAgcHVibGlj
OgogICAgIC8vIFRoZSB3aW5kb3cgb2JqZWN0IGZvciB0aGUgZnJhbWUgaGFzIGJlZW4gY2xlYXJl
ZCBvZiBhbnkgZXh0cmEgcHJvcGVydGllcwogICAgIC8vIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQg
Ynkgc2NyaXB0IGZyb20gdGhlIHByZXZpb3VzbHkgbG9hZGVkIGRvY3VtZW50LgogICAgIHZpcnR1
YWwgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUltcGwqKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkV2ViRnJhbWVSZXNpemUoV2ViRnJhbWVJbXBsKiwgY29uc3QgV2ViU2l6
ZSYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtYWluRnJhbWVWaWV3Q3JlYXRlZChXZWJGcmFt
ZUltcGwqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXJlTWV0cmljc0VtdWxhdGVkKCkgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCAzOTg5N2M4MjM2MmE4MzJjYmUyZjFjOWMxMjUzOGRh
YWEyYTc2OGIxLi4zZDQzYzFmNTk0NDc3OTdkMDRjZjRkODQ4ZTIzNGZmODI1NmUyY2JiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTE0Miw2ICsx
NDIsNyBAQAogI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViRE9NRXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
RGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIKQEAgLTIw
ODMsNiArMjA4NCw5IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpjcmVhdGVGcmFtZVZpZXcoKQogICAg
IG1fZnJhbWUtPmNyZWF0ZVZpZXcod2ViVmlldy0+c2l6ZSgpLCBDb2xvcjo6d2hpdGUsIHdlYlZp
ZXctPmlzVHJhbnNwYXJlbnQoKSwgIHdlYlZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpLCBpc01haW5G
cmFtZSA/IHdlYlZpZXctPmlzRml4ZWRMYXlvdXRNb2RlRW5hYmxlZCgpIDogMCk7CiAgICAgaWYg
KHdlYlZpZXctPnNob3VsZEF1dG9SZXNpemUoKSAmJiBpc01haW5GcmFtZSkKICAgICAgICAgbV9m
cmFtZS0+dmlldygpLT5lbmFibGVBdXRvU2l6ZU1vZGUodHJ1ZSwgd2ViVmlldy0+bWluQXV0b1Np
emUoKSwgd2ViVmlldy0+bWF4QXV0b1NpemUoKSk7CisKKyAgICBpZiAoaXNNYWluRnJhbWUgJiYg
d2ViVmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUoKSkKKyAgICAgICAgd2ViVmlldy0+ZGV2VG9v
bHNBZ2VudFByaXZhdGUoKS0+bWFpbkZyYW1lVmlld0NyZWF0ZWQodGhpcyk7CiB9CiAKIFdlYkZy
YW1lSW1wbCogV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDFiM2FiNTg5ZDZmN2M0ZTdh
YmRjMTExNDQ5ZDI3YTgxYmVmMjMxMjUuLjZmOTM3NjdmNGE1NWJiZGZmZTVhY2QxYmIzY2MwMWMz
ODI3YWYzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
QEAgLTEzNiw2ICsxMzYsNyBAQAogI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKICNpbmNsdWRl
ICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgInBhaW50
aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEcmFn
RGF0YS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkltYWdlLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCkBAIC0zNjUsNiArMzY2LDcgQEAgV2ViVmlld0lt
cGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICNlbmRpZgogICAgICwgbV9k
ZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5KGFkb3B0UHRyKG5ldyBEZXZpY2VPcmllbnRhdGlv
bkNsaWVudFByb3h5KGNsaWVudCA/IGNsaWVudC0+ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKSA6
IDApKSkKICAgICAsIG1fZ2VvbG9jYXRpb25DbGllbnRQcm94eShhZG9wdFB0cihuZXcgR2VvbG9j
YXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGllbnQtPmdlb2xvY2F0aW9uQ2xpZW50KCkgOiAw
KSkpCisgICAgLCBtX2VtdWxhdGVkVGV4dFpvb21GYWN0b3IoMSkKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQogICAgICwgbV91c2VyTWVkaWFDbGllbnRJbXBsKHRoaXMpCiAjZW5kaWYKQEAgLTEy
NjAsOCArMTI2MiwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYg
bmV3U2l6ZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAKLSAgICBp
ZiAobWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKSkKLSAgICAgICAgbWFpbkZyYW1lSW1wbCgp
LT5mcmFtZVZpZXcoKS0+cmVzaXplKG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisgICAg
aWYgKCFkZXZUb29sc0FnZW50UHJpdmF0ZSgpIHx8ICFkZXZUb29sc0FnZW50UHJpdmF0ZSgpLT5h
cmVNZXRyaWNzRW11bGF0ZWQoKSkgeworICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0g
bWFpbkZyYW1lSW1wbCgpOworICAgICAgICBpZiAod2ViRnJhbWUtPmZyYW1lVmlldygpKQorICAg
ICAgICAgICAgd2ViRnJhbWUtPmZyYW1lVmlldygpLT5yZXNpemUobmV3U2l6ZS53aWR0aCwgbmV3
U2l6ZS5oZWlnaHQpOworICAgIH0KIAogICAgIHNlbmRSZXNpemVFdmVudEFuZFJlcGFpbnQoKTsK
IH0KQEAgLTIyMTgsOSArMjIyMyw5IEBAIGRvdWJsZSBXZWJWaWV3SW1wbDo6c2V0Wm9vbUxldmVs
KGJvb2wgdGV4dE9ubHksIGRvdWJsZSB6b29tTGV2ZWwpCiAgICAgZWxzZSB7CiAgICAgICAgIGZs
b2F0IHpvb21GYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oem9vbUxldmVsVG9ab29tRmFjdG9y
KG1fem9vbUxldmVsKSk7CiAgICAgICAgIGlmICh0ZXh0T25seSkKLSAgICAgICAgICAgIGZyYW1l
LT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKDEsIHpvb21GYWN0b3IpOworICAgICAgICAgICAg
ZnJhbWUtPnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoMSwgem9vbUZhY3RvciAqIG1fZW11bGF0
ZWRUZXh0Wm9vbUZhY3Rvcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyYW1lLT5zZXRQ
YWdlQW5kVGV4dFpvb21GYWN0b3JzKHpvb21GYWN0b3IsIDEpOworICAgICAgICAgICAgZnJhbWUt
PnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoem9vbUZhY3RvciwgbV9lbXVsYXRlZFRleHRab29t
RmFjdG9yKTsKICAgICB9CiAgICAgcmV0dXJuIG1fem9vbUxldmVsOwogfQpAQCAtMjk5MCw2ICsy
OTk1LDEyIEBAIGJvb2wgV2ViVmlld0ltcGw6OnVzZUV4dGVybmFsUG9wdXBNZW51cygpCiAgICAg
cmV0dXJuIHNob3VsZFVzZUV4dGVybmFsUG9wdXBNZW51czsKIH0KIAordm9pZCBXZWJWaWV3SW1w
bDo6c2V0RW11bGF0ZWRUZXh0Wm9vbUZhY3RvcihmbG9hdCB0ZXh0Wm9vbUZhY3RvcikKK3sKKyAg
ICBtX2VtdWxhdGVkVGV4dFpvb21GYWN0b3IgPSB0ZXh0Wm9vbUZhY3RvcjsKKyAgICBtYWluRnJh
bWVJbXBsKCktPmZyYW1lKCktPnNldFRleHRab29tRmFjdG9yKG1fZW11bGF0ZWRUZXh0Wm9vbUZh
Y3Rvcik7Cit9CisKIGJvb2wgV2ViVmlld0ltcGw6Om5hdmlnYXRpb25Qb2xpY3lGcm9tTW91c2VF
dmVudCh1bnNpZ25lZCBzaG9ydCBidXR0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsLCBib29sIHNoaWZ0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0LCBib29sIG1ldGEs
CkBAIC0zNDMxLDcgKzM0NDIsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVW
aWV3cG9ydCgpCiAgICAgICAgIGxheWVyQWRqdXN0WCA9IC12aWV3LT5jb250ZW50c1NpemUoKS53
aWR0aCgpICsgdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKS53aWR0aCgpOwogICAgIH0K
ICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0Vmlld3BvcnQodmlzaWJsZVJlY3Qu
c2l6ZSgpLCB2aWV3LT5jb250ZW50c1NpemUoKSwgc2Nyb2xsLCBwYWdlU2NhbGVGYWN0b3IoKSwg
bGF5ZXJBZGp1c3RYKTsKLSAgICBtX2xheWVyVHJlZVZpZXcuc2V0Vmlld3BvcnRTaXplKHZpc2li
bGVSZWN0LnNpemUoKSk7CisgICAgbV9sYXllclRyZWVWaWV3LnNldFZpZXdwb3J0U2l6ZShzaXpl
KCkpOwogICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFn
ZVNjYWxlRmFjdG9yKCksIG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNj
YWxlRmFjdG9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
aW5kZXggMzA4MmQ0ZTAxMzVhZmVkYmEyNTMwODk0Y2U2MDAzYmU0MmI4NTFhZC4uYTUwZjFlYzIz
MzA5OTlhOTBlYjU1ZjBhZjMzYTJmZWIzZDg4MDM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCkBAIC00MDAsNiArNDAwLDEzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1faW5pdGlhbE5hdmlnYXRpb25Qb2xpY3k7CiAgICAgfQogCisgICAgZmxvYXQgZW11
bGF0ZWRUZXh0Wm9vbUZhY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbXVs
YXRlZFRleHRab29tRmFjdG9yOworICAgIH0KKworICAgIHZvaWQgc2V0RW11bGF0ZWRUZXh0Wm9v
bUZhY3RvcihmbG9hdCk7CisKICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYSBwYWdlIHNob3Vs
ZCBlLmcuIGJlIG9wZW5lZCBpbiBhIGJhY2tncm91bmQgdGFiLgogICAgIC8vIFJldHVybnMgZmFs
c2UgaWYgaXQgaGFzIG5vIG9waW5pb24sIGluIHdoaWNoIGNhc2UgaXQgZG9lc24ndCBzZXQgKnBv
bGljeS4KICAgICBzdGF0aWMgYm9vbCBuYXZpZ2F0aW9uUG9saWN5RnJvbU1vdXNlRXZlbnQoCkBA
IC00OTIsNiArNDk5LDkgQEAgcHVibGljOgogICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuRm9yRWxl
bWVudChXZWJDb3JlOjpFbGVtZW50Kik7CiAgICAgdm9pZCBleGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoV2ViQ29yZTo6RWxlbWVudCopOwogCisgICAgLy8gRXhwb3NlZCBmb3IgdGhlIHB1cnBvc2Ug
b2Ygb3ZlcnJpZGluZyBkZXZpY2UgbWV0cmljcy4KKyAgICB2b2lkIHNlbmRSZXNpemVFdmVudEFu
ZFJlcGFpbnQoKTsKKwogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCiAgICAg
Ym9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9s
bGJhcigpOwpAQCAtNTQ3LDcgKzU1Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhZ0FjdGlv
bik7CiAKLSAgICB2b2lkIHNlbmRSZXNpemVFdmVudEFuZFJlcGFpbnQoKTsKICAgICB2b2lkIGNv
bmZpZ3VyZUF1dG9SZXNpemVNb2RlKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkBAIC03MjUsNiArNzM0LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8RGV2aWNlT3JpZW50
YXRpb25DbGllbnRQcm94eT4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5OwogICAgIE93
blB0cjxHZW9sb2NhdGlvbkNsaWVudFByb3h5PiBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHk7CiAK
KyAgICBmbG9hdCBtX2VtdWxhdGVkVGV4dFpvb21GYWN0b3I7CisKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQogICAgIFVzZXJNZWRpYUNsaWVudEltcGwgbV91c2VyTWVkaWFDbGllbnRJbXBsOwog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134804</attachid>
            <date>2012-03-30 07:13:22 -0700</date>
            <delta_ts>2012-03-30 09:21:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82612-20120330181320.patch</filename>
            <type>text/plain</type>
            <size>19719</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDAwZmRhNTMzYTMyOTdhNjVhYzE2YTJhODIyYTEzNDQ1MTBhNzQ2OTUuLjk5YmRkYWEyNzU5MjFi
ZjIyZjk3NjUzNGNhYWIzYTI4NmJhNWZlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTItMDMtMzAgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEltcGxlbWVu
dCBDaHJvbWl1bS1zcGVjaWZpYyBwYXJ0IG9mIHRoZSBkZXZpY2UgbWV0cmljcyBlbXVsYXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjEyCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyB0aGUgQ2hyb21pdW0tc3BlY2lmaWMgY29k
ZSBmb3Igb3ZlcnJpZGluZyB0aGUgZGV2aWNlIG1ldHJpY3MsIHN1Y2ggYXMgc2NyZWVuIHNpemUK
KyAgICAgICAgKGJ5IHNldHRpbmcgdGhlIEZyYW1lVmlldyBzaXplKSBhbmQgZm9udCB6b29tIGZh
Y3RvciAobmVjZXNzYXJ5IGZvciBjZXJ0YWluIGVtdWxhdGVkIGRldmljZXMsKQorICAgICAgICBh
bmQgZm9yIHBhaW50aW5nIHRoZSBndXR0ZXIgb3ZlcmxheSBjb3ZlcmluZyB0aGUgV2ViVmlldyBh
cmVhIG5vdCBvY2N1cGllZCBieSB0aGUgYXNzb2NpYXRlZCBGcmFtZVZpZXcuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9yQ2xp
ZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmNhbk92
ZXJyaWRlRGV2aWNlTWV0cmljcyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpJbnNwZWN0b3JDbGllbnRJbXBsOjpvdmVycmlkZURldmljZU1ldHJpY3MpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBsOjphdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKToKKyAg
ICAgICAgKiBzcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oOgorICAgICAgICAoSW5zcGVjdG9yQ2xp
ZW50SW1wbCk6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAg
ICAgKERldmljZU1ldHJpY3NTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNlTWV0cmlj
c1N1cHBvcnQ6OkRldmljZU1ldHJpY3NTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNl
TWV0cmljc1N1cHBvcnQ6OnNldERldmljZU1ldHJpY3MpOgorICAgICAgICAoV2ViS2l0OjpEZXZp
Y2VNZXRyaWNzU3VwcG9ydDo6cmVzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkRldmljZU1ldHJp
Y3NTdXBwb3J0OjphdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKToKKyAgICAgICAgKFdlYktpdDo6RGV2
aWNlTWV0cmljc1N1cHBvcnQ6OmFwcGx5U2l6ZU92ZXJyaWRlSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViS2l0OjpEZXZpY2VNZXRyaWNzU3VwcG9ydDo6YXBwbHlTaXplT3ZlcnJpZGVJbnRlcm5h
bCk6CisgICAgICAgIChXZWJLaXQ6OkRldmljZU1ldHJpY3NTdXBwb3J0OjpwYWludFBhZ2VPdmVy
bGF5KToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNlTWV0cmljc1N1cHBvcnQ6OmZyYW1lVmlldyk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1w
bDo6V2ViRGV2VG9vbHNBZ2VudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6fldlYkRldlRvb2xzQWdlbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2
VG9vbHNBZ2VudEltcGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdl
bnRJbXBsOjpyZWF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBs
OjpkZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVj
dEVsZW1lbnRBdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNw
ZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6
Om1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNw
ZWN0b3JEZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkRldlRvb2xzQWdlbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudElt
cGw6Omhvc3RJZCk6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmg6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUpOgorICAg
ICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OmNyZWF0ZUZyYW1lVmlldyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRab29tTGV2ZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RW11bGF0ZWRU
ZXh0Wm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6ZW11bGF0ZWRUZXh0Wm9vbUZhY3Rvcik6CisKIDIwMTItMDMtMzAgIEtlaXNoaSBIYXR0
b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2hhbmdlIEVOQUJMRV9JTlBVVF9D
T0xPUiB0byBFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUiBhbmQgZW5hYmxlIGl0IGZvciBjaHJvbWl1
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmNwcAppbmRleCAzMTdiNTc2OTM0YTljOGVkYjU3YzUyZTBmNjFiNjhjYjMyYTU2MzExLi42Mjcw
NTViMDdjMjg3ZGIwMzlhODRjYzE3NjBkZGZmZGExNmY5MzNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcApAQCAtMTI4LDYgKzEy
OCwyMyBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmNsZWFyQnJvd3NlckNvb2tpZXMoKQog
ICAgICAgICBhZ2VudC0+Y2xlYXJCcm93c2VyQ29va2llcygpOwogfQogCitib29sIEluc3BlY3Rv
ckNsaWVudEltcGw6OmNhbk92ZXJyaWRlRGV2aWNlTWV0cmljcygpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6b3ZlcnJpZGVEZXZpY2VNZXRyaWNz
KGludCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgZm9udFNjYWxlRmFjdG9yKQoreworICAgIGlm
IChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBkZXZUb29sc0FnZW50KCkpCisgICAgICAg
IGFnZW50LT5vdmVycmlkZURldmljZU1ldHJpY3Mod2lkdGgsIGhlaWdodCwgZm9udFNjYWxlRmFj
dG9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjphdXRvWm9vbVBhZ2VUb0ZpdFdp
ZHRoKCkKK3sKKyAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gZGV2VG9vbHNB
Z2VudCgpKQorICAgICAgICBhZ2VudC0+YXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpOworfQorCiBX
ZWJEZXZUb29sc0FnZW50SW1wbCogSW5zcGVjdG9yQ2xpZW50SW1wbDo6ZGV2VG9vbHNBZ2VudCgp
CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4obV9pbnNw
ZWN0ZWRXZWJWaWV3LT5kZXZUb29sc0FnZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCmluZGV4IGIxNmI2ZjQ2ODE4YzMzY2U0Mjk1
ZTVmODNhNmE3NWM5YjVlMjFkMmMuLjVjY2VjODFkZDRhZjI1M2I0ZGI5MWI4MWE2NzVkMjBjMDUx
ODJkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNs
aWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGll
bnRJbXBsLmgKQEAgLTYzLDYgKzYzLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJCcm93c2VyQ2FjaGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2xlYXJCcm93c2VyQ29va2ll
cygpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDb29raWVzKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgY2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKCk7CisgICAgdmlydHVhbCB2b2lkIG92
ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQsIGludCwgZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBh
dXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCk7CisKIHByaXZhdGU6CiAgICAgV2ViRGV2VG9vbHNBZ2Vu
dEltcGwqIGRldlRvb2xzQWdlbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDUyZWIzNzQwMGY0ZTY5N2M0NTBk
YmYzMDhiNjhiYjljYTNjMDg3ZmIuLmIwMDc5MmRkOTg2NmZjNWUxOWI0NTUwNTk0MGRjZWE3YWY1
YTE2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29s
c0FnZW50SW1wbC5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJXZWJEZXZUb29sc0Fn
ZW50SW1wbC5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaCIKQEAgLTE3Myw2ICsxNzUsMTIxIEBAIHByaXZhdGU6CiAgICAgT3du
UHRyPFdlYkRldlRvb2xzQWdlbnQ6Ok1lc3NhZ2VEZXNjcmlwdG9yPiBtX2Rlc2NyaXB0b3I7CiB9
OwogCitjbGFzcyBEZXZpY2VNZXRyaWNzU3VwcG9ydCA6IHB1YmxpYyBXZWJQYWdlT3ZlcmxheSB7
CitwdWJsaWM6CisgICAgRGV2aWNlTWV0cmljc1N1cHBvcnQoV2ViVmlld0ltcGwqIHdlYlZpZXcp
CisgICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
c2V0RGV2aWNlTWV0cmljcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIGZsb2F0IHRleHRab29tRmFj
dG9yKQorICAgIHsKKyAgICAgICAgV2ViU2l6ZSBuZXdTaXplID0gV2ViU2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKworICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXcoKTsK
KyAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJvb2wg
d2FzRW11bGF0ZWQgPSAhbV9lbXVsYXRlZEZyYW1lU2l6ZS5pc0VtcHR5KCkgfHwgbV93ZWJWaWV3
LT5lbXVsYXRlZFRleHRab29tRmFjdG9yKCkgIT0gMTsKKworICAgICAgICBtX2VtdWxhdGVkRnJh
bWVTaXplID0gbmV3U2l6ZTsKKyAgICAgICAgbV93ZWJWaWV3LT5zZXRFbXVsYXRlZFRleHRab29t
RmFjdG9yKHRleHRab29tRmFjdG9yKTsKKyAgICAgICAgYXBwbHlTaXplT3ZlcnJpZGVJbnRlcm5h
bCh2aWV3LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYXV0b1pvb21QYWdlVG9GaXRXaWR0aCh2
aWV3LT5mcmFtZSgpKTsKKworICAgICAgICBpZiAoIXdhc0VtdWxhdGVkKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIGhhcHBlbnMgb25seSBvbmNlIHBlciB0aGUgaW5zdGFuY2UgY3JlYXRpb247Cisg
ICAgICAgICAgICAvLyBhZnRlcndhcmRzIHRoZSBlbXVsYXRlZCBmcmFtZSBzaXplIGlzIG5ldmVy
IGVtcHR5LgorICAgICAgICAgICAgbV93ZWJWaWV3LT5hZGRQYWdlT3ZlcmxheSh0aGlzLCA5Nyk7
CisgICAgICAgIH0KKworCisgICAgICAgIG1fd2ViVmlldy0+c2VuZFJlc2l6ZUV2ZW50QW5kUmVw
YWludCgpOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBtX3dl
YlZpZXctPnNldFpvb21MZXZlbChmYWxzZSwgMCk7CisgICAgICAgIG1fd2ViVmlldy0+cmVtb3Zl
UGFnZU92ZXJsYXkodGhpcyk7CisgICAgICAgIG1fd2ViVmlldy0+c2VuZFJlc2l6ZUV2ZW50QW5k
UmVwYWludCgpOworICAgICAgICBtX3dlYlZpZXctPnNldEVtdWxhdGVkVGV4dFpvb21GYWN0b3Io
MSk7CisKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWVWaWV3KCk7Cisg
ICAgICAgIGlmICghdmlldykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2aWV3LT5z
ZXRIb3Jpem9udGFsU2Nyb2xsYmFyTG9jayhmYWxzZSk7CisgICAgICAgIHZpZXctPnNldFZlcnRp
Y2FsU2Nyb2xsYmFyTG9jayhmYWxzZSk7CisgICAgICAgIHZpZXctPnNldFNjcm9sbGJhck1vZGVz
KFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhckF1dG8sIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHZp
ZXctPnJlc2l6ZShJbnRTaXplKG1fd2ViVmlldy0+c2l6ZSgpKSk7CisgICAgfQorCisgICAgdm9p
ZCBhdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIGlm
ICghZnJhbWUpCisgICAgICAgICAgICBmcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lSW1wbCgp
LT5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIG1fd2ViVmlldy0+c2V0Wm9vbUxldmVsKGZhbHNlLCAwKTsKKworICAgICAgICBmbG9h
dCB6b29tRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZW11bGF0ZWRGcmFtZVNpemUud2lk
dGgpIC8gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNXaWR0aCgpOworICAgICAgICBmcmFtZS0+c2V0
UGFnZUFuZFRleHRab29tRmFjdG9ycyh6b29tRmFjdG9yLCBtX3dlYlZpZXctPmVtdWxhdGVkVGV4
dFpvb21GYWN0b3IoKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBseVNpemVPdmVycmlkZUlmTmVj
ZXNzYXJ5KCkKKyAgICB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZy
YW1lSW1wbCgpLT5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChmcmFtZS0+dmlldygpKSB7CisgICAgICAgICAgICBpbnQgb3Zl
cnJpZGVXaWR0aCA9IG1fZW11bGF0ZWRGcmFtZVNpemUud2lkdGg7CisgICAgICAgICAgICBpbnQg
b3ZlcnJpZGVIZWlnaHQgPSBtX2VtdWxhdGVkRnJhbWVTaXplLmhlaWdodDsKKyAgICAgICAgICAg
IGFwcGx5U2l6ZU92ZXJyaWRlSW50ZXJuYWwoZnJhbWUtPnZpZXcoKSwgb3ZlcnJpZGVXaWR0aCwg
b3ZlcnJpZGVIZWlnaHQpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
YXBwbHlTaXplT3ZlcnJpZGVJbnRlcm5hbChGcmFtZVZpZXcqIGZyYW1lVmlldywgaW50IG92ZXJy
aWRlV2lkdGgsIGludCBvdmVycmlkZUhlaWdodCkKKyAgICB7CisgICAgICAgIGZyYW1lVmlldy0+
c2V0U2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyQWx3YXlzT24sIFNjcm9sbGJhckFsd2F5c09uLCB0
cnVlLCB0cnVlKTsKKyAgICAgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxCYXIgPSBmcmFtZVZp
ZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICBvdmVycmlkZVdpZHRoICs9ICF2
ZXJ0aWNhbEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgPyB2ZXJ0aWNhbEJhci0+d2lkdGgoKSA6
IDA7CisgICAgICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxCYXIgPSBmcmFtZVZpZXctPmhv
cml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgIG92ZXJyaWRlSGVpZ2h0ICs9ICFob3Jp
em9udGFsQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSA/IGhvcml6b250YWxCYXItPmhlaWdodCgp
IDogMDsKKworICAgICAgICBpZiAoSW50U2l6ZShvdmVycmlkZVdpZHRoLCBvdmVycmlkZUhlaWdo
dCkgIT0gZnJhbWVWaWV3LT5zaXplKCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlc2l6ZShv
dmVycmlkZVdpZHRoLCBvdmVycmlkZUhlaWdodCk7CisKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9
IGZyYW1lVmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgZG9jLT5yZWNhbGNTdHls
ZShOb2RlOjpGb3JjZSk7CisgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0KCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKiBjYW52YXMpCisgICAg
eworICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRoaXMtPmZyYW1lVmlldygpOworICAg
ICAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBHcmFw
aGljc0NvbnRleHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzKTsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0JiBnYyA9IGJ1aWxkZXIuY29udGV4dCgpOworICAgICAgICBnYy5jbGlwT3V0KEludFJlY3Qo
SW50UG9pbnQoKSwgZnJhbWVWaWV3LT5zaXplKCkpKTsKKyAgICAgICAgZ2Muc2V0RmlsbENvbG9y
KENvbG9yOjpkYXJrR3JheSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGdjLmRyYXdS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV93ZWJWaWV3LT5zaXplKCkpKTsKKyAgICB9CisKKyAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZyYW1lVmlldygpCisgICAgeworICAgICAgICByZXR1cm4g
bV93ZWJWaWV3LT5tYWluRnJhbWVJbXBsKCkgPyBtX3dlYlZpZXctPm1haW5GcmFtZUltcGwoKS0+
ZnJhbWVWaWV3KCkgOiAwOworICAgIH0KKworICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXc7Cisg
ICAgV2ViU2l6ZSBtX2VtdWxhdGVkRnJhbWVTaXplOworfTsKKworCiBXZWJEZXZUb29sc0FnZW50
SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwoCiAgICAgV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBs
LAogICAgIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGNsaWVudCkKQEAgLTIzMSw2ICszNDgsMzYg
QEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2ViRnJh
bWVJbXBsKiB3ZWJmcmFtZSkKICAgICAgICAgcHJveHktPnNldENvbnRleHREZWJ1Z0lkKG1faG9z
dElkKTsKIH0KIAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6bWFpbkZyYW1lVmlld0NyZWF0
ZWQoV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSkKK3sKKyAgICBpZiAobV9tZXRyaWNzU3VwcG9ydCkK
KyAgICAgICAgbV9tZXRyaWNzU3VwcG9ydC0+YXBwbHlTaXplT3ZlcnJpZGVJZk5lY2Vzc2FyeSgp
OworfQorCitib29sIFdlYkRldlRvb2xzQWdlbnRJbXBsOjptZXRyaWNzT3ZlcnJpZGRlbigpCit7
CisgICAgcmV0dXJuICEhbV9tZXRyaWNzU3VwcG9ydDsKK30KKwordm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6b3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGludCB3aWR0aCwgaW50IGhlaWdodCwgZmxv
YXQgZm9udFNjYWxlRmFjdG9yKQoreworICAgIGlmICghd2lkdGggJiYgIWhlaWdodCAmJiBmb250
U2NhbGVGYWN0b3IgPT0gMSkgeworICAgICAgICBtX21ldHJpY3NTdXBwb3J0LT5yZXN0b3JlKCk7
CisgICAgICAgIG1fbWV0cmljc1N1cHBvcnQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9tZXRyaWNzU3VwcG9ydCkKKyAgICAgICAgbV9tZXRyaWNzU3VwcG9y
dCA9IGFkb3B0UHRyKG5ldyBEZXZpY2VNZXRyaWNzU3VwcG9ydChtX3dlYlZpZXdJbXBsKSk7Cisg
ICAgbV9tZXRyaWNzU3VwcG9ydC0+c2V0RGV2aWNlTWV0cmljcyh3aWR0aCwgaGVpZ2h0LCBmb250
U2NhbGVGYWN0b3IpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjphdXRvWm9vbVBh
Z2VUb0ZpdFdpZHRoKCkKK3sKKyAgICBpZiAobV9tZXRyaWNzU3VwcG9ydCkKKyAgICAgICAgbV9t
ZXRyaWNzU3VwcG9ydC0+YXV0b1pvb21QYWdlVG9GaXRXaWR0aCgwKTsKK30KKwogdm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6ZGlzcGF0Y2hPbkluc3BlY3RvckJhY2tlbmQoY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYWdlKQogewogICAgIGluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKaW5kZXggNjZmZDZjNmVlYTY4OGIwMzhkZTcyNDc3
YTNiMTljNWI1MTVhN2I1MS4uOTg4MDZhNDlhOTQ1ZTg3YjI4NmMwYzYwNGNkYmQ5ZTZmOTcxZDBk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5oCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50UHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAicGxhdGZvcm0v
V2ViU2l6ZS5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CkBAIC00Miw2ICs0Myw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEb2N1
bWVudDsKIGNsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsK
QEAgLTUwLDYgKzUyLDcgQEAgY2xhc3MgTm9kZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2Ns
YXNzIERldmljZU1ldHJpY3NTdXBwb3J0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsK
IGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViRnJhbWVJbXBsOwpAQCAtNjgsNyArNzEsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+V2ViRGV2VG9vbHNBZ2VudEltcGwoKTsKIAogICAgIC8vIFdl
YkRldlRvb2xzQWdlbnRQcml2YXRlIGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBk
aWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUltcGwqIGZyYW1lKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKik7CisgICAgdmlydHVhbCB2b2lk
IG1haW5GcmFtZVZpZXdDcmVhdGVkKFdlYkZyYW1lSW1wbCopOworICAgIHZpcnR1YWwgYm9vbCBt
ZXRyaWNzT3ZlcnJpZGRlbigpOwogCiAgICAgLy8gV2ViRGV2VG9vbHNBZ2VudCBpbXBsZW1lbnRh
dGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkBAIC05NSw2ICsxMDAsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNhY2hlKCk7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyQnJvd3NlckNvb2tpZXMoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZURl
dmljZU1ldHJpY3MoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBmbG9hdCBmb250U2NhbGVGYWN0b3Ip
OworICAgIHZpcnR1YWwgdm9pZCBhdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCk7CisKICAgICBpbnQg
aG9zdElkKCkgeyByZXR1cm4gbV9ob3N0SWQ7IH0KIAogICAgIC8vIFdlYlBhZ2VPdmVybGF5CkBA
IC0xMDgsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJEZXZUb29sc0FnZW50Q2xpZW50KiBt
X2NsaWVudDsKICAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKICAgICBib29sIG1fYXR0
YWNoZWQ7CisgICAgT3duUHRyPERldmljZU1ldHJpY3NTdXBwb3J0PiBtX21ldHJpY3NTdXBwb3J0
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaAppbmRleCA3MDM4YTVlNWNiODMy
ZGUwMDlhYTdhOGM2ZjcyZmNhYzQwZTc4NWEzLi4xMTJjNzRlMjE4M2JmZDFlYzlhNjQ1YTk1MDBk
MGVmMDYxZGJhMzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRldlRvb2xzQWdlbnRQcml2YXRlLmgKQEAgLTM1LDE0ICszNSwyMiBAQAogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIFdlYkZyYW1lSW1wbDsKK2NsYXNzIFdlYlNpemU7CiAKIGNsYXNzIFdl
YkRldlRvb2xzQWdlbnRQcml2YXRlIDogcHVibGljIFdlYkRldlRvb2xzQWdlbnQgewogcHVibGlj
OgotICAgIC8vIE5vdGlmaWNhdGlvbnMgZnJvbSBGcmFtZUxvYWRlckNsaWVudEltcGw6CiAKKyAg
ICAvLyBOb3RpZmljYXRpb24gZnJvbSBGcmFtZUxvYWRlckNsaWVudEltcGw6CiAgICAgLy8gVGhl
IHdpbmRvdyBvYmplY3QgZm9yIHRoZSBmcmFtZSBoYXMgYmVlbiBjbGVhcmVkIG9mIGFueSBleHRy
YSBwcm9wZXJ0aWVzCiAgICAgLy8gdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBieSBzY3JpcHQgZnJv
bSB0aGUgcHJldmlvdXNseSBsb2FkZWQgZG9jdW1lbnQuCiAgICAgdmlydHVhbCB2b2lkIGRpZENs
ZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCopID0gMDsKKworICAgIC8vIEEgbmV3IEZyYW1l
VmlldyBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGUgc3BlY2lmaWVkIFdlYkZyYW1lIHVzaW5nCisg
ICAgLy8gdGhlIEZyYW1lOjpjcmVhdGVWaWV3KCkgY2FsbC4KKyAgICB2aXJ0dWFsIHZvaWQgbWFp
bkZyYW1lVmlld0NyZWF0ZWQoV2ViRnJhbWVJbXBsKikgPSAwOworCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBkZXZpY2UgbWV0cmljcyBvdmVycmlkZSBtb2RlIGlzIGVuYWJsZWQuCisgICAg
dmlydHVhbCBib29sIG1ldHJpY3NPdmVycmlkZGVuKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApp
bmRleCAzOTg5N2M4MjM2MmE4MzJjYmUyZjFjOWMxMjUzOGRhYWEyYTc2OGIxLi4zZDQzYzFmNTk0
NDc3OTdkMDRjZjRkODQ4ZTIzNGZmODI1NmUyY2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTE0Miw2ICsxNDIsNyBAQAogI2luY2x1ZGUgIldl
YkRPTUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IldlYkRhdGFTb3VyY2VJbXBsLmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUu
aCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgi
CiAjaW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIKQEAgLTIwODMsNiArMjA4NCw5IEBAIHZvaWQg
V2ViRnJhbWVJbXBsOjpjcmVhdGVGcmFtZVZpZXcoKQogICAgIG1fZnJhbWUtPmNyZWF0ZVZpZXco
d2ViVmlldy0+c2l6ZSgpLCBDb2xvcjo6d2hpdGUsIHdlYlZpZXctPmlzVHJhbnNwYXJlbnQoKSwg
IHdlYlZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpLCBpc01haW5GcmFtZSA/IHdlYlZpZXctPmlzRml4
ZWRMYXlvdXRNb2RlRW5hYmxlZCgpIDogMCk7CiAgICAgaWYgKHdlYlZpZXctPnNob3VsZEF1dG9S
ZXNpemUoKSAmJiBpc01haW5GcmFtZSkKICAgICAgICAgbV9mcmFtZS0+dmlldygpLT5lbmFibGVB
dXRvU2l6ZU1vZGUodHJ1ZSwgd2ViVmlldy0+bWluQXV0b1NpemUoKSwgd2ViVmlldy0+bWF4QXV0
b1NpemUoKSk7CisKKyAgICBpZiAoaXNNYWluRnJhbWUgJiYgd2ViVmlldy0+ZGV2VG9vbHNBZ2Vu
dFByaXZhdGUoKSkKKyAgICAgICAgd2ViVmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUoKS0+bWFp
bkZyYW1lVmlld0NyZWF0ZWQodGhpcyk7CiB9CiAKIFdlYkZyYW1lSW1wbCogV2ViRnJhbWVJbXBs
Ojpmcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCmluZGV4IDFiM2FiNTg5ZDZmN2M0ZTdhYmRjMTExNDQ5ZDI3YTgxYmVmMjMx
MjUuLmExYTliZGE5YTUzZjJlYjAwMTFkMWI5ZmZjOGVlY2Y4MjQzMjQ3MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTEzNiw2ICsxMzYsNyBAQAog
I2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAjaW5j
bHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1
aWxkZXIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEcmFnRGF0YS5oIgogI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkltYWdlLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBw
b3J0LmgiCkBAIC0zNjUsNiArMzY2LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZp
ZXdDbGllbnQqIGNsaWVudCkKICNlbmRpZgogICAgICwgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVu
dFByb3h5KGFkb3B0UHRyKG5ldyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5KGNsaWVudCA/
IGNsaWVudC0+ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKSA6IDApKSkKICAgICAsIG1fZ2VvbG9j
YXRpb25DbGllbnRQcm94eShhZG9wdFB0cihuZXcgR2VvbG9jYXRpb25DbGllbnRQcm94eShjbGll
bnQgPyBjbGllbnQtPmdlb2xvY2F0aW9uQ2xpZW50KCkgOiAwKSkpCisgICAgLCBtX2VtdWxhdGVk
VGV4dFpvb21GYWN0b3IoMSkKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICwgbV91c2Vy
TWVkaWFDbGllbnRJbXBsKHRoaXMpCiAjZW5kaWYKQEAgLTEyNjAsOCArMTI2MiwxMSBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAKLSAgICBpZiAobWFpbkZyYW1lSW1wbCgpLT5m
cmFtZVZpZXcoKSkKLSAgICAgICAgbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKS0+cmVzaXpl
KG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisgICAgaWYgKCFkZXZUb29sc0FnZW50UHJp
dmF0ZSgpIHx8ICFkZXZUb29sc0FnZW50UHJpdmF0ZSgpLT5tZXRyaWNzT3ZlcnJpZGRlbigpKSB7
CisgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAg
ICAgIGlmICh3ZWJGcmFtZS0+ZnJhbWVWaWV3KCkpCisgICAgICAgICAgICB3ZWJGcmFtZS0+ZnJh
bWVWaWV3KCktPnJlc2l6ZShuZXdTaXplLndpZHRoLCBuZXdTaXplLmhlaWdodCk7CisgICAgfQog
CiAgICAgc2VuZFJlc2l6ZUV2ZW50QW5kUmVwYWludCgpOwogfQpAQCAtMjIxOCw5ICsyMjIzLDkg
QEAgZG91YmxlIFdlYlZpZXdJbXBsOjpzZXRab29tTGV2ZWwoYm9vbCB0ZXh0T25seSwgZG91Ymxl
IHpvb21MZXZlbCkKICAgICBlbHNlIHsKICAgICAgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0YXRp
Y19jYXN0PGZsb2F0Pih6b29tTGV2ZWxUb1pvb21GYWN0b3IobV96b29tTGV2ZWwpKTsKICAgICAg
ICAgaWYgKHRleHRPbmx5KQotICAgICAgICAgICAgZnJhbWUtPnNldFBhZ2VBbmRUZXh0Wm9vbUZh
Y3RvcnMoMSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBmcmFtZS0+c2V0UGFnZUFuZFRleHRa
b29tRmFjdG9ycygxLCB6b29tRmFjdG9yICogbV9lbXVsYXRlZFRleHRab29tRmFjdG9yKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZnJhbWUtPnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMo
em9vbUZhY3RvciwgMSk7CisgICAgICAgICAgICBmcmFtZS0+c2V0UGFnZUFuZFRleHRab29tRmFj
dG9ycyh6b29tRmFjdG9yLCBtX2VtdWxhdGVkVGV4dFpvb21GYWN0b3IpOwogICAgIH0KICAgICBy
ZXR1cm4gbV96b29tTGV2ZWw7CiB9CkBAIC0yOTkwLDYgKzI5OTUsMTQgQEAgYm9vbCBXZWJWaWV3
SW1wbDo6dXNlRXh0ZXJuYWxQb3B1cE1lbnVzKCkKICAgICByZXR1cm4gc2hvdWxkVXNlRXh0ZXJu
YWxQb3B1cE1lbnVzOwogfQogCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRFbXVsYXRlZFRleHRab29t
RmFjdG9yKGZsb2F0IHRleHRab29tRmFjdG9yKQoreworICAgIG1fZW11bGF0ZWRUZXh0Wm9vbUZh
Y3RvciA9IHRleHRab29tRmFjdG9yOworICAgIEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZUltcGwo
KS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5zZXRQYWdlQW5kVGV4
dFpvb21GYWN0b3JzKGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpLCBtX2VtdWxhdGVkVGV4dFpvb21G
YWN0b3IpOworfQorCiBib29sIFdlYlZpZXdJbXBsOjpuYXZpZ2F0aW9uUG9saWN5RnJvbU1vdXNl
RXZlbnQodW5zaWduZWQgc2hvcnQgYnV0dG9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybCwgYm9vbCBzaGlmdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdCwgYm9vbCBtZXRh
LApAQCAtMzQzMSw3ICszNDQ0LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVl
Vmlld3BvcnQoKQogICAgICAgICBsYXllckFkanVzdFggPSAtdmlldy0+Y29udGVudHNTaXplKCku
d2lkdGgoKSArIHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSkud2lkdGgoKTsKICAgICB9
CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnNldFZpZXdwb3J0KHZpc2libGVSZWN0
LnNpemUoKSwgdmlldy0+Y29udGVudHNTaXplKCksIHNjcm9sbCwgcGFnZVNjYWxlRmFjdG9yKCks
IGxheWVyQWRqdXN0WCk7Ci0gICAgbV9sYXllclRyZWVWaWV3LnNldFZpZXdwb3J0U2l6ZSh2aXNp
YmxlUmVjdC5zaXplKCkpOworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRWaWV3cG9ydFNpemUoc2l6
ZSgpKTsKICAgICBtX2xheWVyVHJlZVZpZXcuc2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBh
Z2VTY2FsZUZhY3RvcigpLCBtX21pbmltdW1QYWdlU2NhbGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VT
Y2FsZUZhY3Rvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CmluZGV4IDMwODJkNGUwMTM1YWZlZGJhMjUzMDg5NGNlNjAwM2JlNDJiODUxYWQuLjk5YTA0Yjhj
NjMwMTEyNWMzZjg0ZmE5NjZhMzMxZTU1OTM2NzNiMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNDAwLDYgKzQwMCwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2luaXRpYWxOYXZpZ2F0aW9uUG9saWN5OwogICAgIH0KIAorICAgIC8vIFNldHMg
dGhlIGVtdWxhdGVkIHRleHQgem9vbSBmYWN0b3IKKyAgICAvLyAobWF5IG5vdCBiZSAxIGluIHRo
ZSBkZXZpY2UgbWV0cmljcyBlbXVsYXRpb24gbW9kZSkuCisgICAgdm9pZCBzZXRFbXVsYXRlZFRl
eHRab29tRmFjdG9yKGZsb2F0KTsKKworICAgIC8vIFJldHVybnMgdGhlIGVtdWxhdGVkIHRleHQg
em9vbSBmYWN0b3IKKyAgICAvLyAod2hpY2ggbWF5IG5vdCBiZSAxIGluIHRoZSBkZXZpY2UgbWV0
cmljcyBlbXVsYXRpb24gbW9kZSkuCisgICAgZmxvYXQgZW11bGF0ZWRUZXh0Wm9vbUZhY3Rvcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbXVsYXRlZFRleHRab29tRmFjdG9yOwor
ICAgIH0KKwogICAgIC8vIERldGVybWluZXMgd2hldGhlciBhIHBhZ2Ugc2hvdWxkIGUuZy4gYmUg
b3BlbmVkIGluIGEgYmFja2dyb3VuZCB0YWIuCiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCBo
YXMgbm8gb3BpbmlvbiwgaW4gd2hpY2ggY2FzZSBpdCBkb2Vzbid0IHNldCAqcG9saWN5LgogICAg
IHN0YXRpYyBib29sIG5hdmlnYXRpb25Qb2xpY3lGcm9tTW91c2VFdmVudCgKQEAgLTQ5Miw2ICs1
MDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNv
cmU6OkVsZW1lbnQqKTsKICAgICB2b2lkIGV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3Jl
OjpFbGVtZW50Kik7CiAKKyAgICAvLyBFeHBvc2VkIGZvciB0aGUgcHVycG9zZSBvZiBvdmVycmlk
aW5nIGRldmljZSBtZXRyaWNzLgorICAgIHZvaWQgc2VuZFJlc2l6ZUV2ZW50QW5kUmVwYWludCgp
OworCiAgICAgLy8gRXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KICAgICBib29sIGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKTsKICAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCk7CkBA
IC01NDcsNyArNTYxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmFnQWN0aW9uKTsKIAotICAg
IHZvaWQgc2VuZFJlc2l6ZUV2ZW50QW5kUmVwYWludCgpOwogICAgIHZvaWQgY29uZmlndXJlQXV0
b1Jlc2l6ZU1vZGUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTcy
NSw2ICs3MzgsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dFByb3h5PiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHk7CiAgICAgT3duUHRyPEdlb2xv
Y2F0aW9uQ2xpZW50UHJveHk+IG1fZ2VvbG9jYXRpb25DbGllbnRQcm94eTsKIAorICAgIGZsb2F0
IG1fZW11bGF0ZWRUZXh0Wm9vbUZhY3RvcjsKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgVXNlck1lZGlhQ2xpZW50SW1wbCBtX3VzZXJNZWRpYUNsaWVudEltcGw7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134825</attachid>
            <date>2012-03-30 09:21:15 -0700</date>
            <delta_ts>2012-03-30 10:01:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82612-20120330202113.patch</filename>
            <type>text/plain</type>
            <size>19009</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGQ1YzYyOTFmNGMwNTAzZWEzZDEzOGUwNGM4NWFmZDliYjRlMzAyZjEuLjAwYjBmZTYzNzdmYmI2
NTQxYjk3NDU4MDhkZWIwYTAwNjQ5YTQxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTItMDMtMzAgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEltcGxlbWVu
dCBDaHJvbWl1bS1zcGVjaWZpYyBwYXJ0IG9mIHRoZSBkZXZpY2UgbWV0cmljcyBlbXVsYXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjEyCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyB0aGUgQ2hyb21pdW0tc3BlY2lmaWMgY29k
ZSBmb3Igb3ZlcnJpZGluZyB0aGUgZGV2aWNlIG1ldHJpY3MsIHN1Y2ggYXMgc2NyZWVuIHNpemUK
KyAgICAgICAgKGJ5IHNldHRpbmcgdGhlIEZyYW1lVmlldyBzaXplKSBhbmQgZm9udCB6b29tIGZh
Y3RvciAobmVjZXNzYXJ5IGZvciBjZXJ0YWluIGVtdWxhdGVkIGRldmljZXMsKQorICAgICAgICBh
bmQgZm9yIHBhaW50aW5nIHRoZSBndXR0ZXIgb3ZlcmxheSBjb3ZlcmluZyB0aGUgV2ViVmlldyBh
cmVhIG5vdCBvY2N1cGllZCBieSB0aGUgYXNzb2NpYXRlZCBGcmFtZVZpZXcuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9yQ2xp
ZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmNhbk92
ZXJyaWRlRGV2aWNlTWV0cmljcyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpJbnNwZWN0b3JDbGllbnRJbXBsOjpvdmVycmlkZURldmljZU1ldHJpY3MpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBsOjphdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKToKKyAg
ICAgICAgKiBzcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oOgorICAgICAgICAoSW5zcGVjdG9yQ2xp
ZW50SW1wbCk6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAg
ICAgKERldmljZU1ldHJpY3NTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNlTWV0cmlj
c1N1cHBvcnQ6OkRldmljZU1ldHJpY3NTdXBwb3J0KToKKyAgICAgICAgKFdlYktpdDo6RGV2aWNl
TWV0cmljc1N1cHBvcnQ6On5EZXZpY2VNZXRyaWNzU3VwcG9ydCk6CisgICAgICAgIChXZWJLaXQ6
OkRldmljZU1ldHJpY3NTdXBwb3J0OjpzZXREZXZpY2VNZXRyaWNzKToKKyAgICAgICAgKFdlYktp
dDo6RGV2aWNlTWV0cmljc1N1cHBvcnQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpEZXZp
Y2VNZXRyaWNzU3VwcG9ydDo6YXV0b1pvb21QYWdlVG9GaXRXaWR0aCk6CisgICAgICAgIChXZWJL
aXQ6OkRldmljZU1ldHJpY3NTdXBwb3J0OjphcHBseVNpemVPdmVycmlkZUlmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYktpdDo6RGV2aWNlTWV0cmljc1N1cHBvcnQ6OmFwcGx5U2l6ZU92ZXJyaWRl
SW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpEZXZpY2VNZXRyaWNzU3VwcG9ydDo6cGFpbnRQ
YWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkRldmljZU1ldHJpY3NTdXBwb3J0OjpmcmFt
ZVZpZXcpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNB
Z2VudEltcGw6Om1haW5GcmFtZVZpZXdDcmVhdGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2
VG9vbHNBZ2VudEltcGw6Om1ldHJpY3NPdmVycmlkZGVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGV2VG9vbHNBZ2VudEltcGw6Om92ZXJyaWRlRGV2aWNlTWV0cmljcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKToKKyAgICAg
ICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkRldlRvb2xzQWdlbnRJbXBsKToKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6Y3JlYXRlRnJhbWVWaWV3KToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6V2ViVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFpvb21MZXZlbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRFbXVsYXRlZFRleHRab29tRmFjdG9yKToKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRy
ZWVWaWV3cG9ydCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJW
aWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjplbXVsYXRlZFRleHRab29t
RmFjdG9yKToKKwogMjAxMi0wMy0zMCAgSmVzdXMgU2FuY2hlei1QYWxlbmNpYSAgPGplc3VzLnBh
bGVuY2lhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgQWRkIGEgInByZXZpZXciIHN0YXRlIHRv
IFBhZ2UgVmlzaWJpbGl0eSBBUEkgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKaW5kZXggMzE3YjU3NjkzNGE5
YzhlZGI1N2M1MmUwZjYxYjY4Y2IzMmE1NjMxMS4uNjI3MDU1YjA3YzI4N2RiMDM5YTg0Y2MxNzYw
ZGRmZmRhMTZmOTMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5jcHAKQEAgLTEyOCw2ICsxMjgsMjMgQEAgdm9pZCBJbnNwZWN0b3JD
bGllbnRJbXBsOjpjbGVhckJyb3dzZXJDb29raWVzKCkKICAgICAgICAgYWdlbnQtPmNsZWFyQnJv
d3NlckNvb2tpZXMoKTsKIH0KIAorYm9vbCBJbnNwZWN0b3JDbGllbnRJbXBsOjpjYW5PdmVycmlk
ZURldmljZU1ldHJpY3MoKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3BlY3Rv
ckNsaWVudEltcGw6Om92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGZsb2F0IGZvbnRTY2FsZUZhY3RvcikKK3sKKyAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwq
IGFnZW50ID0gZGV2VG9vbHNBZ2VudCgpKQorICAgICAgICBhZ2VudC0+b3ZlcnJpZGVEZXZpY2VN
ZXRyaWNzKHdpZHRoLCBoZWlnaHQsIGZvbnRTY2FsZUZhY3Rvcik7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ2xpZW50SW1wbDo6YXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpCit7CisgICAgaWYgKFdlYkRl
dlRvb2xzQWdlbnRJbXBsKiBhZ2VudCA9IGRldlRvb2xzQWdlbnQoKSkKKyAgICAgICAgYWdlbnQt
PmF1dG9ab29tUGFnZVRvRml0V2lkdGgoKTsKK30KKwogV2ViRGV2VG9vbHNBZ2VudEltcGwqIElu
c3BlY3RvckNsaWVudEltcGw6OmRldlRvb2xzQWdlbnQoKQogewogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJEZXZUb29sc0FnZW50SW1wbCo+KG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNB
Z2VudCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3Rv
ckNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVu
dEltcGwuaAppbmRleCBiMTZiNmY0NjgxOGMzM2NlNDI5NWU1ZjgzYTZhNzVjOWI1ZTIxZDJjLi41
Y2NlYzgxZGQ0YWYyNTNiNGRiOTFiODFhNjc1ZDIwYzA1MTgyZGQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCkBAIC02Myw2ICs2Mywx
MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNhY2hlKCk7CiAgICAg
dmlydHVhbCBib29sIGNhbkNsZWFyQnJvd3NlckNvb2tpZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJCcm93c2VyQ29va2llcygpOworCisgICAgdmlydHVhbCBib29sIGNhbk92ZXJyaWRlRGV2
aWNlTWV0cmljcygpOworICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZURldmljZU1ldHJpY3MoaW50
LCBpbnQsIGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXV0b1pvb21QYWdlVG9GaXRXaWR0aCgp
OworCiBwcml2YXRlOgogICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiBkZXZUb29sc0FnZW50KCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmNwcAppbmRleCA1MmViMzc0MDBmNGU2OTdjNDUwZGJmMzA4YjY4YmI5Y2EzYzA4N2ZiLi45
MDZlYTY1NmFjN2M4N2ZkMzk5MGIxMzUzOTIzZjI1ODdmYjI5ZDU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0zMiw2
ICszMiw4IEBACiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKIAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0SG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCkBAIC0x
NzMsNiArMTc1LDExMSBAQCBwcml2YXRlOgogICAgIE93blB0cjxXZWJEZXZUb29sc0FnZW50OjpN
ZXNzYWdlRGVzY3JpcHRvcj4gbV9kZXNjcmlwdG9yOwogfTsKIAorY2xhc3MgRGV2aWNlTWV0cmlj
c1N1cHBvcnQgOiBwdWJsaWMgV2ViUGFnZU92ZXJsYXkgeworcHVibGljOgorICAgIERldmljZU1l
dHJpY3NTdXBwb3J0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQorICAgICAgICA6IG1fd2ViVmlldyh3
ZWJWaWV3KQorICAgIHsKKyAgICAgICAgbV93ZWJWaWV3LT5hZGRQYWdlT3ZlcmxheSh0aGlzLCA5
Nyk7CisgICAgfQorCisgICAgfkRldmljZU1ldHJpY3NTdXBwb3J0KCkKKyAgICB7CisgICAgICAg
IG1fd2ViVmlldy0+cmVtb3ZlUGFnZU92ZXJsYXkodGhpcyk7CisgICAgfQorCisgICAgdm9pZCBz
ZXREZXZpY2VNZXRyaWNzKGludCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgdGV4dFpvb21GYWN0
b3IpCisgICAgeworICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZVZpZXco
KTsKKyAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1f
ZW11bGF0ZWRGcmFtZVNpemUgPSBXZWJTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtX3dl
YlZpZXctPnNldEVtdWxhdGVkVGV4dFpvb21GYWN0b3IodGV4dFpvb21GYWN0b3IpOworICAgICAg
ICBhcHBseVNpemVPdmVycmlkZUludGVybmFsKHZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBhdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKHZpZXctPmZyYW1lKCkpOworCisgICAgICAgIG1fd2Vi
Vmlldy0+c2VuZFJlc2l6ZUV2ZW50QW5kUmVwYWludCgpOworICAgIH0KKworICAgIHZvaWQgcmVz
dG9yZSgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPnNldFpvb21MZXZlbChmYWxzZSwgMCk7
CisgICAgICAgIG1fd2ViVmlldy0+c2VuZFJlc2l6ZUV2ZW50QW5kUmVwYWludCgpOworICAgICAg
ICBtX3dlYlZpZXctPnNldEVtdWxhdGVkVGV4dFpvb21GYWN0b3IoMSk7CisKKyAgICAgICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWVWaWV3KCk7CisgICAgICAgIGlmICghdmlldykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2aWV3LT5zZXRIb3Jpem9udGFsU2Nyb2xs
YmFyTG9jayhmYWxzZSk7CisgICAgICAgIHZpZXctPnNldFZlcnRpY2FsU2Nyb2xsYmFyTG9jayhm
YWxzZSk7CisgICAgICAgIHZpZXctPnNldFNjcm9sbGJhck1vZGVzKFNjcm9sbGJhckF1dG8sIFNj
cm9sbGJhckF1dG8sIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHZpZXctPnJlc2l6ZShJbnRTaXpl
KG1fd2ViVmlldy0+c2l6ZSgpKSk7CisgICAgfQorCisgICAgdm9pZCBhdXRvWm9vbVBhZ2VUb0Zp
dFdpZHRoKEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIGlmICghZnJhbWUpCisgICAgICAg
ICAgICBmcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpOworICAgICAg
ICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fd2ViVmlldy0+
c2V0Wm9vbUxldmVsKGZhbHNlLCAwKTsKKworICAgICAgICBmbG9hdCB6b29tRmFjdG9yID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fZW11bGF0ZWRGcmFtZVNpemUud2lkdGgpIC8gZnJhbWUtPnZpZXco
KS0+Y29udGVudHNXaWR0aCgpOworICAgICAgICBmcmFtZS0+c2V0UGFnZUFuZFRleHRab29tRmFj
dG9ycyh6b29tRmFjdG9yLCBtX3dlYlZpZXctPmVtdWxhdGVkVGV4dFpvb21GYWN0b3IoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBhcHBseVNpemVPdmVycmlkZUlmTmVjZXNzYXJ5KCkKKyAgICB7Cisg
ICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lVmlldygpOworICAgICAgICBpZiAoIXZpZXcp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXBwbHlTaXplT3ZlcnJpZGVJbnRlcm5h
bCh2aWV3LCBtX2VtdWxhdGVkRnJhbWVTaXplLndpZHRoLCBtX2VtdWxhdGVkRnJhbWVTaXplLmhl
aWdodCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYXBwbHlTaXplT3ZlcnJpZGVJbnRl
cm5hbChGcmFtZVZpZXcqIGZyYW1lVmlldywgaW50IG92ZXJyaWRlV2lkdGgsIGludCBvdmVycmlk
ZUhlaWdodCkKKyAgICB7CisgICAgICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xsYmFyTW9kZXMoU2Ny
b2xsYmFyQWx3YXlzT24sIFNjcm9sbGJhckFsd2F5c09uLCB0cnVlLCB0cnVlKTsKKyAgICAgICAg
aWYgKFNjcm9sbGJhciogdmVydGljYWxCYXIgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFy
KCkpCisgICAgICAgICAgICBvdmVycmlkZVdpZHRoICs9ICF2ZXJ0aWNhbEJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkgPyB2ZXJ0aWNhbEJhci0+d2lkdGgoKSA6IDA7CisgICAgICAgIGlmIChTY3Jv
bGxiYXIqIGhvcml6b250YWxCYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSkK
KyAgICAgICAgICAgIG92ZXJyaWRlSGVpZ2h0ICs9ICFob3Jpem9udGFsQmFyLT5pc092ZXJsYXlT
Y3JvbGxiYXIoKSA/IGhvcml6b250YWxCYXItPmhlaWdodCgpIDogMDsKKworICAgICAgICBpZiAo
SW50U2l6ZShvdmVycmlkZVdpZHRoLCBvdmVycmlkZUhlaWdodCkgIT0gZnJhbWVWaWV3LT5zaXpl
KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlc2l6ZShvdmVycmlkZVdpZHRoLCBvdmVycmlk
ZUhlaWdodCk7CisKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IGZyYW1lVmlldy0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKTsKKyAgICAgICAgZG9jLT5yZWNhbGNTdHlsZShOb2RlOjpGb3JjZSk7CisgICAg
ICAgIGRvYy0+dXBkYXRlTGF5b3V0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50
UGFnZU92ZXJsYXkoV2ViQ2FudmFzKiBjYW52YXMpCisgICAgeworICAgICAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHRoaXMtPmZyYW1lVmlldygpOworICAgICAgICBpZiAoIWZyYW1lVmlldykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBHcmFwaGljc0NvbnRleHRCdWlsZGVyIGJ1
aWxkZXIoY2FudmFzKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBnYyA9IGJ1aWxkZXIuY29u
dGV4dCgpOworICAgICAgICBnYy5jbGlwT3V0KEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3
LT5zaXplKCkpKTsKKyAgICAgICAgZ2Muc2V0RmlsbENvbG9yKENvbG9yOjpkYXJrR3JheSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGdjLmRyYXdSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgbV93ZWJWaWV3LT5zaXplKCkpKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcq
IGZyYW1lVmlldygpCisgICAgeworICAgICAgICByZXR1cm4gbV93ZWJWaWV3LT5tYWluRnJhbWVJ
bXBsKCkgPyBtX3dlYlZpZXctPm1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkgOiAwOworICAg
IH0KKworICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXc7CisgICAgV2ViU2l6ZSBtX2VtdWxhdGVk
RnJhbWVTaXplOworfTsKKworCiBXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2Vu
dEltcGwoCiAgICAgV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLAogICAgIFdlYkRldlRvb2xzQWdl
bnRDbGllbnQqIGNsaWVudCkKQEAgLTIzMSw2ICszMzgsMzggQEAgdm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSkKICAg
ICAgICAgcHJveHktPnNldENvbnRleHREZWJ1Z0lkKG1faG9zdElkKTsKIH0KIAordm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6bWFpbkZyYW1lVmlld0NyZWF0ZWQoV2ViRnJhbWVJbXBsKiB3ZWJG
cmFtZSkKK3sKKyAgICBpZiAobV9tZXRyaWNzU3VwcG9ydCkKKyAgICAgICAgbV9tZXRyaWNzU3Vw
cG9ydC0+YXBwbHlTaXplT3ZlcnJpZGVJZk5lY2Vzc2FyeSgpOworfQorCitib29sIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjptZXRyaWNzT3ZlcnJpZGRlbigpCit7CisgICAgcmV0dXJuICEhbV9tZXRy
aWNzU3VwcG9ydDsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6b3ZlcnJpZGVEZXZp
Y2VNZXRyaWNzKGludCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgZm9udFNjYWxlRmFjdG9yKQor
eworICAgIGlmICghd2lkdGggJiYgIWhlaWdodCAmJiBmb250U2NhbGVGYWN0b3IgPT0gMSkgewor
ICAgICAgICBpZiAobV9tZXRyaWNzU3VwcG9ydCkgeworICAgICAgICAgICAgbV9tZXRyaWNzU3Vw
cG9ydC0+cmVzdG9yZSgpOworICAgICAgICAgICAgbV9tZXRyaWNzU3VwcG9ydC5jbGVhcigpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fbWV0cmljc1N1
cHBvcnQpCisgICAgICAgIG1fbWV0cmljc1N1cHBvcnQgPSBhZG9wdFB0cihuZXcgRGV2aWNlTWV0
cmljc1N1cHBvcnQobV93ZWJWaWV3SW1wbCkpOworICAgIG1fbWV0cmljc1N1cHBvcnQtPnNldERl
dmljZU1ldHJpY3Mod2lkdGgsIGhlaWdodCwgZm9udFNjYWxlRmFjdG9yKTsKK30KKwordm9pZCBX
ZWJEZXZUb29sc0FnZW50SW1wbDo6YXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpCit7CisgICAgaWYg
KG1fbWV0cmljc1N1cHBvcnQpCisgICAgICAgIG1fbWV0cmljc1N1cHBvcnQtPmF1dG9ab29tUGFn
ZVRvRml0V2lkdGgoMCk7Cit9CisKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNo
T25JbnNwZWN0b3JCYWNrZW5kKGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBpbnNw
ZWN0b3JDb250cm9sbGVyKCktPmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5o
CmluZGV4IDY2ZmQ2YzZlZWE2ODhiMDM4ZGU3MjQ3N2EzYjE5YzViNTE1YTdiNTEuLjk4ODA2YTQ5
YTk0NWU4N2IyODZjMGM2MDRjZGJkOWU2Zjk3MWQwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaApAQCAtMzUsNiArMzUsNyBAQAog
CiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdl
T3ZlcmxheS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKIAogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDIsNiArNDMsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKK2NsYXNz
IEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEluc3BlY3RvckNsaWVu
dDsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CkBAIC01MCw2ICs1Miw3IEBAIGNsYXNzIE5v
ZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBEZXZpY2VNZXRyaWNzU3VwcG9ydDsK
IGNsYXNzIFdlYkRldlRvb2xzQWdlbnRDbGllbnQ7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdl
YkZyYW1lSW1wbDsKQEAgLTY4LDcgKzcxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYkRl
dlRvb2xzQWdlbnRJbXBsKCk7CiAKICAgICAvLyBXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSBpbXBs
ZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2ViRnJh
bWVJbXBsKiBmcmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KFdl
YkZyYW1lSW1wbCopOworICAgIHZpcnR1YWwgdm9pZCBtYWluRnJhbWVWaWV3Q3JlYXRlZChXZWJG
cmFtZUltcGwqKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWV0cmljc092ZXJyaWRkZW4oKTsKIAogICAg
IC8vIFdlYkRldlRvb2xzQWdlbnQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaCgpOwpAQCAtOTUsNiArMTAwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckJyb3dzZXJDYWNoZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDb29raWVzKCk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGludCB3aWR0aCwgaW50
IGhlaWdodCwgZmxvYXQgZm9udFNjYWxlRmFjdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXV0b1pv
b21QYWdlVG9GaXRXaWR0aCgpOworCiAgICAgaW50IGhvc3RJZCgpIHsgcmV0dXJuIG1faG9zdElk
OyB9CiAKICAgICAvLyBXZWJQYWdlT3ZlcmxheQpAQCAtMTA4LDYgKzExNiw3IEBAIHByaXZhdGU6
CiAgICAgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogbV9jbGllbnQ7CiAgICAgV2ViVmlld0ltcGwq
IG1fd2ViVmlld0ltcGw7CiAgICAgYm9vbCBtX2F0dGFjaGVkOworICAgIE93blB0cjxEZXZpY2VN
ZXRyaWNzU3VwcG9ydD4gbV9tZXRyaWNzU3VwcG9ydDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNB
Z2VudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRQcml2YXRlLmgKaW5kZXggNzAzOGE1ZTVjYjgzMmRlMDA5YWE3YThjNmY3MmZjYWM0MGU3ODVh
My4uMTEyYzc0ZTIxODNiZmQxZWM5YTY0NWE5NTAwZDBlZjA2MWRiYTM4MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCkBA
IC0zNSwxNCArMzUsMjIgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGcmFtZUlt
cGw7CitjbGFzcyBXZWJTaXplOwogCiBjbGFzcyBXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSA6IHB1
YmxpYyBXZWJEZXZUb29sc0FnZW50IHsKIHB1YmxpYzoKLSAgICAvLyBOb3RpZmljYXRpb25zIGZy
b20gRnJhbWVMb2FkZXJDbGllbnRJbXBsOgogCisgICAgLy8gTm90aWZpY2F0aW9uIGZyb20gRnJh
bWVMb2FkZXJDbGllbnRJbXBsOgogICAgIC8vIFRoZSB3aW5kb3cgb2JqZWN0IGZvciB0aGUgZnJh
bWUgaGFzIGJlZW4gY2xlYXJlZCBvZiBhbnkgZXh0cmEgcHJvcGVydGllcwogICAgIC8vIHRoYXQg
bWF5IGhhdmUgYmVlbiBzZXQgYnkgc2NyaXB0IGZyb20gdGhlIHByZXZpb3VzbHkgbG9hZGVkIGRv
Y3VtZW50LgogICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUlt
cGwqKSA9IDA7CisKKyAgICAvLyBBIG5ldyBGcmFtZVZpZXcgaGFzIGJlZW4gY3JlYXRlZCBmb3Ig
dGhlIHNwZWNpZmllZCBXZWJGcmFtZSB1c2luZworICAgIC8vIHRoZSBGcmFtZTo6Y3JlYXRlVmll
dygpIGNhbGwuCisgICAgdmlydHVhbCB2b2lkIG1haW5GcmFtZVZpZXdDcmVhdGVkKFdlYkZyYW1l
SW1wbCopID0gMDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIG1ldHJpY3Mg
b3ZlcnJpZGUgbW9kZSBpcyBlbmFibGVkLgorICAgIHZpcnR1YWwgYm9vbCBtZXRyaWNzT3ZlcnJp
ZGRlbigpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggMzk4OTdjODIzNjJhODMyY2JlMmYx
YzljMTI1MzhkYWFhMmE3NjhiMS4uM2Q0M2MxZjU5NDQ3Nzk3ZDA0Y2Y0ZDg0OGUyMzRmZjgyNTZl
MmNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCkBA
IC0xNDIsNiArMTQyLDcgQEAKICNpbmNsdWRlICJXZWJET01FdmVudC5oIgogI2luY2x1ZGUgIldl
YkRPTUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgorI2lu
Y2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50
LmgiCkBAIC0yMDgzLDYgKzIwODQsOSBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6Y3JlYXRlRnJhbWVW
aWV3KCkKICAgICBtX2ZyYW1lLT5jcmVhdGVWaWV3KHdlYlZpZXctPnNpemUoKSwgQ29sb3I6Ondo
aXRlLCB3ZWJWaWV3LT5pc1RyYW5zcGFyZW50KCksICB3ZWJWaWV3LT5maXhlZExheW91dFNpemUo
KSwgaXNNYWluRnJhbWUgPyB3ZWJWaWV3LT5pc0ZpeGVkTGF5b3V0TW9kZUVuYWJsZWQoKSA6IDAp
OwogICAgIGlmICh3ZWJWaWV3LT5zaG91bGRBdXRvUmVzaXplKCkgJiYgaXNNYWluRnJhbWUpCiAg
ICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+ZW5hYmxlQXV0b1NpemVNb2RlKHRydWUsIHdlYlZpZXct
Pm1pbkF1dG9TaXplKCksIHdlYlZpZXctPm1heEF1dG9TaXplKCkpOworCisgICAgaWYgKGlzTWFp
bkZyYW1lICYmIHdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpCisgICAgICAgIHdlYlZp
ZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCktPm1haW5GcmFtZVZpZXdDcmVhdGVkKHRoaXMpOwog
fQogCiBXZWJGcmFtZUltcGwqIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBjMzgyNWEx
YzUzZjU3OGE0MjYyMTIyZDE5ZTg0MzhkNjE2NDQ0MzQyLi5kY2I1MmJmMzZkNWI0OTY3NTAyMDA1
MDc0MzMxOTU0MWM1YWQ4MzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC0xMzYsNiArMTM2LDcgQEAKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNs
dWRlICJwYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJJbWFnZS5oIgogI2luY2x1
ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgpAQCAtMzY1LDYgKzM2Niw3IEBA
IFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAjZW5kaWYK
ICAgICAsIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShhZG9wdFB0cihuZXcgRGV2aWNl
T3JpZW50YXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGllbnQtPmRldmljZU9yaWVudGF0aW9u
Q2xpZW50KCkgOiAwKSkpCiAgICAgLCBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHkoYWRvcHRQdHIo
bmV3IEdlb2xvY2F0aW9uQ2xpZW50UHJveHkoY2xpZW50ID8gY2xpZW50LT5nZW9sb2NhdGlvbkNs
aWVudCgpIDogMCkpKQorICAgICwgbV9lbXVsYXRlZFRleHRab29tRmFjdG9yKDEpCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKICAgICAsIG1fdXNlck1lZGlhQ2xpZW50SW1wbCh0aGlzKQogI2Vu
ZGlmCkBAIC0xMjYwLDggKzEyNjIsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0
IFdlYlNpemUmIG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NpemUgPSBuZXdTaXpl
OwogCi0gICAgaWYgKG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCi0gICAgICAgIG1haW5G
cmFtZUltcGwoKS0+ZnJhbWVWaWV3KCktPnJlc2l6ZShtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWln
aHQpOworICAgIGlmICghZGV2VG9vbHNBZ2VudFByaXZhdGUoKSB8fCAhZGV2VG9vbHNBZ2VudFBy
aXZhdGUoKS0+bWV0cmljc092ZXJyaWRkZW4oKSkgeworICAgICAgICBXZWJGcmFtZUltcGwqIHdl
YkZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOworICAgICAgICBpZiAod2ViRnJhbWUtPmZyYW1lVmll
dygpKQorICAgICAgICAgICAgd2ViRnJhbWUtPmZyYW1lVmlldygpLT5yZXNpemUobmV3U2l6ZS53
aWR0aCwgbmV3U2l6ZS5oZWlnaHQpOworICAgIH0KIAogICAgIHNlbmRSZXNpemVFdmVudEFuZFJl
cGFpbnQoKTsKIH0KQEAgLTIyMTgsOSArMjIyMyw5IEBAIGRvdWJsZSBXZWJWaWV3SW1wbDo6c2V0
Wm9vbUxldmVsKGJvb2wgdGV4dE9ubHksIGRvdWJsZSB6b29tTGV2ZWwpCiAgICAgZWxzZSB7CiAg
ICAgICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oem9vbUxldmVsVG9a
b29tRmFjdG9yKG1fem9vbUxldmVsKSk7CiAgICAgICAgIGlmICh0ZXh0T25seSkKLSAgICAgICAg
ICAgIGZyYW1lLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKDEsIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgZnJhbWUtPnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoMSwgem9vbUZhY3RvciAq
IG1fZW11bGF0ZWRUZXh0Wm9vbUZhY3Rvcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZy
YW1lLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKHpvb21GYWN0b3IsIDEpOworICAgICAgICAg
ICAgZnJhbWUtPnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoem9vbUZhY3RvciwgbV9lbXVsYXRl
ZFRleHRab29tRmFjdG9yKTsKICAgICB9CiAgICAgcmV0dXJuIG1fem9vbUxldmVsOwogfQpAQCAt
Mjk5MCw2ICsyOTk1LDE0IEBAIGJvb2wgV2ViVmlld0ltcGw6OnVzZUV4dGVybmFsUG9wdXBNZW51
cygpCiAgICAgcmV0dXJuIHNob3VsZFVzZUV4dGVybmFsUG9wdXBNZW51czsKIH0KIAordm9pZCBX
ZWJWaWV3SW1wbDo6c2V0RW11bGF0ZWRUZXh0Wm9vbUZhY3RvcihmbG9hdCB0ZXh0Wm9vbUZhY3Rv
cikKK3sKKyAgICBtX2VtdWxhdGVkVGV4dFpvb21GYWN0b3IgPSB0ZXh0Wm9vbUZhY3RvcjsKKyAg
ICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWVJbXBsKCktPmZyYW1lKCk7CisgICAgaWYgKGZyYW1l
KQorICAgICAgICBmcmFtZS0+c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmcmFtZS0+cGFnZVpv
b21GYWN0b3IoKSwgbV9lbXVsYXRlZFRleHRab29tRmFjdG9yKTsKK30KKwogYm9vbCBXZWJWaWV3
SW1wbDo6bmF2aWdhdGlvblBvbGljeUZyb21Nb3VzZUV2ZW50KHVuc2lnbmVkIHNob3J0IGJ1dHRv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGN0cmwsIGJvb2wgc2hpZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbHQsIGJvb2wgbWV0YSwKQEAgLTM0MzEsNyArMzQ0NCw3IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCkKICAgICAgICAgbGF5ZXJB
ZGp1c3RYID0gLXZpZXctPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgKyB2aWV3LT52aXNpYmxlQ29u
dGVudFJlY3QoZmFsc2UpLndpZHRoKCk7CiAgICAgfQogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdC5zaXplKCksIHZpZXctPmNvbnRlbnRzU2l6
ZSgpLCBzY3JvbGwsIHBhZ2VTY2FsZUZhY3RvcigpLCBsYXllckFkanVzdFgpOwotICAgIG1fbGF5
ZXJUcmVlVmlldy5zZXRWaWV3cG9ydFNpemUodmlzaWJsZVJlY3Quc2l6ZSgpKTsKKyAgICBtX2xh
eWVyVHJlZVZpZXcuc2V0Vmlld3BvcnRTaXplKHNpemUoKSk7CiAgICAgbV9sYXllclRyZWVWaWV3
LnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhwYWdlU2NhbGVGYWN0b3IoKSwgbV9taW5pbXVt
UGFnZVNjYWxlRmFjdG9yLCBtX21heGltdW1QYWdlU2NhbGVGYWN0b3IpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAzMDgyZDRlMDEzNWFmZWRiYTI1
MzA4OTRjZTYwMDNiZTQyYjg1MWFkLi45OWEwNGI4YzYzMDExMjVjM2Y4NGZhOTY2YTMzMWU1NTkz
NjczYjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTQw
MCw2ICs0MDAsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbml0aWFsTmF2aWdhdGlv
blBvbGljeTsKICAgICB9CiAKKyAgICAvLyBTZXRzIHRoZSBlbXVsYXRlZCB0ZXh0IHpvb20gZmFj
dG9yCisgICAgLy8gKG1heSBub3QgYmUgMSBpbiB0aGUgZGV2aWNlIG1ldHJpY3MgZW11bGF0aW9u
IG1vZGUpLgorICAgIHZvaWQgc2V0RW11bGF0ZWRUZXh0Wm9vbUZhY3RvcihmbG9hdCk7CisKKyAg
ICAvLyBSZXR1cm5zIHRoZSBlbXVsYXRlZCB0ZXh0IHpvb20gZmFjdG9yCisgICAgLy8gKHdoaWNo
IG1heSBub3QgYmUgMSBpbiB0aGUgZGV2aWNlIG1ldHJpY3MgZW11bGF0aW9uIG1vZGUpLgorICAg
IGZsb2F0IGVtdWxhdGVkVGV4dFpvb21GYWN0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZW11bGF0ZWRUZXh0Wm9vbUZhY3RvcjsKKyAgICB9CisKICAgICAvLyBEZXRlcm1pbmVz
IHdoZXRoZXIgYSBwYWdlIHNob3VsZCBlLmcuIGJlIG9wZW5lZCBpbiBhIGJhY2tncm91bmQgdGFi
LgogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgaGFzIG5vIG9waW5pb24sIGluIHdoaWNoIGNh
c2UgaXQgZG9lc24ndCBzZXQgKnBvbGljeS4KICAgICBzdGF0aWMgYm9vbCBuYXZpZ2F0aW9uUG9s
aWN5RnJvbU1vdXNlRXZlbnQoCkBAIC00OTIsNiArNTAzLDkgQEAgcHVibGljOgogICAgIHZvaWQg
ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kik7CiAgICAgdm9pZCBl
eGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopOwogCisgICAgLy8gRXhw
b3NlZCBmb3IgdGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyBkZXZpY2UgbWV0cmljcy4KKyAgICB2
b2lkIHNlbmRSZXNpemVFdmVudEFuZFJlcGFpbnQoKTsKKwogICAgIC8vIEV4cG9zZWQgZm9yIHRl
c3RpbmcgcHVycG9zZXMuCiAgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAg
Ym9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpOwpAQCAtNTQ3LDcgKzU2MSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRHJhZ0FjdGlvbik7CiAKLSAgICB2b2lkIHNlbmRSZXNpemVFdmVudEFuZFJl
cGFpbnQoKTsKICAgICB2b2lkIGNvbmZpZ3VyZUF1dG9SZXNpemVNb2RlKCk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03MjUsNiArNzM4LDggQEAgcHJpdmF0ZToKICAg
ICBPd25QdHI8RGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eT4gbV9kZXZpY2VPcmllbnRhdGlv
bkNsaWVudFByb3h5OwogICAgIE93blB0cjxHZW9sb2NhdGlvbkNsaWVudFByb3h5PiBtX2dlb2xv
Y2F0aW9uQ2xpZW50UHJveHk7CiAKKyAgICBmbG9hdCBtX2VtdWxhdGVkVGV4dFpvb21GYWN0b3I7
CisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIFVzZXJNZWRpYUNsaWVudEltcGwgbV91
c2VyTWVkaWFDbGllbnRJbXBsOwogI2VuZGlmCg==
</data>
<flag name="review"
          id="139174"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>