<?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>109684</bug_id>
          
          <creation_ts>2013-02-13 05:26:10 -0800</creation_ts>
          <short_desc>[EFL][WK2] Have WebView subclass PageClient</short_desc>
          <delta_ts>2013-02-15 08:51:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>107657</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>831832</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 05:26:10 -0800</bug_when>
    <thetext>To respect API layering, EFL&apos;s PageClient should be constructed and owned by WebView, not EwkView.
Our Ewk implementation should never interact directly with the PageClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831863</commentid>
    <comment_count>1</comment_count>
      <attachid>188073</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 06:23:16 -0800</bug_when>
    <thetext>Created attachment 188073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831869</commentid>
    <comment_count>2</comment_count>
      <attachid>188073</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-13 06:49:02 -0800</bug_when>
    <thetext>Comment on attachment 188073
Patch

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

&gt; Source/WebKit2/ChangeLog:16
&gt; +        * Shared/API/c/WKSharedAPICast.h:
&gt; +        (WebKit::toAPI): Add toAPI() function to convert a FloatPoint into a WKPoint.
&gt; +        There was already one for IntPoint but the FloatPoint equivalent was missing.

Maybe this should be a separate change?

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:85
&gt; +void WKViewUpdateViewportSize(WKViewRef viewRef, WKSize size)

s/Update/Set

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:93
&gt; +WKPoint WKViewGetPagePosition(WKViewRef viewRef)
&gt; +{
&gt; +    return toAPI(toImpl(viewRef)-&gt;pagePosition());
&gt; +}

I guess it might be better to get the visible page rect instead (it contains position).

WKViewGetVisiblePageRect(WKViewRef)

It also makes a more obvious that this is in page coordinates. A page position could include scale.

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:95
&gt; +void WKViewDidCommitLoad(WKViewRef viewRef)

When would a user call this? It is not obvious

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1185
&gt; -        view-&gt;pageClient()-&gt;updateViewportSize();
&gt; +        WKViewUpdateViewportSize(view-&gt;wkView(), WKSizeMake(width, height));
&gt;      }

so this actually sets the visible contents rect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831913</commentid>
    <comment_count>3</comment_count>
      <attachid>188083</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 08:13:48 -0800</bug_when>
    <thetext>Created attachment 188083
Patch

Keep the change minimal as discussed offline with Kenneth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831929</commentid>
    <comment_count>4</comment_count>
      <attachid>188086</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 08:24:59 -0800</bug_when>
    <thetext>Created attachment 188086
Patch

Rebase on master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831940</commentid>
    <comment_count>5</comment_count>
      <attachid>188086</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-13 08:44:41 -0800</bug_when>
    <thetext>Comment on attachment 188086
Patch

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

&gt; Source/WebKit2/UIProcess/efl/WebView.h:44
&gt;  class WebView : public APIObject {
&gt;  public:

maybe we should inherit from the pageclient in the future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832097</commentid>
    <comment_count>6</comment_count>
      <attachid>188126</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 11:23:54 -0800</bug_when>
    <thetext>Created attachment 188126
Patch

Kenneth, I had WebView subclass PageClient as you suggested. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832764</commentid>
    <comment_count>7</comment_count>
      <attachid>188126</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-13 23:36:48 -0800</bug_when>
    <thetext>Comment on attachment 188126
Patch

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

&gt; Source/WebKit2/UIProcess/efl/WebPageProxyEfl.cpp:43
&gt; +    return static_cast&lt;WebView*&gt;(m_pageClient)-&gt;evasObject();

we should avoid using of WebView::evasObject

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:40
&gt; +#include &quot;ewk_context_private.h&quot;

wish &quot;ewk_context_private.h&quot; wasn&apos;t included

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:46
&gt; +using namespace EwkViewCallbacks;

WebView should not know about EwkViewCallbacks

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:55
&gt; +    m_page-&gt;pageGroup()-&gt;preferences()-&gt;setAcceleratedCompositingEnabled(true);

why rename?

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:132
&gt; +        m_ewkView-&gt;scheduleUpdateDisplay();

it has to be done via view client interface

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:181
&gt; +    return m_ewkView-&gt;size();

I believe direct m_ewkView usage should be eliminated

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:215
&gt; +    m_ewkView-&gt;smartCallback&lt;TooltipTextUnset&gt;().call();

ahh, I think we need make mature view client first and subclass pageclient after</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832769</commentid>
    <comment_count>8</comment_count>
      <attachid>188126</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 23:45:32 -0800</bug_when>
    <thetext>Comment on attachment 188126
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:40
&gt;&gt; +#include &quot;ewk_context_private.h&quot;
&gt; 
&gt; wish &quot;ewk_context_private.h&quot; wasn&apos;t included

Well, it is needed for now. This will be a gradual move away from Ewk.

&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:46
&gt;&gt; +using namespace EwkViewCallbacks;
&gt; 
&gt; WebView should not know about EwkViewCallbacks

Agreed but for now we need it (until we extend the WKViewClient). Our PageClient implementation is using EwkView callbacks and for now I am merely moving the code to WebView.

&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:55
&gt;&gt; +    m_page-&gt;pageGroup()-&gt;preferences()-&gt;setAcceleratedCompositingEnabled(true);
&gt; 
&gt; why rename?

m_page is much shorter and it is still clear. As a matter of fact, we usually call the getter &quot;page()&quot;.

&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:132
&gt;&gt; +        m_ewkView-&gt;scheduleUpdateDisplay();
&gt; 
&gt; it has to be done via view client interface

In the future yes. This patch is about merging the PageClient code into WebView, not porting the PageClient code to WKViewClient.

&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:181
&gt;&gt; +    return m_ewkView-&gt;size();
&gt; 
&gt; I believe direct m_ewkView usage should be eliminated

Same comments apply here.

&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:215
&gt;&gt; +    m_ewkView-&gt;smartCallback&lt;TooltipTextUnset&gt;().call();
&gt; 
&gt; ahh, I think we need make mature view client first and subclass pageclient after

Well either is possible but I think it is clearer if all the PageClient code is in WebView first. We can see more easily what are the needs for both Legacy and Default implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832771</commentid>
    <comment_count>9</comment_count>
      <attachid>188126</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 23:47:59 -0800</bug_when>
    <thetext>Comment on attachment 188126
Patch

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

&gt; Source/WebKit2/UIProcess/efl/WebView.h:-62
&gt; -    void setViewNeedsDisplay(const WebCore::IntRect&amp;);

Also notice that merging PageClient and WebView allows us to remove those duplicated View client methods. For now we have only 2 but a lot more are coming. If we port all the code to the View client first, we will have a lot of duplicated methods between PageClient and WebView. This is why I think we should have WebView subclass PageClient first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832910</commentid>
    <comment_count>10</comment_count>
      <attachid>188126</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-14 03:48:42 -0800</bug_when>
    <thetext>Comment on attachment 188126
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:181
&gt;&gt;&gt; +    return m_ewkView-&gt;size();
&gt;&gt; 
&gt;&gt; I believe direct m_ewkView usage should be eliminated
&gt; 
&gt; Same comments apply here.

My patch does part of this by introducing the m_size

&gt;&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:215
&gt;&gt;&gt; +    m_ewkView-&gt;smartCallback&lt;TooltipTextUnset&gt;().call();
&gt;&gt; 
&gt;&gt; ahh, I think we need make mature view client first and subclass pageclient after
&gt; 
&gt; Well either is possible but I think it is clearer if all the PageClient code is in WebView first. We can see more easily what are the needs for both Legacy and Default implementation.

Yeah, I think it would be nicer to have this in the client first instead of moving code here and later back</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832923</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-14 03:57:56 -0800</bug_when>
    <thetext>Considering how much difference the implementation order makes, and that the patch was already written, I think this is a shame but you guys do what you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832936</commentid>
    <comment_count>12</comment_count>
      <attachid>188126</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-14 04:15:00 -0800</bug_when>
    <thetext>Comment on attachment 188126
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:215
&gt;&gt;&gt;&gt; +    m_ewkView-&gt;smartCallback&lt;TooltipTextUnset&gt;().call();
&gt;&gt;&gt; 
&gt;&gt;&gt; ahh, I think we need make mature view client first and subclass pageclient after
&gt;&gt; 
&gt;&gt; Well either is possible but I think it is clearer if all the PageClient code is in WebView first. We can see more easily what are the needs for both Legacy and Default implementation.
&gt; 
&gt; Yeah, I think it would be nicer to have this in the client first instead of moving code here and later back

I like this patch, it cleans up a lot of code, but it is obvious that it is just one step on the way.

A suggestion would be adding the processDidCrash and a few other needed methods to the ViewClient first (as another patch).

That way we could rebase this patch on top. I don&apos;t really mind either way. and I am fine with this patch.

&gt; Source/WebKit2/UIProcess/efl/WebView.h:90
&gt; +private:
&gt; +    // PageClient
&gt; +    virtual PassOwnPtr&lt;DrawingAreaProxy&gt; createDrawingAreaProxy();
&gt; +    virtual void setViewNeedsDisplay(const WebCore::IntRect&amp;);
&gt; +    virtual void displayView();
&gt; +    virtual bool canScrollView() { return false; }
&gt; +    virtual void scrollView(const WebCore::IntRect&amp;, const WebCore::IntSize&amp;);
&gt; +    virtual WebCore::IntSize viewSize();
&gt; +    virtual bool isViewWindowActive();
&gt; +    virtual bool isViewFocused();
&gt; +    virtual bool isViewVisible();
&gt; +    virtual bool isViewInWindow();
&gt; +    virtual void processDidCrash();

It is possible to &quot;group these&quot; a bit nicer.. like add some newlines where it makes sense?

&gt; Source/WebKit2/UIProcess/efl/WebView.h:139
&gt; +    OwnPtr&lt;WebKit::PageViewportControllerClientEfl&gt; m_pageViewportControllerClient;
&gt; +    OwnPtr&lt;WebKit::PageViewportController&gt; m_pageViewportController;

We also need to get rid of these at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832944</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-14 04:24:27 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 188126 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188126&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:215
&gt; &gt;&gt;&gt;&gt; +    m_ewkView-&gt;smartCallback&lt;TooltipTextUnset&gt;().call();
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; ahh, I think we need make mature view client first and subclass pageclient after
&gt; &gt;&gt; 
&gt; &gt;&gt; Well either is possible but I think it is clearer if all the PageClient code is in WebView first. We can see more easily what are the needs for both Legacy and Default implementation.
&gt; &gt; 
&gt; &gt; Yeah, I think it would be nicer to have this in the client first instead of moving code here and later back
&gt; 
&gt; I like this patch, it cleans up a lot of code, but it is obvious that it is just one step on the way.
&gt; 
&gt; A suggestion would be adding the processDidCrash and a few other needed methods to the ViewClient first (as another patch).
&gt; 
&gt; That way we could rebase this patch on top. I don&apos;t really mind either way. and I am fine with this patch.

The rebasing is going to be a bit annoying though.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/WebView.h:90
&gt; &gt; +private:
&gt; &gt; +    // PageClient
&gt; &gt; +    virtual PassOwnPtr&lt;DrawingAreaProxy&gt; createDrawingAreaProxy();
&gt; &gt; +    virtual void setViewNeedsDisplay(const WebCore::IntRect&amp;);
&gt; &gt; +    virtual void displayView();
&gt; &gt; +    virtual bool canScrollView() { return false; }
&gt; &gt; +    virtual void scrollView(const WebCore::IntRect&amp;, const WebCore::IntSize&amp;);
&gt; &gt; +    virtual WebCore::IntSize viewSize();
&gt; &gt; +    virtual bool isViewWindowActive();
&gt; &gt; +    virtual bool isViewFocused();
&gt; &gt; +    virtual bool isViewVisible();
&gt; &gt; +    virtual bool isViewInWindow();
&gt; &gt; +    virtual void processDidCrash();
&gt; 
&gt; It is possible to &quot;group these&quot; a bit nicer.. like add some newlines where it makes sense?

Yes, I can group these nicely.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/efl/WebView.h:139
&gt; &gt; +    OwnPtr&lt;WebKit::PageViewportControllerClientEfl&gt; m_pageViewportControllerClient;
&gt; &gt; +    OwnPtr&lt;WebKit::PageViewportController&gt; m_pageViewportController;
&gt; 
&gt; We also need to get rid of these at some point.

So, what is your suggestion? Add a FIXME comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832947</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-14 04:24:55 -0800</bug_when>
    <thetext>Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832953</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-14 04:33:55 -0800</bug_when>
    <thetext>
&gt; &gt; That way we could rebase this patch on top. I don&apos;t really mind either way. and I am fine with this patch.
&gt; 
&gt; The rebasing is going to be a bit annoying though.

Lets talk to Mikhail on irc to see what path we choose.

&gt; &gt; We also need to get rid of these at some point.
&gt; 
&gt; So, what is your suggestion? Add a FIXME comment?

Just move the other FIXME a bit down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833050</commentid>
    <comment_count>16</comment_count>
      <attachid>188344</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-14 07:13:18 -0800</bug_when>
    <thetext>Created attachment 188344
Patch

Take Kenneth&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833167</commentid>
    <comment_count>17</comment_count>
      <attachid>188344</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-14 09:47:35 -0800</bug_when>
    <thetext>Comment on attachment 188344
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834053</commentid>
    <comment_count>18</comment_count>
      <attachid>188344</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-02-15 08:31:26 -0800</bug_when>
    <thetext>Comment on attachment 188344
Patch

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

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:161
&gt; +    OwnPtr&lt;DrawingAreaProxy&gt; drawingArea = DrawingAreaProxyImpl::create(page());
&gt; +    return drawingArea.release();

Can just return DrawingAreaProxyImpl::create(page()) directly here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834066</commentid>
    <comment_count>19</comment_count>
      <attachid>188344</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 08:50:55 -0800</bug_when>
    <thetext>Comment on attachment 188344
Patch

Clearing flags on attachment: 188344

Committed r143004: &lt;http://trac.webkit.org/changeset/143004&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834067</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 08:51:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188073</attachid>
            <date>2013-02-13 06:23:16 -0800</date>
            <delta_ts>2013-02-13 08:13:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>109684_move_pageClient.patch</filename>
            <type>text/plain</type>
            <size>22084</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NTg3MTU0Li5mN2JiZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcg
QEAKKzIwMTMtMDItMTMgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUGFnZUNsaWVudCBzaG91bGQgYmUgb3duZWQgYnkg
V2ViVmlldywgbm90IEV3a1ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1vdmUgRUZMJ3MgUGFnZUNsaWVudCBvd25lcnNoaXAgZnJvbSBFd2tWaWV3
IHRvIFdlYlZpZXcuIFBhZ2VDbGllbnQgaXMgYW4KKyAgICAgICAgaW50ZXJuYWwgV2ViS2l0MiBD
KysgY2xhc3Mgc28gaXQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IG91ciBFd2sKKyAgICAgICAgaW1w
bGVtZW50YXRpb24uIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIHRoZSBuZWNlc3NhcnkgV0tWaWV3IEMg
QVBJIHNvIHRoYXQKKyAgICAgICAgb3VyIEV3ayBpbXBsZW1lbnRhdGlvbiBubyBsb25nZXIgbmVl
ZHMgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGUKKyAgICAgICAgUGFnZUNsaWVudC4KKwor
ICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaDoKKyAgICAgICAgKFdlYktp
dDo6dG9BUEkpOiBBZGQgdG9BUEkoKSBmdW5jdGlvbiB0byBjb252ZXJ0IGEgRmxvYXRQb2ludCBp
bnRvIGEgV0tQb2ludC4KKyAgICAgICAgVGhlcmUgd2FzIGFscmVhZHkgb25lIGZvciBJbnRQb2lu
dCBidXQgdGhlIEZsb2F0UG9pbnQgZXF1aXZhbGVudCB3YXMgbWlzc2luZy4KKworICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHA6IEFkZCBh
IGZldyBXS1ZpZXcgQyBBUEkgZnVuY3Rpb25zIHRvIHRoYXQKKyAgICAgICAgb3VyIEV3ayBpbXBs
ZW1lbnRhdGlvbiBubyBsb25nZXIgaW50ZXJhY3RzIHdpdGggdGhlIFBhZ2VDbGllbnQgZGlyZWN0
bHkuCisKKyAgICAgICAgKFdLVmlld1VwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChXS1Zp
ZXdHZXRQYWdlUG9zaXRpb24pOgorICAgICAgICAoV0tWaWV3RGlkQ29tbWl0TG9hZCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6OkV3a1ZpZXcpOiBSZW1vdmUg
UGFnZUNsaWVudCBpbml0aWFsaXphdGlvbiBmcm9tIGNvbnN0cnVjdG9yLgorICAgICAgICAoRXdr
Vmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKTogQ2FjaGUgcGFnZVBvc2l0aW9uIHNpbmNlIGl0IGlz
IG5vIGxvbmdlciBhIGNsYXNzCisgICAgICAgIG1lbWJlci4KKworICAgICAgICAoRXdrVmlldzo6
ZGlzcGxheVRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKEV3a1ZpZXc6OnBhZ2VQb3NpdGlv
bik6IE5vdyB1c2VzIFdLVmlld0dldFBhZ2VQb3NpdGlvbigpIGFzIHRoZSBtX3BhZ2VQb3NpdGlv
bgorICAgICAgICBtZW1iZXIgd2FzIHJlbW92ZWQuCisKKyAgICAgICAgKEV3a1ZpZXc6OmhhbmRs
ZUV2YXNPYmplY3RDYWxjdWxhdGUpOiBDYWxsIFdLVmlld1VwZGF0ZVZpZXdwb3J0U2l6ZSgpIGlu
c3RlYWQgb2YKKyAgICAgICAgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUGFnZUNsaWVudCBkaXJlY3Rs
eS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDogUmVtb3ZlIHBhZ2VD
bGllbnQgYW5kIHBhZ2VQb3NpdGlvbiBjbGFzcyBtZW1iZXJzLgorICAgICAgICBUaGV5IHdlcmUg
Ym90aCBtb3ZlZCB0byBXZWJWaWV3LgorCisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcDogdXBkYXRlVmlld3BvcnRTaXplKCkgbm93
IHRha2VzIHRoZSBzaXplIGluCisgICAgICAgIGFyZ3VtZW50IHRvIGF2b2lkIHF1ZXJ5aW5nIGl0
IGZyb20gdGhlIEV3a1ZpZXcuCisKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEJhc2U6OnZp
ZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuaDoKKyAgICAgICAg
KFBhZ2VDbGllbnRCYXNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnREZWZh
dWx0SW1wbC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50RGVmYXVsdElt
cGw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlQ2xp
ZW50RGVmYXVsdEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnREZWZhdWx0SW1wbCk6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRMZWdhY3lJbXBsOjp1cGRhdGVWaWV3cG9ydFNpemUpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VEaWRSZXF1ZXN0U2Ny
b2xsKTogQ2FsbCBzZXRQYWdlUG9zaXRpb24oKSBvbgorICAgICAgICBXZWJWaWV3IGluc3RlYWQg
b2YgRXdrVmlldy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUlt
cGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRMZWdhY3lJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1BhZ2VMb2FkQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUxvYWRD
bGllbnRFZmw6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6IENhbGwgV0tWaWV3RGlkQ29tbWl0TG9h
ZCgpCisgICAgICAgIGluc3RlYWQgb2YgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUGFnZUNsaWVudCBk
aXJlY3RseS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRFZmw6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6IFRha2UgdGhlIHNpemUgaW4KKyAgICAgICAg
YXJndW1lbnQgaW5zdGVhZCBvZiBxdWVyeWluZyBpdCBmcm9tIHRoZSBFd2tWaWV3LgorCisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFZpZXdwb3J0
UG9zaXRpb24pOiBDYWxsIHNldFBhZ2VQb3NpdGlvbigpCisgICAgICAgIG9uIFdlYlZpZXcgaW5z
dGVhZCBvZiBFd2tWaWV3LgorCisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsLmg6CisgICAgICAgIChQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50RWZsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KTogQ29uc3RydWN0IHRoZSBQYWdlQ2xpZW50LgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAg
ICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3Lmg6IEFkZCBwYWdlQ2xpZW50IGFuZCBwYWdlUG9zaXRp
b24gbWVtYmVyIGFzIHdlbGwgYXMKKyAgICAgICAgbWV0aG9kcyB0aGF0IGludGVyYWN0IHdpdGgg
dGhlIHBhZ2VDbGllbnQuCisKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnBhZ2VQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFBhZ2VQ
b3NpdGlvbik6CisgICAgICAgIChXZWJWaWV3KToKKwogMjAxMy0wMi0xMiAgQWRlbmlsc29uIENh
dmFsY2FudGkgIDxjYXZhbGNhbnRpaUBnbWFpbC5jb20+CiAKICAgICAgICAgW1dLMl0gUGFnZSBy
ZWxvYWRpbmcgd2lsbCBjcmFzaCBVSVByb2Nlc3MgYWZ0ZXIgV2ViUHJvY2VzcyB3YXMga2lsbGVk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKaW5kZXgg
NTIyYjEyYy4uNWYwNzZmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9j
L1dLU2hhcmVkQVBJQ2FzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1No
YXJlZEFQSUNhc3QuaApAQCAtMjc1LDYgKzI3NSwxMSBAQCBpbmxpbmUgV0tQb2ludCB0b0FQSShj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCiAgICAgcmV0dXJuIHdrUG9pbnQ7CiB9CiAK
K2lubGluZSBXS1BvaW50IHRvQVBJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQor
eworICAgIHJldHVybiBXS1BvaW50TWFrZShwb2ludC54KCksIHBvaW50LnkoKSk7Cit9CisKIC8q
IEVudW0gY29udmVyc2lvbnMgKi8KIAogaW5saW5lIFdLVHlwZUlEIHRvQVBJKEFQSU9iamVjdDo6
VHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcu
Y3BwCmluZGV4IDExY2QyOGEuLjA2NTVmODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTgyLDYgKzgyLDIxIEBAIHZvaWQgV0tWaWV3U2V0
VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVmLCBXS1N0cmluZ1JlZiB0aGVtZSkKICAgICB0b0lt
cGwodmlld1JlZiktPnNldFRoZW1lUGF0aCh0aGVtZSk7CiB9CiAKK3ZvaWQgV0tWaWV3VXBkYXRl
Vmlld3BvcnRTaXplKFdLVmlld1JlZiB2aWV3UmVmLCBXS1NpemUgc2l6ZSkKK3sKKyAgICB0b0lt
cGwodmlld1JlZiktPnVwZGF0ZVZpZXdwb3J0U2l6ZSh0b0ludFNpemUoc2l6ZSkpOworfQorCitX
S1BvaW50IFdLVmlld0dldFBhZ2VQb3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICBy
ZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5wYWdlUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQg
V0tWaWV3RGlkQ29tbWl0TG9hZChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICB0b0ltcGwodmll
d1JlZiktPmRpZENvbW1pdExvYWQoKTsKK30KKwogdm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCiB7CiAgICAgdG9JbXBsKHZp
ZXdSZWYpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IDFmYmZiNWYuLjE1MDI5
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAt
MjEsNiArMjEsNyBAQAogI2RlZmluZSBXS1ZpZXdfaAogCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jh
c2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLR2VvbWV0cnkuaD4KIAogI2lmIFVTRShFTykKIHR5
cGVkZWYgc3RydWN0IF9FbyBFdmFzOwpAQCAtNDMsNiArNDQsOSBAQCBXS19FWFBPUlQgdm9pZCBX
S1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZik7CiBXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dl
dFBhZ2UoV0tWaWV3UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdL
Vmlld1JlZiwgV0tTdHJpbmdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3VXBkYXRlVmlld3Bv
cnRTaXplKFdLVmlld1JlZiwgV0tTaXplKTsKK1dLX0VYUE9SVCBXS1BvaW50IFdLVmlld0dldFBh
Z2VQb3NpdGlvbihXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3RGlkQ29tbWl0TG9h
ZChXS1ZpZXdSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXREcmF3c0JhY2tncm91bmQo
V0tWaWV3UmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLVmlld0dldERyYXdzQmFja2dyb3Vu
ZChXS1ZpZXdSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcAppbmRleCBjNDUzMzEzLi5kYTk2NjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjIwLDEyICsyMjAsMTQgQEAgdm9pZCBFd2tWaWV3
RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEs
IEV2YXMqLCBFdmEKIAogLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4KIAorQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IsIFdlYlZpZXc6OkRlZmF1
bHRCZWhhdmlvcik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKEV3a1ZpZXc6OkxlZ2Fj
eUJlaGF2aW9yLCBXZWJWaWV3OjpMZWdhY3lCZWhhdmlvcik7CisKIEV3a1ZpZXc6OkV3a1ZpZXco
RXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgOiBt
X2V2YXNPYmplY3QoZXZhc09iamVjdCkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwg
bV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKLSAgICAsIG1fcGFnZUNsaWVudChiZWhhdmlv
ciA9PSBEZWZhdWx0QmVoYXZpb3IgPyBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNyZWF0ZSh0aGlz
KSA6IFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3dlYlZpZXco
YWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCBtX3Bh
Z2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXApLCBldmFzT2JqZWN0KSkpCisgICAgLCBt
X3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0
KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwgc3RhdGljX2Nhc3Q8V2ViVmlldzo6Vmlld0JlaGF2aW9y
PihiZWhhdmlvciksIHRoaXMpKSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGll
bnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5
Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGll
bnRFZmw6OmNyZWF0ZSh0aGlzKSkKQEAgLTQ0OCw3ICs0NTAsOCBAQCBBZmZpbmVUcmFuc2Zvcm0g
RXdrVmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKCkgY29uc3QKICAgICAvLyBOb3RlIHRoYXQgd2Ug
YXBwbHkgYm90aCBwYWdlIGFuZCBkZXZpY2Ugc2NhbGUgZmFjdG9ycy4KICAgICB0cmFuc2Zvcm0u
c2NhbGUoMSAvIHBhZ2VTY2FsZUZhY3RvcigpKTsKICAgICB0cmFuc2Zvcm0uc2NhbGUoMSAvIGRl
dmljZVNjYWxlRmFjdG9yKCkpOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUocGFnZVBvc2l0aW9u
KCkueCgpLCBwYWdlUG9zaXRpb24oKS55KCkpOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBw
YWdlUG9zaXRpb24oKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHBvc2l0aW9uLngoKSwgcG9z
aXRpb24ueSgpKTsKIAogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7
CiAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtc2QtPnZpZXcueCwgLXNkLT52aWV3LnkpOwpAQCAt
NTQ3LDcgKzU1MCw4IEBAIHZvaWQgRXdrVmlldzo6ZGlzcGxheVRpbWVyRmlyZWQoVGltZXI8RXdr
Vmlldz4qKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFJlZlB0cjxjYWlyb190PiBn
cmFwaGljc0NvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZS5nZXQoKSkpOwot
ICAgICAgICBjYWlyb190cmFuc2xhdGUoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCAtIHBhZ2VQb3Np
dGlvbigpLngoKSwgLSBwYWdlUG9zaXRpb24oKS55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBv
c2l0aW9uID0gcGFnZVBvc2l0aW9uKCk7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShncmFwaGlj
c0NvbnRleHQuZ2V0KCksIC0gcG9zaXRpb24ueCgpLCAtIHBvc2l0aW9uLnkoKSk7CiAgICAgICAg
IGNhaXJvX3NjYWxlKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgcGFnZVNjYWxlRmFjdG9yKCksIHBh
Z2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgY2Fpcm9fc2NhbGUoZ3JhcGhpY3NDb250ZXh0Lmdl
dCgpLCBkZXZpY2VTY2FsZUZhY3RvcigpLCBkZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAg
c2NlbmUtPnBhaW50VG9HcmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0LmdldCgpKTsKQEAg
LTEwMDgsNiArMTAxMiwxMyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0
YWJhc2VRdW90YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogfQogI2VuZGlmCiAK
K0Zsb2F0UG9pbnQgRXdrVmlldzo6cGFnZVBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBXS1BvaW50
IHdrUG9zaXRpb24gPSBXS1ZpZXdHZXRQYWdlUG9zaXRpb24od2tWaWV3KCkpOworCisgICAgcmV0
dXJuIEZsb2F0UG9pbnQod2tQb3NpdGlvbi54LCB3a1Bvc2l0aW9uLnkpOworfQorCiAvKioKICAq
IEBpbnRlcm5hbAogICogVGhlIHVybCBvZiB2aWV3IHdhcyBjaGFuZ2VkIGJ5IHRoZSBmcmFtZSBs
b2FkZXIuCkBAIC0xMTcwLDcgKzExODEsNyBAQCB2b2lkIEV3a1ZpZXc6OmhhbmRsZUV2YXNPYmpl
Y3RDYWxjdWxhdGUoRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCiAgICAgICAgICAgICB2aWV3LT5w
YWdlKCktPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgSW50
U2l6ZSgpKTsKIAogICAgICAgICB2aWV3LT5zZXROZWVkc1N1cmZhY2VSZXNpemUoKTsKLSAgICAg
ICAgdmlldy0+cGFnZUNsaWVudCgpLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICAgICAgV0tW
aWV3VXBkYXRlVmlld3BvcnRTaXplKHZpZXctPndrVmlldygpLCBXS1NpemVNYWtlKHdpZHRoLCBo
ZWlnaHQpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuaAppbmRleCA5YWRmYjBmLi5iYThiMDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC0xOTYsMTMgKzE5NiwxMCBAQCBwdWJsaWM6CiAKICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgaW5mb3JtRGF0YWJhc2VRdW90YVJlYWNoZWQoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgbG9uZyBjdXJyZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNh
Z2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9u
ZyBsb25nIGV4cGVjdGVkVXNhZ2UpOwogCi0gICAgV2ViS2l0OjpQYWdlQ2xpZW50QmFzZSogcGFn
ZUNsaWVudCgpIHsgcmV0dXJuIG1fcGFnZUNsaWVudC5nZXQoKTsgfQotCiAgICAgdm9pZCBzZXRQ
YWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpIHsgbV9wYWdlU2NhbGVGYWN0b3IgPSBz
Y2FsZUZhY3RvcjsgfQogICAgIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZVNjYWxlRmFjdG9yOyB9CiAKLSAgICB2b2lkIHNldFBhZ2VQb3NpdGlvbihjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX3BhZ2VQb3NpdGlvbiA9IHBvc2l0aW9u
OyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCBwYWdlUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VQb3NpdGlvbjsgfQorICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFnZVBv
c2l0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogbmVlZHMgcmVmYWN0b3JpbmcgKHNwbGl0
IGNhbGxiYWNrIGludm9rZSkKICAgICB2b2lkIGluZm9ybVVSTENoYW5nZSgpOwpAQCAtMjU5LDcg
KzI1Niw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYktpdDo6RXZhc0dMQ29udGV4dD4gbV9l
dmFzR0xDb250ZXh0OwogICAgIE93blB0cjxXZWJLaXQ6OkV2YXNHTFN1cmZhY2U+IG1fZXZhc0dM
U3VyZmFjZTsKICAgICBib29sIG1fcGVuZGluZ1N1cmZhY2VSZXNpemU7Ci0gICAgT3duUHRyPFdl
YktpdDo6UGFnZUNsaWVudEJhc2U+IG1fcGFnZUNsaWVudDsKICAgICBSZWZQdHI8V2ViS2l0OjpX
ZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw+
IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVm
bD4gbV9wYWdlUG9saWN5Q2xpZW50OwpAQCAtMjcyLDcgKzI2OCw2IEBAIHByaXZhdGU6CiAjZW5k
aWYKICAgICBPd25QdHI8RXdrQmFja0ZvcndhcmRMaXN0PiBtX2JhY2tGb3J3YXJkTGlzdDsKICAg
ICBmbG9hdCBtX3BhZ2VTY2FsZUZhY3RvcjsKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fcGFn
ZVBvc2l0aW9uOwogICAgIE93blB0cjxFd2tTZXR0aW5ncz4gbV9zZXR0aW5nczsKICAgICBSZWZQ
dHI8RXdrV2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAgICAgY29uc3Qgdm9pZCog
bV9jdXJzb3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApp
bmRleCA0ZGZmNzIxLi5lMTA3OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApAQCAtNjEsOSArNjEsMTAgQEAgUGFnZUNsaWVudEJhc2U6
On5QYWdlQ2xpZW50QmFzZSgpCiB7CiB9CiAKLUV3a1ZpZXcqIFBhZ2VDbGllbnRCYXNlOjp2aWV3
KCkgY29uc3QKK1dlYlZpZXcqIFBhZ2VDbGllbnRCYXNlOjp2aWV3KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV92aWV3OworICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgdW50aWwgbV92aWV3IGlzIGEg
V2ViVmlldy4KKyAgICByZXR1cm4gdG9JbXBsKG1fdmlldy0+d2tWaWV3KCkpOwogfQogCiAvLyBQ
YWdlQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VD
bGllbnRCYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNl
LmgKaW5kZXggMGY3YWQ4Yy4uM2U0ZmUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZUNsaWVudEJhc2UuaApAQCAtMzksMTAgKzM5LDEwIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5QYWdlQ2xpZW50QmFzZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExv
YWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJikgPSAwOwogCi0gICAgRXdrVmlldyogdmlldygpIGNvbnN0OworICAgIFdl
YlZpZXcqIHZpZXcoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFBhZ2VDbGll
bnRCYXNlKEV3a1ZpZXcqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmNwcAppbmRleCA1YTkyMjE5Li42YjkwNGYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnREZWZhdWx0SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVs
dEltcGwuY3BwCkBAIC00OCwxMyArNDgsMTMgQEAgdm9pZCBQYWdlQ2xpZW50RGVmYXVsdEltcGw6
OmRpZENvbW1pdExvYWQoKQogICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+ZGlkQ29tbWl0
TG9hZCgpOwogfQogCi12b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6dXBkYXRlVmlld3BvcnRT
aXplKCkKK3ZvaWQgUGFnZUNsaWVudERlZmF1bHRJbXBsOjp1cGRhdGVWaWV3cG9ydFNpemUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoIW1fcGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudCkgewogICAgICAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQg
PSBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpjcmVhdGUobV92aWV3KTsKICAgICAg
ICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyID0gYWRvcHRQdHIobmV3IFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXIobV92aWV3LT5wYWdlKCksIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC5n
ZXQoKSkpOwogICAgIH0KLSAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQtPnVwZGF0
ZVZpZXdwb3J0U2l6ZSgpOworICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC0+dXBk
YXRlVmlld3BvcnRTaXplKHNpemUpOwogfQogCiBGbG9hdFJlY3QgUGFnZUNsaWVudERlZmF1bHRJ
bXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHVzZXJSZWN0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdElt
cGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBs
LmgKaW5kZXggZTEwNTdkZC4uMDJiYzNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VDbGllbnREZWZhdWx0SW1wbC5oCkBAIC00NCw3ICs0NCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50RGVmYXVsdEltcGwoKSB7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21taXRMb2FkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdw
b3J0U2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xp
ZW50TGVnYWN5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGll
bnRMZWdhY3lJbXBsLmNwcAppbmRleCA2NTUzYTlkLi5jMzg0ZTRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmNwcApAQCAt
NDcsOSArNDcsOSBAQCB2b2lkIFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpkaWRDb21taXRMb2FkKCkK
ICAgICBtX3ZpZXctPnNjaGVkdWxlVXBkYXRlRGlzcGxheSgpOwogfQogCi12b2lkIFBhZ2VDbGll
bnRMZWdhY3lJbXBsOjp1cGRhdGVWaWV3cG9ydFNpemUoKQordm9pZCBQYWdlQ2xpZW50TGVnYWN5
SW1wbDo6dXBkYXRlVmlld3BvcnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7
Ci0gICAgbV92aWV3LT5wYWdlKCktPmRyYXdpbmdBcmVhKCktPnNldFZpc2libGVDb250ZW50c1Jl
Y3QoSW50UmVjdChyb3VuZGVkSW50UG9pbnQobV92aWV3LT5wYWdlUG9zaXRpb24oKSksIG1fdmll
dy0+c2l6ZSgpKSwgRmxvYXRQb2ludCgpKTsKKyAgICB2aWV3KCktPnBhZ2UoKS0+ZHJhd2luZ0Fy
ZWEoKS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChJbnRSZWN0KHJvdW5kZWRJbnRQb2ludCh2aWV3
KCktPnBhZ2VQb3NpdGlvbigpKSwgc2l6ZSksIEZsb2F0UG9pbnQoKSk7CiB9CiAKIEZsb2F0UmVj
dCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRS
ZWN0JiB2aWV3UmVjdCkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1w
bDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiAK
IHZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBtX3ZpZXctPnNldFBhZ2VQb3NpdGlvbihGbG9hdFBv
aW50KHBvc2l0aW9uKSk7CisgICAgdmlldygpLT5zZXRQYWdlUG9zaXRpb24oRmxvYXRQb2ludChw
b3NpdGlvbikpOwogICAgIG1fdmlldy0+c2NoZWR1bGVVcGRhdGVEaXNwbGF5KCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUlt
cGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwu
aAppbmRleCBlZmVhYmVlLi4yMDMxYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50TGVnYWN5SW1wbCgpIHsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGRpZENvbW1pdExvYWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRT
aXplKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJik7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9E
ZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VMb2FkQ2xp
ZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRF
ZmwuY3BwCmluZGV4IGM0YmE2NDcuLjY3ZGRhNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tGcmFtZS5oIgogI2luY2x1ZGUgIldL
UGFnZS5oIgorI2luY2x1ZGUgIldLVmlldy5oIgogI2luY2x1ZGUgImV3a19hdXRoX3JlcXVlc3Rf
cHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2Vycm9yX3ByaXZhdGUuaCIKQEAgLTExNyw3ICsxMTgsNyBAQCB2b2lkIFBh
Z2VMb2FkQ2xpZW50RWZsOjpkaWRDb21taXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1l
UmVmIGZyYW1lLCBXS1R5cAogICAgICAgICByZXR1cm47CiAKICAgICBFd2tWaWV3KiB2aWV3ID0g
dG9QYWdlTG9hZENsaWVudEVmbChjbGllbnRJbmZvKS0+dmlldygpOwotICAgIHZpZXctPnBhZ2VD
bGllbnQoKS0+ZGlkQ29tbWl0TG9hZCgpOworICAgIFdLVmlld0RpZENvbW1pdExvYWQodmlldy0+
d2tWaWV3KCkpOwogfQogCiB2b2lkIFBhZ2VMb2FkQ2xpZW50RWZsOjpkaWRDaGFuZ2VCYWNrRm9y
d2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJdGVtLCBX
S0FycmF5UmVmIHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmwuY3BwCmluZGV4IDRiN2NiODQ1Li42YWU0YjA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudEVmbC5jcHAKQEAgLTU3LDEzICs1NywxMyBAQCB2b2lkIFBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFJlbmRlcmVyQWN0aXZlKGJvb2wgYWN0aXZlKQog
ICAgIGRyYXdpbmdBcmVhKCktPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPmNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSgpLT5zZXRBY3RpdmUoYWN0aXZlKTsKIH0KIAotdm9pZCBQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoKQordm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQobV9jb250cm9sbGVyKTsKLSAg
ICBGbG9hdFNpemUgc2l6ZSA9IG1fdmlldy0+c2l6ZSgpOworICAgIEZsb2F0U2l6ZSBzY2FsZWRT
aXplID0gc2l6ZTsKICAgICAvLyBUaGUgdmlld3BvcnQgY29udHJvbGxlciBleHBlY3RzIHNpemVz
IGluIFVJIHVuaXRzLCBhbmQgbm90IHJhdyBkZXZpY2UgdW5pdHMuCi0gICAgc2l6ZS5zY2FsZSgx
IC8gbV9jb250cm9sbGVyLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBtX2NvbnRyb2xsZXIt
PmRpZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKDEgLyBt
X2NvbnRyb2xsZXItPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIG1fY29udHJvbGxlci0+ZGlk
Q2hhbmdlVmlld3BvcnRTaXplKHNjYWxlZFNpemUpOwogfQogCiB2b2lkIFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1NpemUpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudEVmbDo6c2V0Vmlld3BvcnRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpG
bG9hdFBvCiAgICAgRmxvYXRQb2ludCBwb3MoY29udGVudHNQb2ludCk7CiAgICAgcG9zLnNjYWxl
KG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCksIG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCkpOwog
ICAgIHBvcy5zY2FsZShtX3ZpZXctPmRldmljZVNjYWxlRmFjdG9yKCksIG1fdmlldy0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSk7Ci0gICAgbV92aWV3LT5zZXRQYWdlUG9zaXRpb24ocG9zKTsKKyAgICB0
b0ltcGwobV92aWV3LT53a1ZpZXcoKSktPnNldFBhZ2VQb3NpdGlvbihwb3MpOwogCiAgICAgbV9j
b250cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHkobV9jb250ZW50UG9zaXRpb24s
IG1fdmlldy0+cGFnZVNjYWxlRmFjdG9yKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwu
aAppbmRleCA1YzE5YzI3Li43YTUzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaApA
QCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgp
IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBjb250
ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRQb3NpdGlvbjsgfQogCi0gICAg
dm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBzZXRSZW5kZXJlckFjdGl2ZShib29s
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIGNvbnRlbnRzUG9pbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViVmlldy5jcHAKaW5kZXggNjQ5ZjBmYi4uNGM5MjhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXcuY3BwCkBAIC0yNiwxNSArMjYsMjAgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAKKyNpbmNsdWRlICJFd2tWaWV3LmgiCisjaW5j
bHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudExlZ2Fj
eUltcGwuaCIKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICNpbmNsdWRlICJXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdl
YlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgUGFnZUNsaWVudCogcGFnZUNsaWVu
dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQotICAg
IDogbV93ZWJQYWdlUHJveHkoY29udGV4dC0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCBwYWdl
R3JvdXApKQotICAgICwgbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCitXZWJWaWV3OjpXZWJWaWV3
KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3QmVoYXZp
b3IgYmVoYXZpb3IsIEV3a1ZpZXcqIGV3a1ZpZXcpCisgICAgOiBtX3BhZ2VDbGllbnQoYmVoYXZp
b3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBsOjpjcmVhdGUoZXdr
VmlldykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKGV3a1ZpZXcpKQorICAgICwgbV93
ZWJQYWdlUHJveHkoY29udGV4dC0+Y3JlYXRlV2ViUGFnZShtX3BhZ2VDbGllbnQuZ2V0KCksIHBh
Z2VHcm91cCkpCisgICAgLCBtX2V2YXNPYmplY3QoZXdrVmlldy0+ZXZhc09iamVjdCgpKQogewog
ICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CiAgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VH
cm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKQEAg
LTk0LDQgKzk5LDE0IEBAIHZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMoKQogICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucygpOwogfQogCit2b2lkIFdlYlZpZXc6OnVwZGF0ZVZpZXdwb3J0U2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIG1fcGFnZUNsaWVudC0+dXBkYXRlVmll
d3BvcnRTaXplKHNpemUpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZENvbW1pdExvYWQoKQorewor
ICAgIG1fcGFnZUNsaWVudC0+ZGlkQ29tbWl0TG9hZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKaW5kZXggN2ViNTJhZC4u
ZTk3MTA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKQEAgLTMzLDEz
ICszMywyMyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZl
cmVuY2VzLmgiCiAKK2NsYXNzIEV3a1ZpZXc7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFz
cyBQYWdlQ2xpZW50QmFzZTsKKwogY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3Qgewog
cHVibGljOgorICAgIGVudW0gVmlld0JlaGF2aW9yIHsKKyAgICAgICAgTGVnYWN5QmVoYXZpb3Is
CisgICAgICAgIERlZmF1bHRCZWhhdmlvcgorICAgIH07CisKICAgICBzdGF0aWMgY29uc3QgVHlw
ZSBBUElUeXBlID0gVHlwZVZpZXc7CiAKLSAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBQYWdlQ2xp
ZW50KiwgV2ViUGFnZUdyb3VwKiwgRXZhc19PYmplY3QqKTsKKyAgICAvLyBGSVhNRTogUmVtb3Zl
IGV3a1ZpZXcgYXJndW1lbnQgd2hlbiBwb3NzaWJsZS4KKyAgICBXZWJWaWV3KFdlYkNvbnRleHQq
LCBXZWJQYWdlR3JvdXAqLCBWaWV3QmVoYXZpb3IsIEV3a1ZpZXcqKTsKICAgICB2aXJ0dWFsIH5X
ZWJWaWV3KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemUoKTsKQEAgLTU2LDYgKzY2LDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwog
ICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKIAorICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgcGFnZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUG9z
aXRpb247IH0KKyAgICB2b2lkIHNldFBhZ2VQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBwb3NpdGlvbikgeyBtX3BhZ2VQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CisgICAgdm9pZCB1
cGRhdGVWaWV3cG9ydFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQgZGlk
Q29tbWl0TG9hZCgpOworCiAgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgogICAg
IEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CiAgICAg
V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHkuZ2V0KCk7IH0KQEAg
LTYzLDggKzc4LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CiAKKyAgICBPd25QdHI8UGFnZUNsaWVudEJhc2U+
IG1fcGFnZUNsaWVudDsKICAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsK
ICAgICBFdmFzX09iamVjdCogbV9ldmFzT2JqZWN0OworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
bV9wYWdlUG9zaXRpb247CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188083</attachid>
            <date>2013-02-13 08:13:48 -0800</date>
            <delta_ts>2013-02-13 08:24:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>109684_move_pageClient.patch</filename>
            <type>text/plain</type>
            <size>6294</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NTg3MTU0Li42NzA1NmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTMtMDItMTMgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUGFnZUNsaWVudCBzaG91bGQgYmUgb3duZWQgYnkg
V2ViVmlldywgbm90IEV3a1ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1vdmUgRUZsJ3MgUGFnZUNsaWVudCBvd25lcnNoaXAgZnJvbSBFd2tWaWV3
IHRvIFdlYlZpZXcuIFBhZ2VDbGllbnQgaXMgYW4gaW50ZXJuYWwKKyAgICAgICAgV2ViS2l0MiBj
bGFzcyBhbmQgRXdrVmlldyBzaG91bGQgZXZlbnR1YWxseSBub3QgaW50ZXJhY3QgZGlyZWN0bHkg
d2l0aCBpdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAg
ICAgICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdr
Vmlldy5oOgorICAgICAgICAoRXdrVmlldzo6cGFnZUNsaWVudCk6CisgICAgICAgIChFd2tWaWV3
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VDbGllbnQp
OgorICAgICAgICAoV2ViVmlldyk6CisKIDIwMTMtMDItMTIgIEFkZW5pbHNvbiBDYXZhbGNhbnRp
ICA8Y2F2YWxjYW50aWlAZ21haWwuY29tPgogCiAgICAgICAgIFtXSzJdIFBhZ2UgcmVsb2FkaW5n
IHdpbGwgY3Jhc2ggVUlQcm9jZXNzIGFmdGVyIFdlYlByb2Nlc3Mgd2FzIGtpbGxlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCBjNDUzMzEzLi5j
YzU1ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNw
cApAQCAtMzEsOCArMzEsNiBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2Uu
aCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50RGVmYXVsdEltcGwuaCIKLSNpbmNsdWRlICJQYWdlQ2xp
ZW50TGVnYWN5SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkQ2xpZW50RWZsLmgiCiAjaW5jbHVk
ZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIlBhZ2VVSUNsaWVudEVmbC5oIgpA
QCAtMjIwLDEyICsyMTgsMTQgQEAgdm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJB
Q0tfSElERT46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmEKIAogLy8gRXdrVmll
dyBpbXBsZW1lbnRhdGlvbi4KIAorQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShFd2tWaWV3
OjpEZWZhdWx0QmVoYXZpb3IsIFdlYlZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yLCBXZWJWaWV3OjpMZWdh
Y3lCZWhhdmlvcik7CisKIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3Qs
IFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
LCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkK
ICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShm
YWxzZSkKLSAgICAsIG1fcGFnZUNsaWVudChiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IgPyBQ
YWdlQ2xpZW50RGVmYXVsdEltcGw6OmNyZWF0ZSh0aGlzKSA6IFBhZ2VDbGllbnRMZWdhY3lJbXBs
OjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9J
bXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCBtX3BhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChw
YWdlR3JvdXApLCBldmFzT2JqZWN0KSkpCisgICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdl
YlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwg
c3RhdGljX2Nhc3Q8V2ViVmlldzo6Vmlld0JlaGF2aW9yPihiZWhhdmlvciksIHRoaXMpKSkKICAg
ICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAg
ICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykp
CiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCA5YWRmYjBmLi5l
OTZlZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBA
IC0xOTYsNyArMTk2LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGluZm9y
bURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhLCB1bnNp
Z25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgY3Vy
cmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlKTsKIAot
ICAgIFdlYktpdDo6UGFnZUNsaWVudEJhc2UqIHBhZ2VDbGllbnQoKSB7IHJldHVybiBtX3BhZ2VD
bGllbnQuZ2V0KCk7IH0KKyAgICBXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlKiBwYWdlQ2xpZW50KCkg
eyByZXR1cm4gbV93ZWJWaWV3LT5wYWdlQ2xpZW50KCk7IH0KIAogICAgIHZvaWQgc2V0UGFnZVNj
YWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGVG
YWN0b3I7IH0KICAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VTY2FsZUZhY3RvcjsgfQpAQCAtMjU5LDcgKzI1OSw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PFdlYktpdDo6RXZhc0dMQ29udGV4dD4gbV9ldmFzR0xDb250ZXh0OwogICAgIE93blB0cjxXZWJL
aXQ6OkV2YXNHTFN1cmZhY2U+IG1fZXZhc0dMU3VyZmFjZTsKICAgICBib29sIG1fcGVuZGluZ1N1
cmZhY2VSZXNpemU7Ci0gICAgT3duUHRyPFdlYktpdDo6UGFnZUNsaWVudEJhc2U+IG1fcGFnZUNs
aWVudDsKICAgICBSZWZQdHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRy
PFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRy
PFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKaW5kZXggNjQ5ZjBmYi4uNjczNTUwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCkBAIC0yNiwxNSArMjYs
MjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAKKyNpbmNs
dWRlICJFd2tWaWV3LmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudERlZmF1bHRJbXBsLmgiCisjaW5j
bHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLVdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwg
UGFnZUNsaWVudCogcGFnZUNsaWVudCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV2YXNfT2Jq
ZWN0KiBldmFzT2JqZWN0KQotICAgIDogbV93ZWJQYWdlUHJveHkoY29udGV4dC0+Y3JlYXRlV2Vi
UGFnZShwYWdlQ2xpZW50LCBwYWdlR3JvdXApKQotICAgICwgbV9ldmFzT2JqZWN0KGV2YXNPYmpl
Y3QpCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCog
cGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IsIEV3a1ZpZXcqIGV3a1ZpZXcpCisgICAg
OiBtX3BhZ2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERl
ZmF1bHRJbXBsOjpjcmVhdGUoZXdrVmlldykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRl
KGV3a1ZpZXcpKQorICAgICwgbV93ZWJQYWdlUHJveHkoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSht
X3BhZ2VDbGllbnQuZ2V0KCksIHBhZ2VHcm91cCkpCisgICAgLCBtX2V2YXNPYmplY3QoZXdrVmll
dy0+ZXZhc09iamVjdCgpKQogewogICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CiAgICAg
bV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBv
c2l0aW5nTW9kZSh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKaW5k
ZXggN2ViNTJhZC4uNGY0NDY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3
LmgKQEAgLTMzLDEzICszMywyMyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1
ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAKK2NsYXNzIEV3a1ZpZXc7CisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCitjbGFzcyBQYWdlQ2xpZW50QmFzZTsKKwogY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBB
UElPYmplY3QgewogcHVibGljOgorICAgIGVudW0gVmlld0JlaGF2aW9yIHsKKyAgICAgICAgTGVn
YWN5QmVoYXZpb3IsCisgICAgICAgIERlZmF1bHRCZWhhdmlvcgorICAgIH07CisKICAgICBzdGF0
aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZVZpZXc7CiAKLSAgICBXZWJWaWV3KFdlYkNvbnRl
eHQqLCBQYWdlQ2xpZW50KiwgV2ViUGFnZUdyb3VwKiwgRXZhc19PYmplY3QqKTsKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIGV3a1ZpZXcgYXJndW1lbnQgd2hlbiBwb3NzaWJsZS4KKyAgICBXZWJWaWV3
KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqLCBWaWV3QmVoYXZpb3IsIEV3a1ZpZXcqKTsKICAg
ICB2aXJ0dWFsIH5XZWJWaWV3KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemUoKTsKQEAgLTU4LDEx
ICs2OCwxMyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUu
CiAgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QoKSB7IHJldHVybiBtX2V2YXNPYmplY3Q7IH0K
KyAgICBQYWdlQ2xpZW50QmFzZSogcGFnZUNsaWVudCgpIHsgcmV0dXJuIG1fcGFnZUNsaWVudC5n
ZXQoKTsgfQogICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5
LmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBBUElUeXBlOyB9CiAKKyAgICBPd25QdHI8UGFnZUNsaWVudEJhc2U+IG1fcGFnZUNsaWVu
dDsKICAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKICAgICBFdmFzX09i
amVjdCogbV9ldmFzT2JqZWN0OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188086</attachid>
            <date>2013-02-13 08:24:59 -0800</date>
            <delta_ts>2013-02-13 11:23:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>109684_move_pageClient.patch</filename>
            <type>text/plain</type>
            <size>6352</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3MDg3NzFiLi43ZDY5ZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjcg
QEAKIDIwMTMtMDItMTMgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgogCisgICAgICAgIFtFRkxdW1dLMl0gUGFnZUNsaWVudCBzaG91bGQgYmUgb3duZWQgYnkg
V2ViVmlldywgbm90IEV3a1ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1vdmUgRUZsJ3MgUGFnZUNsaWVudCBvd25lcnNoaXAgZnJvbSBFd2tWaWV3
IHRvIFdlYlZpZXcuIFBhZ2VDbGllbnQgaXMgYW4gaW50ZXJuYWwKKyAgICAgICAgV2ViS2l0MiBj
bGFzcyBhbmQgRXdrVmlldyBzaG91bGQgZXZlbnR1YWxseSBub3QgaW50ZXJhY3QgZGlyZWN0bHkg
d2l0aCBpdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAg
ICAgICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdr
Vmlldy5oOgorICAgICAgICAoRXdrVmlldzo6cGFnZUNsaWVudCk6CisgICAgICAgIChFd2tWaWV3
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VDbGllbnQp
OgorICAgICAgICAoV2ViVmlldyk6CisKKzIwMTMtMDItMTMgIENocmlzdG9waGUgRHVtZXogIDxj
aC5kdW1lekBzaXNhLnNhbXN1bmcuY29tPgorCiAgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNl
IFdLVmlld0NsaWVudCBDIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA5NTU5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHAKaW5kZXggZTYzYWU3Yy4uMGQ2M2Q2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTMxLDggKzMxLDYgQEAKICNpbmNsdWRl
ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5o
IgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudERlZmF1
bHRJbXBsLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIKICNpbmNsdWRlICJQ
YWdlTG9hZENsaWVudEVmbC5oIgogI2luY2x1ZGUgIlBhZ2VQb2xpY3lDbGllbnRFZmwuaCIKICNp
bmNsdWRlICJQYWdlVUlDbGllbnRFZmwuaCIKQEAgLTIyMSwxMiArMjE5LDE0IEBAIHZvaWQgRXdr
Vmlld0V2ZW50SGFuZGxlcjxFVkFTX0NBTExCQUNLX0hJREU+OjpoYW5kbGVFdmVudCh2b2lkKiBk
YXRhLCBFdmFzKiwgRXZhCiAKIC8vIEV3a1ZpZXcgaW1wbGVtZW50YXRpb24uCiAKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yLCBXZWJWaWV3OjpE
ZWZhdWx0QmVoYXZpb3IpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShFd2tWaWV3OjpM
ZWdhY3lCZWhhdmlvciwgV2ViVmlldzo6TGVnYWN5QmVoYXZpb3IpOworCiBFd2tWaWV3OjpFd2tW
aWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRl
eHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQogICAg
IDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAg
ICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBtX3BhZ2VDbGllbnQoYmVo
YXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBsOjpjcmVhdGUo
dGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV93ZWJW
aWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KHRvSW1wbChtX2NvbnRleHQtPndrQ29udGV4dCgpKSwg
bV9wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwKSwgZXZhc09iamVjdCkpKQorICAg
ICwgbV93ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KHRvSW1wbChtX2NvbnRleHQtPndrQ29u
dGV4dCgpKSwgdG9JbXBsKHBhZ2VHcm91cCksIHN0YXRpY19jYXN0PFdlYlZpZXc6OlZpZXdCZWhh
dmlvcj4oYmVoYXZpb3IpLCB0aGlzKSkpCiAgICAgLCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2Fk
Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBv
bGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJ
Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmgKaW5kZXggZTQyZDE0YS4uMmZlN2I5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMTk3LDcgKzE5Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBsb25nIGN1cnJlbnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5V
c2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBs
b25nIGxvbmcgZXhwZWN0ZWRVc2FnZSk7CiAKLSAgICBXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlKiBw
YWdlQ2xpZW50KCkgeyByZXR1cm4gbV9wYWdlQ2xpZW50LmdldCgpOyB9CisgICAgV2ViS2l0OjpQ
YWdlQ2xpZW50QmFzZSogcGFnZUNsaWVudCgpIHsgcmV0dXJuIG1fd2ViVmlldy0+cGFnZUNsaWVu
dCgpOyB9CiAKICAgICB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rvcikg
eyBtX3BhZ2VTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOyB9CiAgICAgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0KQEAgLTI2MCw3ICsy
NjAsNiBAQCBwcml2YXRlOgogICAgIE93blB0cjxXZWJLaXQ6OkV2YXNHTENvbnRleHQ+IG1fZXZh
c0dMQ29udGV4dDsKICAgICBPd25QdHI8V2ViS2l0OjpFdmFzR0xTdXJmYWNlPiBtX2V2YXNHTFN1
cmZhY2U7CiAgICAgYm9vbCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwotICAgIE93blB0cjxXZWJL
aXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYktpdDo6V2Vi
Vmlldz4gbV93ZWJWaWV3OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBt
X3BhZ2VMb2FkQ2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+
IG1fcGFnZVBvbGljeUNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcu
Y3BwCmluZGV4IDg3MWRmYzMuLjQ4ZTk4OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmNwcApAQCAtMjYsMTUgKzI2LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2ViVmlldy5oIgogCisjaW5jbHVkZSAiRXdrVmlldy5oIgorI2luY2x1ZGUgIlBh
Z2VDbGllbnREZWZhdWx0SW1wbC5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnRMZWdhY3lJbXBsLmgi
CisKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJWaWV3OjpX
ZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFBhZ2VDbGllbnQqIHBhZ2VDbGllbnQsIFdlYlBh
Z2VHcm91cCogcGFnZUdyb3VwLCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKLSAgICA6IG1fd2Vi
UGFnZVByb3h5KGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UocGFnZUNsaWVudCwgcGFnZUdyb3VwKSkK
LSAgICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorV2ViVmlldzo6V2ViVmlldyhXZWJDb250
ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2
aW9yLCBFd2tWaWV3KiBld2tWaWV3KQorICAgIDogbV9wYWdlQ2xpZW50KGJlaGF2aW9yID09IERl
ZmF1bHRCZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRlKGV3a1ZpZXcpIDog
UGFnZUNsaWVudExlZ2FjeUltcGw6OmNyZWF0ZShld2tWaWV3KSkKKyAgICAsIG1fd2ViUGFnZVBy
b3h5KGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UobV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAp
KQorICAgICwgbV9ldmFzT2JqZWN0KGV3a1ZpZXctPmV2YXNPYmplY3QoKSkKIHsKICAgICBtX3dl
YlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkKHRydWUpOwogICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+
cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmluZGV4IDRiNTZiODUuLjc1OTcwZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCkBAIC0zNCwxMyArMzQsMjMgQEAKICNpbmNs
dWRlICJXZWJQcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKIAorY2xh
c3MgRXdrVmlldzsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFBhZ2VDbGllbnRCYXNl
OworCiBjbGFzcyBXZWJWaWV3IDogcHVibGljIEFQSU9iamVjdCB7CiBwdWJsaWM6CisgICAgZW51
bSBWaWV3QmVoYXZpb3IgeworICAgICAgICBMZWdhY3lCZWhhdmlvciwKKyAgICAgICAgRGVmYXVs
dEJlaGF2aW9yCisgICAgfTsKKwogICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBl
VmlldzsKIAotICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFBhZ2VDbGllbnQqLCBXZWJQYWdlR3Jv
dXAqLCBFdmFzX09iamVjdCopOworICAgIC8vIEZJWE1FOiBSZW1vdmUgZXdrVmlldyBhcmd1bWVu
dCB3aGVuIHBvc3NpYmxlLgorICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCos
IFZpZXdCZWhhdmlvciwgRXdrVmlldyopOwogICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAogICAg
IHZvaWQgaW5pdGlhbGl6ZSgpOwpAQCAtNjQsMTIgKzc0LDE0IEBAIHB1YmxpYzoKIAogICAgIC8v
IEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KICAgICBFdmFzX09iamVjdCogZXZhc09iamVj
dCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIFBhZ2VDbGllbnRCYXNlKiBwYWdlQ2xp
ZW50KCkgeyByZXR1cm4gbV9wYWdlQ2xpZW50LmdldCgpOyB9CiAgICAgV2ViUGFnZVByb3h5KiBw
YWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHkuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KIAogICAgIFdlYlZp
ZXdDbGllbnQgbV9jbGllbnQ7CisgICAgT3duUHRyPFBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGll
bnQ7CiAgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV93ZWJQYWdlUHJveHk7CiAgICAgRXZhc19P
YmplY3QqIG1fZXZhc09iamVjdDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188126</attachid>
            <date>2013-02-13 11:23:54 -0800</date>
            <delta_ts>2013-02-14 07:13:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>109684_webview_pageClient.patch</filename>
            <type>text/plain</type>
            <size>56579</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwMzI5NTgyLi5iMjY0NGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAz
IEBACisyMDEzLTAyLTEzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5n
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEhhdmUgV2ViVmlldyBzdWJjbGFzcyBQYWdlQ2xp
ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdG9w
IGNvbnN0cnVjdGluZyB0aGUgUGFnZUNsaWVudCBpbiBFd2tWaWV3LiBQYWdlQ2xpZW50IGlzIGFu
IGludGVybmFsCisgICAgICAgIGNsYXNzIGFuZCB3ZSBzaG91bGQgbm90IHVzZSBpdCBkaXJlY3Rs
eSBpbiBvdXIgRXdrIGltcGxlbWVudGF0aW9uLgorICAgICAgICBJbnN0ZWFkLCBoYXZlIFdlYlZp
ZXcgc3ViY2xhc3MgUGFnZUNsaWVudC4gVGhlIFBhZ2VDbGllbnQgaW1wbGVtZW50YXRpb24KKyAg
ICAgICAganVzdCBjYWxscyBXZWJWaWV3IG1ldGhvZHMgb3RoZXJ3aXNlLgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5j
cHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OnNldFNp
emUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndlYlZpZXcpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1BhZ2VDbGllbnRCYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2Vm
bC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdl
TG9hZENsaWVudEVmbDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6dmlld1dpZGdldCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6On5XZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpldmFzT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6ZHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RHJh
d3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpkcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnVw
ZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpZENoYW5nZUNv
bnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVh
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlzcGxheVZpZXcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpzY3JvbGxWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dmlld1Np
emUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6aXNWaWV3VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmlzVmll
d0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkUmVsYXVuY2hQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6cGFnZUNsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnRvb2xUaXBDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q3Vyc29yKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6Y2FuVW5kb1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpl
eGVjdXRlVW5kb1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzY3JlZW5Ub1dpbmRv
dyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndpbmRvd1RvU2NyZWVuKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6ZG9uZVdpdGhLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OmRvbmVXaXRoVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNy
ZWF0ZVBvcHVwTWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlQ29u
dGV4dE1lbnVQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZUNvbG9yQ2hv
b3NlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RmluZEluZGljYXRvcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JN
YWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0
YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3Vz
dG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6dXBkYXRlVGV4dElucHV0U3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmNvbnZlcnRUb1VzZXJTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpZENoYW5n
ZVZpZXdwb3J0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VEaWRS
ZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkUmVuZGVyRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlUmVmKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OmNhblNjcm9sbFZpZXcpOgorCiAyMDEzLTAyLTEzICBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbV0syXVtFRkxdIENsZWFudXAg
b2YgZ3JhcGhpY3MgcmVsYXRlZCBjb2RlIGluIEV3a1ZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggMTU2YmExYi4uYTAwODFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTg5LDkgKzg5LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L2VmbC9Gb3JtQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvSW5wdXRNZXRob2RDb250
ZXh0RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5jcHAKLSAg
ICBVSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAotICAgIFVJUHJvY2Vzcy9lZmwvUGFn
ZUNsaWVudExlZ2FjeUltcGwuY3BwCi0gICAgVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVs
dEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKICAgICBV
SVByb2Nlc3MvZWZsL1BhZ2VQb2xpY3lDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9Q
YWdlVUlDbGllbnRFZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuY3BwCmluZGV4IGZlOTRhMWYuLjU1NzA0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0zMCw5ICszMCw2IEBACiAjaW5jbHVkZSAi
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVu
dEJhc2UuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50RGVmYXVsdEltcGwuaCIKLSNpbmNsdWRlICJQ
YWdlQ2xpZW50TGVnYWN5SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkQ2xpZW50RWZsLmgiCiAj
aW5jbHVkZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIlBhZ2VVSUNsaWVudEVm
bC5oIgpAQCAtMjI2LDggKzIyMyw3IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2
YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlCiAgICAgOiBt
X2V2YXNPYmplY3QoZXZhc09iamVjdCkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwg
bV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKLSAgICAsIG1fcGFnZUNsaWVudChiZWhhdmlv
ciA9PSBEZWZhdWx0QmVoYXZpb3IgPyBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNyZWF0ZSh0aGlz
KSA6IFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3dlYlZpZXco
YWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCBtX3Bh
Z2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXApLCBldmFzT2JqZWN0KSkpCisgICAgLCBt
X3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0
KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwgdGhpcykpKQogICAgICwgbV9wYWdlTG9hZENsaWVudChQ
YWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9saWN5Q2xpZW50
KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVVJQ2xpZW50
KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtNDY1LDcgKzQ2MSw3IEBAIHZvaWQg
RXdrVmlldzo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICByZXR1cm47CiAK
ICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShtX3NpemUsIEludFNpemUoKSk7Ci0gICAgcGFnZUNs
aWVudCgpLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICB3ZWJWaWV3KCktPnVwZGF0ZVZpZXdw
b3J0U2l6ZSgpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gRXdrVmlldzo6dHJhbnNmb3JtRnJvbVNj
ZW5lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApp
bmRleCA2ZmNjNWNjLi41YjExZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5oCkBAIC01OSw3ICs1OSw2IEBAIGNsYXNzIENvbnRleHRNZW51Q2xpZW50RWZs
OwogY2xhc3MgRmluZENsaWVudEVmbDsKIGNsYXNzIEZvcm1DbGllbnRFZmw7CiBjbGFzcyBJbnB1
dE1ldGhvZENvbnRleHRFZmw7Ci1jbGFzcyBQYWdlQ2xpZW50QmFzZTsKIGNsYXNzIFBhZ2VMb2Fk
Q2xpZW50RWZsOwogY2xhc3MgUGFnZVBvbGljeUNsaWVudEVmbDsKIGNsYXNzIFBhZ2VVSUNsaWVu
dEVmbDsKQEAgLTIwOSw3ICsyMDgsOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgaW5mb3JtRGF0YWJhc2VRdW90YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUs
IGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVv
dGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcg
bG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNh
Z2UpOwogCi0gICAgV2ViS2l0OjpQYWdlQ2xpZW50QmFzZSogcGFnZUNsaWVudCgpIHsgcmV0dXJu
IG1fcGFnZUNsaWVudC5nZXQoKTsgfQorICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJs
ZS4KKyAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0
KCk7IH0KIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7
IG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KICAgICBmbG9hdCBwYWdlU2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQpAQCAtMjcyLDcgKzI3
Miw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbV91c2VyVmlld3BvcnRUcmFuc2Zvcm07CiAgICAgYm9v
bCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwotICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRC
YXNlPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3
OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50
OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNs
aWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApp
bmRleCA4NjNiZTQ4Li5kNmViZjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiRmluZENsaWVu
dEVmbC5oIgogI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKICNpbmNsdWRlICJJbnB1dE1ldGhv
ZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIlBh
Z2VMb2FkQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgogI2lu
Y2x1ZGUgIlBhZ2VVSUNsaWVudEVmbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNl
YzYwMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGll
bnRCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCi0KLSNpbmNsdWRlICJDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgotI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlckVmbC5o
IgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiRXdrVmlldy5o
IgotI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdl
YktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eUVmbC5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5RWZsLmgiCi0j
aW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dC5oIgotI2lu
Y2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZG93bmxvYWRfam9i
LmgiCi0jaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdmlldy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLXVzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotUGFnZUNsaWVudEJhc2U6OlBhZ2VDbGllbnRCYXNlKEV3a1ZpZXcqIHZpZXcpCi0g
ICAgOiBtX3ZpZXcodmlldykKLXsKLX0KLQotUGFnZUNsaWVudEJhc2U6On5QYWdlQ2xpZW50QmFz
ZSgpCi17Ci19Ci0KLVdlYlZpZXcqIFBhZ2VDbGllbnRCYXNlOjp2aWV3KCkKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkuIEluIHRoZSBmdXR1cmUsIG1fdmlldyBzaG91bGQgYmUK
LSAgICAvLyBhIFdlYlZpZXcgaW5zdGVhZCBvZiBhbiBFd2tWaWV3LgotICAgIHJldHVybiB0b0lt
cGwobV92aWV3LT53a1ZpZXcoKSk7Ci19Ci0KLS8vIFBhZ2VDbGllbnQKLVBhc3NPd25QdHI8RHJh
d2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEJhc2U6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQot
ewotICAgIE93blB0cjxEcmF3aW5nQXJlYVByb3h5PiBkcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVh
UHJveHlJbXBsOjpjcmVhdGUobV92aWV3LT5wYWdlKCkpOwotICAgIHJldHVybiBkcmF3aW5nQXJl
YS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJhc2U6OnNldFZpZXdOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgYXJlYSkKLXsKLSAgICB2aWV3KCktPnNldFZpZXdO
ZWVkc0Rpc3BsYXkoYXJlYSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJhc2U6OmRpc3BsYXlWaWV3
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpz
Y3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmKQotewotICAgIHNldFZpZXdOZWVkc0Rpc3BsYXkoc2Nyb2xsUmVjdCk7Ci19
Ci0KLVdlYkNvcmU6OkludFNpemUgUGFnZUNsaWVudEJhc2U6OnZpZXdTaXplKCkKLXsKLSAgICBy
ZXR1cm4gbV92aWV3LT5zaXplKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld1dp
bmRvd0FjdGl2ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBQYWdlQ2xpZW50QmFzZTo6aXNWaWV3Rm9jdXNlZCgpCi17Ci0gICAgcmV0dXJu
IG1fdmlldy0+aXNGb2N1c2VkKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEJhc2U6OmlzVmlld1Zp
c2libGUoKQotewotICAgIHJldHVybiBtX3ZpZXctPmlzVmlzaWJsZSgpOwotfQotCi1ib29sIFBh
Z2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6cHJvY2Vzc0RpZENy
YXNoKCkKLXsKLSAgICAvLyBDaGVjayBpZiBsb2FkaW5nIHdhcyBvbmdvaW5nLCB3aGVuIHdlYiBw
cm9jZXNzIGNyYXNoZWQuCi0gICAgZG91YmxlIGxvYWRQcm9ncmVzcyA9IGV3a192aWV3X2xvYWRf
cHJvZ3Jlc3NfZ2V0KG1fdmlldy0+ZXZhc09iamVjdCgpKTsKLSAgICBpZiAobG9hZFByb2dyZXNz
ID49IDAgJiYgbG9hZFByb2dyZXNzIDwgMSkgewotICAgICAgICBsb2FkUHJvZ3Jlc3MgPSAxOwot
ICAgICAgICBtX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8TG9hZFByb2dyZXNzPigpLmNhbGwoJmxvYWRQ
cm9ncmVzcyk7Ci0gICAgfQotCi0gICAgbV92aWV3LT5zbWFydENhbGxiYWNrPFRvb2x0aXBUZXh0
VW5zZXQ+KCkuY2FsbCgpOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgbV92aWV3
LT5zbWFydENhbGxiYWNrPFdlYlByb2Nlc3NDcmFzaGVkPigpLmNhbGwoJmhhbmRsZWQpOwotCi0g
ICAgaWYgKCFoYW5kbGVkKSB7Ci0gICAgICAgIENTdHJpbmcgdXJsID0gbV92aWV3LT5wYWdlKCkt
PnVybEF0UHJvY2Vzc0V4aXQoKS51dGY4KCk7Ci0gICAgICAgIFdBUk4oIldBUk5JTkc6IFRoZSB3
ZWIgcHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycuXG4iLCB1cmwuZGF0YSgpKTsK
LQotICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9yIHBhZ2UKLSAgICAgICAgZXdrX3ZpZXdfaHRt
bF9zdHJpbmdfbG9hZChtX3ZpZXctPmV2YXNPYmplY3QoKSwgIlRoZSB3ZWIgcHJvY2VzcyBoYXMg
Y3Jhc2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJh
c2U6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAgY29uc3QgY2hhciogdGhlbWVQYXRoID0g
bV92aWV3LT50aGVtZVBhdGgoKTsKLSAgICBpZiAodGhlbWVQYXRoKQotICAgICAgICBtX3ZpZXct
PnBhZ2UoKS0+c2V0VGhlbWVQYXRoKHRoZW1lUGF0aCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJh
c2U6OnBhZ2VDbG9zZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFn
ZUNsaWVudEJhc2U6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
bmV3VG9vbFRpcCkKLXsKLSAgICBpZiAobmV3VG9vbFRpcC5pc0VtcHR5KCkpCi0gICAgICAgIG1f
dmlldy0+c21hcnRDYWxsYmFjazxUb29sdGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxUb29sdGlwVGV4dFNldD4oKS5jYWxsKG5l
d1Rvb2xUaXApOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJiBjdXJzb3IpCi17Ci0gICAgbV92aWV3LT5zZXRDdXJzb3IoY3Vyc29yKTsKLX0KLQotdm9p
ZCBQYWdlQ2xpZW50QmFzZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6cmVnaXN0
ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmQsIFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIG1fdW5kb0NvbnRyb2xs
ZXIucmVnaXN0ZXJFZGl0Q29tbWFuZChjb21tYW5kLCB1bmRvT3JSZWRvKTsKLX0KLQotdm9pZCBQ
YWdlQ2xpZW50QmFzZTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQotewotICAgIG1fdW5kb0NvbnRy
b2xsZXIuY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50QmFzZTo6
Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCi17Ci0gICAg
cmV0dXJuIG1fdW5kb0NvbnRyb2xsZXIuY2FuVW5kb1JlZG8odW5kb09yUmVkbyk7Ci19Ci0KLXZv
aWQgUGFnZUNsaWVudEJhc2U6OmV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJl
ZG8gdW5kb09yUmVkbykKLXsKLSAgICBtX3VuZG9Db250cm9sbGVyLmV4ZWN1dGVVbmRvUmVkbyh1
bmRvT3JSZWRvKTsKLX0KLQotSW50UG9pbnQgUGFnZUNsaWVudEJhc2U6OnNjcmVlblRvV2luZG93
KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBwb2ludDsKLX0KLQotSW50UmVjdCBQYWdlQ2xpZW50QmFzZTo6d2luZG93VG9TY3JlZW4o
Y29uc3QgSW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50
UmVjdCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpkb25lV2l0aEtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6ZG9u
ZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29sIC8qd2FzRXZl
bnRIYW5kbGVkKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZgotCi1QYXNz
UmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50QmFzZTo6Y3JlYXRlUG9wdXBNZW51
UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQotewotICAgIHJldHVybiBXZWJQb3B1cE1lbnVQcm94
eUVmbDo6Y3JlYXRlKG1fdmlldywgcGFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViQ29udGV4dE1l
bnVQcm94eT4gUGFnZUNsaWVudEJhc2U6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVBy
b3h5KiBwYWdlKQotewotICAgIHJldHVybiBXZWJDb250ZXh0TWVudVByb3h5RWZsOjpjcmVhdGUo
bV92aWV3LCBwYWdlKTsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotUGFzc1Jl
ZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gUGFnZUNsaWVudEJhc2U6OmNyZWF0ZUNvbG9yQ2hv
b3NlclByb3h5KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLSNlbmRpZgotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NS
ZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKLXsKLSAgICBtX3ZpZXctPmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAgICBtX3ZpZXctPmV4aXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjp1cGRhdGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpkaWRDb21taXRMb2Fk
Rm9yTWFpbkZyYW1lKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQ
YWdlQ2xpZW50QmFzZTo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1kb3VibGUgUGFnZUNsaWVudEJhc2U6OmN1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25a
b29tRmFjdG9yKGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBh
Z2VDbGllbnRCYXNlOjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPEludFJl
Y3Q+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNl
OjpmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0
aW9ucywgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50QmFzZTo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25z
dCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6dXBkYXRlVGV4dElucHV0U3RhdGUoKQotewot
ICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gbV92aWV3LT5p
bnB1dE1ldGhvZENvbnRleHQoKTsKLSAgICBpZiAoaW5wdXRNZXRob2RDb250ZXh0KQotICAgICAg
ICBpbnB1dE1ldGhvZENvbnRleHQtPnVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7Ci19Ci0KLXZvaWQg
UGFnZUNsaWVudEJhc2U6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3du
bG9hZCkKLXsKLSAgICBFd2tDb250ZXh0KiBjb250ZXh0ID0gbV92aWV3LT5ld2tDb250ZXh0KCk7
Ci0gICAgY29udGV4dC0+ZG93bmxvYWRNYW5hZ2VyKCktPnJlZ2lzdGVyRG93bmxvYWRKb2IodG9B
UEkoZG93bmxvYWQpLCBtX3ZpZXcpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWI1MjhjYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgUGFnZUNsaWVudEJhc2VfaAotI2RlZmluZSBQYWdlQ2xpZW50QmFzZV9o
Ci0KLSNpbmNsdWRlICJEZWZhdWx0VW5kb0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQYWdlQ2xp
ZW50LmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotCi1jbGFzcyBFd2tWaWV3OwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgV2ViVmlldzsKLQotY2xhc3MgUGFnZUNsaWVudEJhc2UgOiBwdWJs
aWMgUGFnZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UGFnZUNsaWVudEJhc2UoKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVWaWV3cG9ydFNpemUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNv
bnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwotCi0gICAgV2ViVmlldyog
dmlldygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGFnZUNsaWVudEJhc2UoRXdrVmll
dyopOwotCi0gICAgLy8gUGFnZUNsaWVudAotICAgIHZpcnR1YWwgUGFzc093blB0cjxEcmF3aW5n
QXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCBkaXNwbGF5VmlldygpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5TY3JvbGxWaWV3KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50U2l6ZSB2aWV3U2l6ZSgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdXaW5kb3dBY3Rp
dmUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpOwotICAgIHZpcnR1YWwgYm9v
bCBpc1ZpZXdWaXNpYmxlKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFJlbGF1bmNoUHJvY2VzcygpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdlQ2xvc2VkKCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJv
eHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygp
OwotICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8p
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JS
ZWRvKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFj
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpID0g
MDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1Rv
U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIHZvaWQgdXBkYXRlVGV4dElu
cHV0U3RhdGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25s
b2FkUHJveHkqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQot
ICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hF
dmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJv
eHkqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRl
Q29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsKLQotI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gY3Jl
YXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
IGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotI2VuZGlmCi0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBi
b29sLCBib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0gICAgdmlydHVhbCBkb3VibGUg
Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1
c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpOwotCi0gICAgdmlydHVhbCB2b2lk
IGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4m
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgY291
bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5k
T3B0aW9ucywgdW5zaWduZWQpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Ny
b2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VU
cmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIEV3a1ZpZXcq
IG1fdmlldzsgLy8gRklYTUU6IFNob3VsZCBiZSBhIFdlYlZpZXcgd2hlbiBwb3NzaWJsZS4KLSAg
ICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29udHJvbGxlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZUNsaWVudEJhc2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDQ4YTgwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgotI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmgi
Ci0KLSNpbmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXcuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgRXdrVmlld0NhbGxiYWNrczsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhZ2VDbGllbnREZWZhdWx0SW1wbDo6UGFnZUNsaWVudERl
ZmF1bHRJbXBsKEV3a1ZpZXcqIHZpZXcpCi0gICAgOiBQYWdlQ2xpZW50QmFzZSh2aWV3KQotewot
fQotCi12b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6ZGlkQ29tbWl0TG9hZCgpCi17Ci0gICAg
QVNTRVJUKG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlcik7Ci0gICAgbV9wYWdlVmlld3BvcnRDb250
cm9sbGVyLT5kaWRDb21taXRMb2FkKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudERlZmF1bHRJbXBs
Ojp1cGRhdGVWaWV3cG9ydFNpemUoKQotewotICAgIGlmICghbV9wYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50KSB7Ci0gICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCA9IFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmNyZWF0ZShtX3ZpZXcpOwotICAgICAgICBt
X3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgUGFnZVZpZXdwb3J0Q29udHJv
bGxlcihtX3ZpZXctPnBhZ2UoKSwgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmdldCgp
KSk7Ci0gICAgfQotICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC0+dXBkYXRlVmll
d3BvcnRTaXplKCk7Ci19Ci0KLUZsb2F0UmVjdCBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNvbnZl
cnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3QpCi17Ci0gICAgRmxvYXRS
ZWN0IHJlc3VsdCA9IHVzZXJSZWN0OwotICAgIHJlc3VsdC5zY2FsZShtX3ZpZXctPnBhZ2UoKS0+
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRmxvYXRSZWN0
IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVj
dCYgZGV2aWNlUmVjdCkKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0gZGV2aWNlUmVjdDsKLSAg
ICByZXN1bHQuc2NhbGUoMSAvIG1fdmlldy0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6ZGlk
Q2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyYgYXR0cikKLXsKLSAgICBBU1NFUlQobV9wYWdlVmlld3BvcnRDb250cm9sbGVyKTsKLSAgICBt
X3BhZ2VWaWV3cG9ydENvbnRyb2xsZXItPmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhhdHRy
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmRpZENoYW5nZUNvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIEFTU0VSVChtX3BhZ2VWaWV3
cG9ydENvbnRyb2xsZXIpOwotICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+ZGlkQ2hhbmdl
Q29udGVudHNTaXplKHNpemUpOwotICAgIHZpZXcoKS0+ZGlkQ2hhbmdlQ29udGVudHNTaXplKHNp
emUpOwotfQotCi12b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6cGFnZURpZFJlcXVlc3RTY3Jv
bGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIEFTU0VSVChtX3BhZ2VWaWV3cG9y
dENvbnRyb2xsZXIpOwotICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+cGFnZURpZFJlcXVl
c3RTY3JvbGwocG9zaXRpb24pOwotfQotCi12b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6ZGlk
UmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKLXsKLSAgICBBU1NFUlQobV9wYWdlVmlld3Bv
cnRDb250cm9sbGVyKTsKLSAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXItPmRpZFJlbmRlckZy
YW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwotfQotCi12b2lkIFBhZ2VDbGllbnREZWZh
dWx0SW1wbDo6cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkKLXsKLSAgICBBU1NFUlQobV9w
YWdlVmlld3BvcnRDb250cm9sbGVyKTsKLSAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXItPnBh
Z2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1
bHRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnREZWZhdWx0
SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTA1N2RkLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQYWdlQ2xpZW50
RGVmYXVsdEltcGxfaAotI2RlZmluZSBQYWdlQ2xpZW50RGVmYXVsdEltcGxfaAotCi0jaW5jbHVk
ZSAiUGFnZUNsaWVudEJhc2UuaCIKLSNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oIgotCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBQYWdlQ2xpZW50RGVmYXVsdEltcGwgOiBwdWJsaWMgUGFn
ZUNsaWVudEJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VDbGllbnRC
YXNlPiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGwpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBhZ2VDbGllbnREZWZhdWx0SW1wbCh2aWV3SW1wbCkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgflBhZ2VDbGllbnREZWZhdWx0SW1wbCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGRpZENvbW1pdExvYWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7
Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0KLXByaXZh
dGU6Ci0gICAgZXhwbGljaXQgUGFnZUNsaWVudERlZmF1bHRJbXBsKEV3a1ZpZXcqKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6
Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRz
U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRS
ZXF1ZXN0U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdl
VHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKTsKLQotICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmw+IG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudDsK
LSAgICBPd25QdHI8V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyPiBtX3BhZ2VWaWV3cG9y
dENvbnRyb2xsZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBh
Z2VDbGllbnREZWZhdWx0SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2M2U2NzdmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50TGVnYWN5SW1w
bC5oIgotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKLSNpbmNs
dWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJl
d2tfdmlldy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBF
d2tWaWV3Q2FsbGJhY2tzOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZUNsaWVudExlZ2Fj
eUltcGw6OlBhZ2VDbGllbnRMZWdhY3lJbXBsKEV3a1ZpZXcqIHZpZXcpCi0gICAgOiBQYWdlQ2xp
ZW50QmFzZSh2aWV3KQotewotfQotCi12b2lkIFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpkaWRDb21t
aXRMb2FkKCkKLXsKLSAgICBtX3ZpZXctPnNjaGVkdWxlVXBkYXRlRGlzcGxheSgpOwotfQotCi12
b2lkIFBhZ2VDbGllbnRMZWdhY3lJbXBsOjp1cGRhdGVWaWV3cG9ydFNpemUoKQotewotICAgIG1f
dmlldy0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KEludFJl
Y3Qocm91bmRlZEludFBvaW50KG1fdmlldy0+cGFnZVBvc2l0aW9uKCkpLCBtX3ZpZXctPnNpemUo
KSksIEZsb2F0UG9pbnQoKSk7Ci19Ci0KLUZsb2F0UmVjdCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6
Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2aWV3UmVjdDsKLX0KLQotRmxvYXRSZWN0IFBh
Z2VDbGllbnRMZWdhY3lJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2
aWV3UmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2aWV3UmVjdDsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0
aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpCi17Ci0gICAgbV92aWV3LT5z
Y2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6
ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0g
ICAgdmlldygpLT5kaWRDaGFuZ2VDb250ZW50c1NpemUoc2l6ZSk7Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudExlZ2FjeUltcGw6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbikKLXsKLSAgICBtX3ZpZXctPnNldFBhZ2VQb3NpdGlvbihGbG9hdFBvaW50KHBvc2l0aW9u
KSk7Ci0gICAgbV92aWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50TGVnYWN5SW1wbDo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotICAgIG1fdmlldy0+c2NoZWR1bGVVcGRhdGVE
aXNwbGF5KCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VUcmFuc2l0aW9u
Vmlld3BvcnRSZWFkeSgpCi17Ci0gICAgbV92aWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVmZWFiZWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgUGFnZUNsaWVudExlZ2FjeUltcGxfaAotI2RlZmluZSBQYWdlQ2xpZW50
TGVnYWN5SW1wbF9oCi0KLSNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgUGFnZUNsaWVudExlZ2FjeUltcGwgOiBwdWJsaWMgUGFnZUNsaWVu
dEJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VDbGllbnRCYXNlPiBj
cmVhdGUoRXdrVmlldyogdmlldykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
UGFnZUNsaWVudExlZ2FjeUltcGwodmlldykpOwotICAgIH0KLQotICAgIHZpcnR1YWwgflBhZ2VD
bGllbnRMZWdhY3lJbXBsKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZCgp
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKTsKLQotICAgIHZpcnR1YWwg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJT
cGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBQYWdlQ2xpZW50TGVnYWN5SW1wbChFd2tWaWV3Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZW5kZXJGcmFtZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGNvdmVyZWRSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZVRyYW5zaXRpb25WaWV3cG9y
dFJlYWR5KCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBhZ2VD
bGllbnRMZWdhY3lJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Q
YWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggYzRiYTY0Ny4uMGUxZTRlMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKQEAgLTI3
LDcgKzI3LDYgQEAKICNpbmNsdWRlICJQYWdlTG9hZENsaWVudEVmbC5oIgogCiAjaW5jbHVkZSAi
RXdrVmlldy5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiV0tBUElD
YXN0LmgiCiAjaW5jbHVkZSAiV0tGcmFtZS5oIgogI2luY2x1ZGUgIldLUGFnZS5oIgpAQCAtMTE3
LDcgKzExNiw3IEBAIHZvaWQgUGFnZUxvYWRDbGllbnRFZmw6OmRpZENvbW1pdExvYWRGb3JGcmFt
ZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNsaWVudEluZm8pLT52aWV3
KCk7Ci0gICAgdmlldy0+cGFnZUNsaWVudCgpLT5kaWRDb21taXRMb2FkKCk7CisgICAgdmlldy0+
d2ViVmlldygpLT5kaWRDb21taXRMb2FkKCk7CiB9CiAKIHZvaWQgUGFnZUxvYWRDbGllbnRFZmw6
OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYsIFdLQmFja0ZvcndhcmRMaXN0SXRl
bVJlZiBhZGRlZEl0ZW0sIFdLQXJyYXlSZWYgcmVtb3ZlZEl0ZW1zLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaAppbmRleCA1YzE5YzI3Li43MGEwMGVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaApAQCAtMjcsNyArMjcsNiBAQAogI2RlZmlu
ZSBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsX2gKIAogI2luY2x1ZGUgIkV3a1ZpZXcu
aCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHAKaW5kZXggZGU3
MGNhMS4uZTA5OWFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJQYWdlUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
UGFnZVByb3h5RWZsLmNwcApAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVkZSAiRXdrVmlldy5o
IgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
VmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKIAogI2luY2x1ZGUgPHN5cy91dHNu
YW1lLmg+CiAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIEV2YXNfT2Jq
ZWN0KiBXZWJQYWdlUHJveHk6OnZpZXdXaWRnZXQoKQogewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQYWdlQ2xpZW50QmFzZSo+KG1fcGFnZUNsaWVudCktPnZpZXcoKS0+ZXZhc09iamVjdCgpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJWaWV3Kj4obV9wYWdlQ2xpZW50KS0+ZXZhc09iamVj
dCgpOwogfQogCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBT
dHJpbmcmIC8qYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ki8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRleCA4NzFkZmMzLi4zYWI0ZmQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDc1ICsyNyw5
NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKIAorI2luY2x1
ZGUgIkRvd25sb2FkTWFuYWdlckVmbC5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBs
LmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgorI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVm
bC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwu
aCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5RWZsLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlFZmwuaCIKKyNpbmNsdWRlICJl
d2tfY29udGV4dF9wcml2YXRlLmgiCisKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAjaW5j
bHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2VuZGlmCiAKK3VzaW5nIG5hbWVz
cGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1XZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFBh
Z2VDbGllbnQqIHBhZ2VDbGllbnQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFdmFzX09iamVj
dCogZXZhc09iamVjdCkKLSAgICA6IG1fd2ViUGFnZVByb3h5KGNvbnRleHQtPmNyZWF0ZVdlYlBh
Z2UocGFnZUNsaWVudCwgcGFnZUdyb3VwKSkKLSAgICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0
KQorV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBh
Z2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKKyAgICA6IG1fZXdrVmlldyhld2tWaWV3KQorICAg
ICwgbV9wYWdlKGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFnZUdyb3VwKSkKIHsKLSAg
ICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwotICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3Jv
dXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CisgICAg
bV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBjaGFyKiBkZWJ1Z1Zpc3Vh
bHNFbnZpcm9ubWVudCA9IGdldGVudigiV0VCS0lUX1NIT1dfQ09NUE9TSVRJTkdfREVCVUdfVklT
VUFMUyIpOwogICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVnVmlzdWFsc0Vudmlyb25t
ZW50ICYmICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIxIik7Ci0gICAgbV93ZWJQ
YWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ0JvcmRl
cnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3Jv
dXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxl
KHNob3dEZWJ1Z1Zpc3VhbHMpOworICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2Vz
KCktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CisgICAg
bV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50
Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIG1fd2ViUGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJW
aWV3KG1fZXZhc09iamVjdCk7CisgICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRX
ZWJWaWV3KGV2YXNPYmplY3QoKSk7CiAjZW5kaWYKIH0KIAogV2ViVmlldzo6fldlYlZpZXcoKQog
ewotICAgIGlmIChtX3dlYlBhZ2VQcm94eS0+aXNDbG9zZWQoKSkKKyAgICBpZiAobV9wYWdlLT5p
c0Nsb3NlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2VQcm94eS0+Y2xvc2Uo
KTsKKyAgICBtX3BhZ2UtPmNsb3NlKCk7CiB9CiAKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgp
CiB7Ci0gICAgbV93ZWJQYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7CisgICAgbV9wYWdl
LT5pbml0aWFsaXplV2ViUGFnZSgpOworfQorCitFdmFzX09iamVjdCogV2ViVmlldzo6ZXZhc09i
amVjdCgpCit7CisgICAgcmV0dXJuIG1fZXdrVmlldy0+ZXZhc09iamVjdCgpOwogfQogCiB2b2lk
IFdlYlZpZXc6OnNldFRoZW1lUGF0aChXS1N0cmluZ1JlZiB0aGVtZSkKIHsKLSAgICBtX3dlYlBh
Z2VQcm94eS0+c2V0VGhlbWVQYXRoKHRvV1RGU3RyaW5nKHRoZW1lKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBtX3BhZ2UtPnNldFRoZW1lUGF0aCh0b1dURlN0cmluZyh0aGVtZSkudXRmOCgpLmRhdGEo
KSk7CiB9CiAKIHZvaWQgV2ViVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZHJhd3NCYWNr
Z3JvdW5kKQogewotICAgIG1fd2ViUGFnZVByb3h5LT5zZXREcmF3c0JhY2tncm91bmQoZHJhd3NC
YWNrZ3JvdW5kKTsKKyAgICBtX3BhZ2UtPnNldERyYXdzQmFja2dyb3VuZChkcmF3c0JhY2tncm91
bmQpOwogfQogCiBib29sIFdlYlZpZXc6OmRyYXdzQmFja2dyb3VuZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fd2ViUGFnZVByb3h5LT5kcmF3c0JhY2tncm91bmQoKTsKKyAgICByZXR1cm4gbV9w
YWdlLT5kcmF3c0JhY2tncm91bmQoKTsKIH0KIAogdm9pZCBXZWJWaWV3OjpzZXREcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZChib29sIHRyYW5zcGFyZW50QmFja2dyb3VuZCkKIHsKLSAgICBtX3dl
YlBhZ2VQcm94eS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQodHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKTsKKyAgICBtX3BhZ2UtPnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKHRyYW5z
cGFyZW50QmFja2dyb3VuZCk7CiB9CiAKIGJvb2wgV2ViVmlldzo6ZHJhd3NUcmFuc3BhcmVudEJh
Y2tncm91bmQoKSBjb25zdAogewotICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eS0+ZHJhd3NUcmFu
c3BhcmVudEJhY2tncm91bmQoKTsKKyAgICByZXR1cm4gbV9wYWdlLT5kcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZCgpOwogfQogCiB2b2lkIFdlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpCiB7Ci0gICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIG1fcGFnZS0+c3VzcGVuZEFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnMoKQogewotICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIG1fcGFnZS0+cmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnMoKTsKIH0KIAogdm9pZCBXZWJWaWV3Ojppbml0aWFsaXplQ2xpZW50
KGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50KQpAQCAtMTAyLDE0ICsxMjMsMzMwIEBAIHZvaWQg
V2ViVmlldzo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS1ZpZXdDbGllbnQqIGNsaWVudCkKICAg
ICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLXZvaWQgV2ViVmlldzo6c2V0Vmll
d05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBhcmVhKQordm9pZCBXZWJWaWV3
OjpkaWRDb21taXRMb2FkKCkKIHsKLSAgICBtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5KHRoaXMs
IGFyZWEpOworICAgIGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlcik7CisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29u
dHJvbGxlci0+ZGlkQ29tbWl0TG9hZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2V3a1ZpZXct
PnNjaGVkdWxlVXBkYXRlRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZpZXc6OnVwZGF0ZVZpZXdw
b3J0U2l6ZSgpCit7CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAg
ICBpZiAoIW1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCkgeworICAgICAgICAgICAgbV9w
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50ID0gUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbDo6Y3JlYXRlKG1fZXdrVmlldyk7CisgICAgICAgICAgICBtX3BhZ2VWaWV3cG9ydENvbnRy
b2xsZXIgPSBhZG9wdFB0cihuZXcgUGFnZVZpZXdwb3J0Q29udHJvbGxlcihwYWdlKCksIG1fcGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC5nZXQoKSkpOworICAgICAgICB9CisgICAgICAgIG1f
cGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC0+dXBkYXRlVmlld3BvcnRTaXplKCk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0VmlzaWJsZUNvbnRlbnRz
UmVjdChJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChtX2V3a1ZpZXctPnBhZ2VQb3NpdGlvbigpKSwg
bV9ld2tWaWV3LT5zaXplKCkpLCBGbG9hdFBvaW50KCkpOwogfQogCiB2b2lkIFdlYlZpZXc6OmRp
ZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQogeworICAg
IGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fcGFnZVZp
ZXdwb3J0Q29udHJvbGxlcik7CisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+ZGlk
Q2hhbmdlQ29udGVudHNTaXplKHNpemUpOworICAgIH0KICAgICBtX2NsaWVudC5kaWRDaGFuZ2VD
b250ZW50c1NpemUodGhpcywgc2l6ZSk7CiB9CiAKKy8vIFBhZ2UgQ2xpZW50CisKK1Bhc3NPd25Q
dHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7
CisgICAgT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGRyYXdpbmdBcmVhID0gRHJhd2luZ0FyZWFQ
cm94eUltcGw6OmNyZWF0ZShwYWdlKCkpOworICAgIHJldHVybiBkcmF3aW5nQXJlYS5yZWxlYXNl
KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBhcmVhKQoreworICAgIG1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkodGhpcywg
YXJlYSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlzcGxheVZpZXcoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2Nyb2xsVmlldyhjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKKyAgICBzZXRW
aWV3TmVlZHNEaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCitXZWJDb3JlOjpJbnRTaXplIFdlYlZp
ZXc6OnZpZXdTaXplKCkKK3sKKyAgICByZXR1cm4gbV9ld2tWaWV3LT5zaXplKCk7Cit9CisKK2Jv
b2wgV2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQor
eworICAgIHJldHVybiBtX2V3a1ZpZXctPmlzRm9jdXNlZCgpOworfQorCitib29sIFdlYlZpZXc6
OmlzVmlld1Zpc2libGUoKQoreworICAgIHJldHVybiBtX2V3a1ZpZXctPmlzVmlzaWJsZSgpOwor
fQorCitib29sIFdlYlZpZXc6OmlzVmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlZpZXc6OnByb2Nlc3NEaWRDcmFz
aCgpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9hZGluZyB3YXMgb25nb2luZywgd2hlbiB3ZWIgcHJv
Y2VzcyBjcmFzaGVkLgorICAgIGRvdWJsZSBsb2FkUHJvZ3Jlc3MgPSBld2tfdmlld19sb2FkX3By
b2dyZXNzX2dldChtX2V3a1ZpZXctPmV2YXNPYmplY3QoKSk7CisgICAgaWYgKGxvYWRQcm9ncmVz
cyA+PSAwICYmIGxvYWRQcm9ncmVzcyA8IDEpIHsKKyAgICAgICAgbG9hZFByb2dyZXNzID0gMTsK
KyAgICAgICAgbV9ld2tWaWV3LT5zbWFydENhbGxiYWNrPExvYWRQcm9ncmVzcz4oKS5jYWxsKCZs
b2FkUHJvZ3Jlc3MpOworICAgIH0KKworICAgIG1fZXdrVmlldy0+c21hcnRDYWxsYmFjazxUb29s
dGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKKworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAg
IG1fZXdrVmlldy0+c21hcnRDYWxsYmFjazxXZWJQcm9jZXNzQ3Jhc2hlZD4oKS5jYWxsKCZoYW5k
bGVkKTsKKworICAgIGlmICghaGFuZGxlZCkgeworICAgICAgICBDU3RyaW5nIHVybCA9IG1fcGFn
ZS0+dXJsQXRQcm9jZXNzRXhpdCgpLnV0ZjgoKTsKKyAgICAgICAgV0FSTigiV0FSTklORzogVGhl
IHdlYiBwcm9jZXNzIGV4cGVyaWVuY2VkIGEgY3Jhc2ggb24gJyVzJy5cbiIsIHVybC5kYXRhKCkp
OworCisgICAgICAgIC8vIERpc3BsYXkgYW4gZXJyb3IgcGFnZQorICAgICAgICBld2tfdmlld19o
dG1sX3N0cmluZ19sb2FkKG1fZXdrVmlldy0+ZXZhc09iamVjdCgpLCAiVGhlIHdlYiBwcm9jZXNz
IGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOworICAgIH0KK30KKwordm9pZCBXZWJWaWV3
OjpkaWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAgIGNvbnN0IGNoYXIqIHRoZW1lUGF0aCA9IG1f
ZXdrVmlldy0+dGhlbWVQYXRoKCk7CisgICAgaWYgKHRoZW1lUGF0aCkKKyAgICAgICAgbV9wYWdl
LT5zZXRUaGVtZVBhdGgodGhlbWVQYXRoKTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWdlQ2xvc2Vk
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnRvb2xUaXBD
aGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkKK3sKKyAgICBp
ZiAobmV3VG9vbFRpcC5pc0VtcHR5KCkpCisgICAgICAgIG1fZXdrVmlldy0+c21hcnRDYWxsYmFj
azxUb29sdGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZXdrVmll
dy0+c21hcnRDYWxsYmFjazxUb29sdGlwVGV4dFNldD4oKS5jYWxsKG5ld1Rvb2xUaXApOworfQor
Cit2b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBt
X2V3a1ZpZXctPnNldEN1cnNvcihjdXJzb3IpOworfQorCit2b2lkIFdlYlZpZXc6OnNldEN1cnNv
ckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRD
b21tYW5kUHJveHk+IGNvbW1hbmQsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRv
KQoreworICAgIG1fdW5kb0NvbnRyb2xsZXIucmVnaXN0ZXJFZGl0Q29tbWFuZChjb21tYW5kLCB1
bmRvT3JSZWRvKTsKK30KKwordm9pZCBXZWJWaWV3OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7
CisgICAgbV91bmRvQ29udHJvbGxlci5jbGVhckFsbEVkaXRDb21tYW5kcygpOworfQorCitib29s
IFdlYlZpZXc6OmNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRv
KQoreworICAgIHJldHVybiBtX3VuZG9Db250cm9sbGVyLmNhblVuZG9SZWRvKHVuZG9PclJlZG8p
OworfQorCit2b2lkIFdlYlZpZXc6OmV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9P
clJlZG8gdW5kb09yUmVkbykKK3sKKyAgICBtX3VuZG9Db250cm9sbGVyLmV4ZWN1dGVVbmRvUmVk
byh1bmRvT3JSZWRvKTsKK30KKworSW50UG9pbnQgV2ViVmlldzo6c2NyZWVuVG9XaW5kb3coY29u
c3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHBvaW50OworfQorCitJbnRSZWN0IFdlYlZpZXc6OndpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJl
Y3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30K
Kwordm9pZCBXZWJWaWV3Ojpkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQordm9pZCBXZWJWaWV3Ojpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0
aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgLyp3YXNFdmVudEhhbmRsZWQqLykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+
IFdlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAg
ICByZXR1cm4gV2ViUG9wdXBNZW51UHJveHlFZmw6OmNyZWF0ZShtX2V3a1ZpZXcsIHBhZ2UpOwor
fQorCitQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZUNvbnRl
eHRNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIHJldHVybiBXZWJDb250ZXh0
TWVudVByb3h5RWZsOjpjcmVhdGUobV9ld2tWaWV3LCBwYWdlKTsKK30KKworI2lmIEVOQUJMRShJ
TlBVVF9UWVBFX0NPTE9SKQorUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gV2ViVmll
dzo6Y3JlYXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmlldzo6c2V0RmluZEluZGlj
YXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKK3sKKyAgICBtX2V3a1ZpZXctPmVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKK30KKwordm9pZCBXZWJWaWV3OjpleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQoreworICAgIG1fZXdrVmlldy0+ZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dXBkYXRlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1l
KGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRG
aW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNv
bnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK2RvdWJsZSBXZWJWaWV3OjpjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViVmlldzo6
c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhj
b25zdCBWZWN0b3I8SW50UmVjdD4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5n
JiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpCit7CisgICAg
SW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBtX2V3a1ZpZXctPmlu
cHV0TWV0aG9kQ29udGV4dCgpOworICAgIGlmIChpbnB1dE1ldGhvZENvbnRleHQpCisgICAgICAg
IGlucHV0TWV0aG9kQ29udGV4dC0+dXBkYXRlVGV4dElucHV0U3RhdGUoKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCit7
CisgICAgRXdrQ29udGV4dCogY29udGV4dCA9IG1fZXdrVmlldy0+ZXdrQ29udGV4dCgpOworICAg
IGNvbnRleHQtPmRvd25sb2FkTWFuYWdlcigpLT5yZWdpc3RlckRvd25sb2FkSm9iKHRvQVBJKGRv
d25sb2FkKSwgbV9ld2tWaWV3KTsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0Rl
dmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3QpCit7CisgICAgaWYgKG1fcGFnZS0+
dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gdXNlclJlY3Q7
CisgICAgICAgIHJlc3VsdC5zY2FsZShtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvLyBMZWdhY3kgbW9kZS4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB1c2VyUmVjdDsKK30KKworRmxvYXRSZWN0IFdlYlZp
ZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIGRldmljZVJlY3QpCit7Cisg
ICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBGbG9hdFJlY3QgcmVz
dWx0ID0gZGV2aWNlUmVjdDsKKyAgICAgICAgcmVzdWx0LnNjYWxlKDEgLyBtX3BhZ2UtPmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvLyBM
ZWdhY3kgbW9kZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBkZXZpY2VSZWN0
OworfQorCit2b2lkIFdlYlZpZXc6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0dHIpCit7CisgICAgaWYgKG1fcGFnZS0+dXNl
Rml4ZWRMYXlvdXQoKSkgeworICAgICAgICBBU1NFUlQobV9wYWdlVmlld3BvcnRDb250cm9sbGVy
KTsKKyAgICAgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFuZ2VWaWV3cG9ydEF0
dHJpYnV0ZXMoYXR0cik7CisgICAgfSBlbHNlCisgICAgICAgIG1fZXdrVmlldy0+c2NoZWR1bGVV
cGRhdGVEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZURpZFJlcXVlc3RTY3JvbGwo
Y29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5
b3V0KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlcik7CisgICAg
ICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+cGFnZURpZFJlcXVlc3RTY3JvbGwocG9zaXRp
b24pOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZXdrVmlldy0+c2V0UGFnZVBvc2l0aW9uKEZs
b2F0UG9pbnQocG9zaXRpb24pKTsKKyAgICAgICAgbV9ld2tWaWV3LT5zY2hlZHVsZVVwZGF0ZURp
c3BsYXkoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkUmVuZGVyRnJhbWUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
b3ZlcmVkUmVjdCkKK3sKKyAgICBpZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7CisgICAg
ICAgIEFTU0VSVChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpOworICAgICAgICBtX3BhZ2VWaWV3
cG9ydENvbnRyb2xsZXItPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3Qp
OworICAgIH0gZWxzZQorICAgICAgICBtX2V3a1ZpZXctPnNjaGVkdWxlVXBkYXRlRGlzcGxheSgp
OworfQorCit2b2lkIFdlYlZpZXc6OnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpCit7Cisg
ICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBBU1NFUlQobV9wYWdl
Vmlld3BvcnRDb250cm9sbGVyKTsKKyAgICAgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5w
YWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9ld2tW
aWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmluZGV4IDRiNTZiODUuLjFiODA5
MDM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3LDYgKzI4LDcgQEAKICNkZWZpbmUgV2ViVmlld19oCiAKICNpbmNsdWRlICJBUElPYmplY3Qu
aCIKKyNpbmNsdWRlICJEZWZhdWx0VW5kb0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5o
IgpAQCAtMzQsMTggKzM2LDIzIEBACiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNs
dWRlICJXZWJWaWV3Q2xpZW50LmgiCiAKK2NsYXNzIEV3a1ZpZXc7CisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi1jbGFzcyBXZWJWaWV3IDogcHVibGljIEFQSU9iamVjdCB7CitjbGFzcyBQYWdlVmll
d3BvcnRDb250cm9sbGVyOworY2xhc3MgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDsK
KworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3QsIHB1YmxpYyBQYWdlQ2xpZW50IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZVZpZXc7CiAKLSAg
ICBXZWJWaWV3KFdlYkNvbnRleHQqLCBQYWdlQ2xpZW50KiwgV2ViUGFnZUdyb3VwKiwgRXZhc19P
YmplY3QqKTsKKyAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqLCBFd2tWaWV3
Kik7CiAgICAgdmlydHVhbCB+V2ViVmlldygpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAK
LSAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViUGFnZVBy
b3h5LmdldCgpKTsgfQorICAgIFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gdG9B
UEkobV9wYWdlLmdldCgpKTsgfQogCiAgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCk7
CiAgICAgYm9vbCBkcmF3c0JhY2tncm91bmQoKSBjb25zdDsKQEAgLTU5LDE5ICs2Niw3NyBAQCBw
dWJsaWM6CiAKICAgICAvLyBWaWV3IGNsaWVudC4KICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQo
Y29uc3QgV0tWaWV3Q2xpZW50Kik7Ci0gICAgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2li
bGUuCi0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QoKSB7IHJldHVybiBtX2V2YXNPYmplY3Q7
IH0KLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2VQcm94eS5nZXQo
KTsgfQorICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KCk7CisgICAgV2ViUGFnZVByb3h5KiBw
YWdlKCkgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CisKKyAgICB2b2lkIGRpZENvbW1pdExvYWQo
KTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlQ29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworcHJpdmF0ZToKKyAgICAvLyBQ
YWdlQ2xpZW50CisgICAgdmlydHVhbCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0
ZURyYXdpbmdBcmVhUHJveHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3
KCk7CisgICAgdmlydHVhbCBib29sIGNhblNjcm9sbFZpZXcoKSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIHZpZXdT
aXplKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld1dpbmRvd0FjdGl2ZSgpOworICAgIHZpcnR1
YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld1Zpc2libGUo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cHJvY2Vzc0RpZENyYXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2Vzcygp
OworICAgIHZpcnR1YWwgdm9pZCBwYWdlQ2xvc2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRvb2xU
aXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisgICAgdmlydHVhbCB2b2lkIHNl
dEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyYpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2Vi
RWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVh
bCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CisgICAgdmlydHVhbCBib29sIGNhblVuZG9S
ZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVV
bmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNj
cmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kik7CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRo
S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wpOworI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25z
dCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOworI2VuZGlmCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQ
cm94eShXZWJQYWdlUHJveHkqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1l
bnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsKKyNpZiBFTkFC
TEUoSU5QVVRfVFlQRV9DT0xPUikKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JDaG9v
c2VyUHJveHk+IGNyZWF0ZUNvbG9yQ2hvb3NlclByb3h5KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyNl
bmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZElu
ZGljYXRvcj4sIGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CisgICAgdmlydHVh
bCBkb3VibGUgY3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCk7CisgICAgdmlydHVhbCB2
b2lkIHNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpOworICAgIHZpcnR1
YWwgdm9pZCBmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0
aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2
b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5n
JiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZFJlcXVl
c3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VUcmFu
c2l0aW9uVmlld3BvcnRSZWFkeSgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQogCiAgICAgV2ViVmlld0NsaWVudCBtX2NsaWVu
dDsKLSAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKLSAgICBFdmFzX09i
amVjdCogbV9ldmFzT2JqZWN0OworICAgIEV3a1ZpZXcqIG1fZXdrVmlldzsgLy8gRklYTUU6IFJl
bW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKKyAg
ICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29udHJvbGxlcjsKKyAgICBPd25QdHI8V2Vi
S2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsPiBtX3BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnQ7CisgICAgT3duUHRyPFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcj4g
bV9wYWdlVmlld3BvcnRDb250cm9sbGVyOwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188344</attachid>
            <date>2013-02-14 07:13:18 -0800</date>
            <delta_ts>2013-02-15 08:50:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>109684_webview_pageClient.patch</filename>
            <type>text/plain</type>
            <size>56636</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjMDg2ODVlLi5mZjAyY2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAz
IEBACisyMDEzLTAyLTEzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5n
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEhhdmUgV2ViVmlldyBzdWJjbGFzcyBQYWdlQ2xp
ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdG9w
IGNvbnN0cnVjdGluZyB0aGUgUGFnZUNsaWVudCBpbiBFd2tWaWV3LiBQYWdlQ2xpZW50IGlzIGFu
IGludGVybmFsCisgICAgICAgIGNsYXNzIGFuZCB3ZSBzaG91bGQgbm90IHVzZSBpdCBkaXJlY3Rs
eSBpbiBvdXIgRXdrIGltcGxlbWVudGF0aW9uLgorICAgICAgICBJbnN0ZWFkLCBoYXZlIFdlYlZp
ZXcgc3ViY2xhc3MgUGFnZUNsaWVudC4gVGhlIFBhZ2VDbGllbnQgaW1wbGVtZW50YXRpb24KKyAg
ICAgICAganVzdCBjYWxscyBXZWJWaWV3IG1ldGhvZHMgb3RoZXJ3aXNlLgorCisgICAgICAgICog
UGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5j
cHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OnNldFNp
emUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndlYlZpZXcpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1BhZ2VDbGllbnRCYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2Vm
bC9QYWdlQ2xpZW50RGVmYXVsdEltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9lZmwvUGFnZUNsaWVudERlZmF1bHRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdl
TG9hZENsaWVudEVmbDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6dmlld1dpZGdldCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6On5XZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpldmFzT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6ZHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RHJh
d3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpkcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnVw
ZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpZENoYW5nZUNv
bnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVh
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlzcGxheVZpZXcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpzY3JvbGxWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dmlld1Np
emUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6aXNWaWV3VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmlzVmll
d0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkUmVsYXVuY2hQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6cGFnZUNsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnRvb2xUaXBDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q3Vyc29yKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6Y2FuVW5kb1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpl
eGVjdXRlVW5kb1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzY3JlZW5Ub1dpbmRv
dyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndpbmRvd1RvU2NyZWVuKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6ZG9uZVdpdGhLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OmRvbmVXaXRoVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNy
ZWF0ZVBvcHVwTWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlQ29u
dGV4dE1lbnVQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZUNvbG9yQ2hv
b3NlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RmluZEluZGljYXRvcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JN
YWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0
YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3Vz
dG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6dXBkYXRlVGV4dElucHV0U3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmNvbnZlcnRUb1VzZXJTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpZENoYW5n
ZVZpZXdwb3J0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VEaWRS
ZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkUmVuZGVyRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlUmVmKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OmNhblNjcm9sbFZpZXcpOgorCiAyMDEzLTAyLTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFN0cmluZ1BhaXJWZWN0b3IKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMTU2YmExYi4uYTAwODFiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UKQEAgLTg5LDkgKzg5LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VT
CiAgICAgVUlQcm9jZXNzL2VmbC9Gb3JtQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwv
SW5wdXRNZXRob2RDb250ZXh0RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvTmV0d29ya0luZm9Q
cm92aWRlci5jcHAKLSAgICBVSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAotICAgIFVJ
UHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCi0gICAgVUlQcm9jZXNzL2VmbC9Q
YWdlQ2xpZW50RGVmYXVsdEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVu
dEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1BhZ2VQb2xpY3lDbGllbnRFZmwuY3BwCiAgICAg
VUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGZlOTRhMWYuLjU1NzA0YTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0zMCw5ICszMCw2
IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2
ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCi0jaW5j
bHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50RGVmYXVsdEltcGwu
aCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50TGVnYWN5SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VMb2Fk
Q2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiUGFnZVBvbGljeUNsaWVudEVmbC5oIgogI2luY2x1ZGUg
IlBhZ2VVSUNsaWVudEVmbC5oIgpAQCAtMjI2LDggKzIyMyw3IEBAIEV3a1ZpZXc6OkV3a1ZpZXco
RXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwg
V0tQYWdlCiAgICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkKICAgICAsIG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKLSAgICAsIG1fcGFn
ZUNsaWVudChiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IgPyBQYWdlQ2xpZW50RGVmYXVsdElt
cGw6OmNyZWF0ZSh0aGlzKSA6IFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpjcmVhdGUodGhpcykpCi0g
ICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tD
b250ZXh0KCkpLCBtX3BhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXApLCBldmFzT2Jq
ZWN0KSkpCisgICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29u
dGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwgdGhpcykpKQogICAgICwgbV9w
YWdlTG9hZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9w
YWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAs
IG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtNDY1LDcg
KzQ2MSw3IEBAIHZvaWQgRXdrVmlldzo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAg
ICAgICByZXR1cm47CiAKICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShtX3NpemUsIEludFNpemUo
KSk7Ci0gICAgcGFnZUNsaWVudCgpLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICB3ZWJWaWV3
KCktPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gRXdrVmlldzo6
dHJhbnNmb3JtRnJvbVNjZW5lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaAppbmRleCA2ZmNjNWNjLi41YjExZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC01OSw3ICs1OSw2IEBAIGNsYXNzIENvbnRl
eHRNZW51Q2xpZW50RWZsOwogY2xhc3MgRmluZENsaWVudEVmbDsKIGNsYXNzIEZvcm1DbGllbnRF
Zmw7CiBjbGFzcyBJbnB1dE1ldGhvZENvbnRleHRFZmw7Ci1jbGFzcyBQYWdlQ2xpZW50QmFzZTsK
IGNsYXNzIFBhZ2VMb2FkQ2xpZW50RWZsOwogY2xhc3MgUGFnZVBvbGljeUNsaWVudEVmbDsKIGNs
YXNzIFBhZ2VVSUNsaWVudEVmbDsKQEAgLTIwOSw3ICsyMDgsOCBAQCBwdWJsaWM6CiAKICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgaW5mb3JtRGF0YWJhc2VRdW90YVJlYWNoZWQoY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
bG9uZyBjdXJyZW50UXVvdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2Us
IHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBs
b25nIGV4cGVjdGVkVXNhZ2UpOwogCi0gICAgV2ViS2l0OjpQYWdlQ2xpZW50QmFzZSogcGFnZUNs
aWVudCgpIHsgcmV0dXJuIG1fcGFnZUNsaWVudC5nZXQoKTsgfQorICAgIC8vIEZJWE1FOiBSZW1v
dmUgd2hlbiBwb3NzaWJsZS4KKyAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKSB7IHJldHVy
biBtX3dlYlZpZXcuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0
IHNjYWxlRmFjdG9yKSB7IG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KICAgICBm
bG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3Rvcjsg
fQpAQCAtMjcyLDcgKzI3Miw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Np
emU7CiAgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbV91c2VyVmlld3BvcnRUcmFu
c2Zvcm07CiAgICAgYm9vbCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwotICAgIE93blB0cjxXZWJL
aXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYktpdDo6V2Vi
Vmlldz4gbV93ZWJWaWV3OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBt
X3BhZ2VMb2FkQ2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+
IG1fcGFnZVBvbGljeUNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcAppbmRleCA4NjNiZTQ4Li5kNmViZjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5j
bHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwuaCIKICNpbmNs
dWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5o
IgogI2luY2x1ZGUgIlBhZ2VMb2FkQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiUGFnZVBvbGljeUNs
aWVudEVmbC5oIgogI2luY2x1ZGUgIlBhZ2VVSUNsaWVudEVmbC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYWNlYzYwMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCi0KLSNp
bmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgotI2luY2x1ZGUgIkRvd25s
b2FkTWFuYWdlckVmbC5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5j
bHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgotI2lu
Y2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUVmbC5oIgotI2luY2x1ZGUgIldlYlBhZ2VH
cm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVu
dVByb3h5RWZsLmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJld2tf
Y29udGV4dC5oIgotI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJl
d2tfZG93bmxvYWRfam9iLmgiCi0jaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgi
Ci0jaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdmlldy5oIgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZUNsaWVudEJhc2U6OlBhZ2VDbGllbnRCYXNlKEV3
a1ZpZXcqIHZpZXcpCi0gICAgOiBtX3ZpZXcodmlldykKLXsKLX0KLQotUGFnZUNsaWVudEJhc2U6
On5QYWdlQ2xpZW50QmFzZSgpCi17Ci19Ci0KLVdlYlZpZXcqIFBhZ2VDbGllbnRCYXNlOjp2aWV3
KCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkuIEluIHRoZSBmdXR1cmUsIG1f
dmlldyBzaG91bGQgYmUKLSAgICAvLyBhIFdlYlZpZXcgaW5zdGVhZCBvZiBhbiBFd2tWaWV3Lgot
ICAgIHJldHVybiB0b0ltcGwobV92aWV3LT53a1ZpZXcoKSk7Ci19Ci0KLS8vIFBhZ2VDbGllbnQK
LVBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEJhc2U6OmNyZWF0ZURyYXdp
bmdBcmVhUHJveHkoKQotewotICAgIE93blB0cjxEcmF3aW5nQXJlYVByb3h5PiBkcmF3aW5nQXJl
YSA9IERyYXdpbmdBcmVhUHJveHlJbXBsOjpjcmVhdGUobV92aWV3LT5wYWdlKCkpOwotICAgIHJl
dHVybiBkcmF3aW5nQXJlYS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJhc2U6OnNl
dFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgYXJlYSkKLXsKLSAgICB2
aWV3KCktPnNldFZpZXdOZWVkc0Rpc3BsYXkoYXJlYSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJh
c2U6OmRpc3BsYXlWaWV3KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBh
Z2VDbGllbnRCYXNlOjpzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQotewotICAgIHNldFZpZXdOZWVkc0Rpc3BsYXko
c2Nyb2xsUmVjdCk7Ci19Ci0KLVdlYkNvcmU6OkludFNpemUgUGFnZUNsaWVudEJhc2U6OnZpZXdT
aXplKCkKLXsKLSAgICByZXR1cm4gbV92aWV3LT5zaXplKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVu
dEJhc2U6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50QmFzZTo6aXNWaWV3Rm9jdXNlZCgp
Ci17Ci0gICAgcmV0dXJuIG1fdmlldy0+aXNGb2N1c2VkKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVu
dEJhc2U6OmlzVmlld1Zpc2libGUoKQotewotICAgIHJldHVybiBtX3ZpZXctPmlzVmlzaWJsZSgp
OwotfQotCi1ib29sIFBhZ2VDbGllbnRCYXNlOjppc1ZpZXdJbldpbmRvdygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFz
ZTo6cHJvY2Vzc0RpZENyYXNoKCkKLXsKLSAgICAvLyBDaGVjayBpZiBsb2FkaW5nIHdhcyBvbmdv
aW5nLCB3aGVuIHdlYiBwcm9jZXNzIGNyYXNoZWQuCi0gICAgZG91YmxlIGxvYWRQcm9ncmVzcyA9
IGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KG1fdmlldy0+ZXZhc09iamVjdCgpKTsKLSAgICBp
ZiAobG9hZFByb2dyZXNzID49IDAgJiYgbG9hZFByb2dyZXNzIDwgMSkgewotICAgICAgICBsb2Fk
UHJvZ3Jlc3MgPSAxOwotICAgICAgICBtX3ZpZXctPnNtYXJ0Q2FsbGJhY2s8TG9hZFByb2dyZXNz
PigpLmNhbGwoJmxvYWRQcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgbV92aWV3LT5zbWFydENhbGxi
YWNrPFRvb2x0aXBUZXh0VW5zZXQ+KCkuY2FsbCgpOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFs
c2U7Ci0gICAgbV92aWV3LT5zbWFydENhbGxiYWNrPFdlYlByb2Nlc3NDcmFzaGVkPigpLmNhbGwo
JmhhbmRsZWQpOwotCi0gICAgaWYgKCFoYW5kbGVkKSB7Ci0gICAgICAgIENTdHJpbmcgdXJsID0g
bV92aWV3LT5wYWdlKCktPnVybEF0UHJvY2Vzc0V4aXQoKS51dGY4KCk7Ci0gICAgICAgIFdBUk4o
IldBUk5JTkc6IFRoZSB3ZWIgcHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycuXG4i
LCB1cmwuZGF0YSgpKTsKLQotICAgICAgICAvLyBEaXNwbGF5IGFuIGVycm9yIHBhZ2UKLSAgICAg
ICAgZXdrX3ZpZXdfaHRtbF9zdHJpbmdfbG9hZChtX3ZpZXctPmV2YXNPYmplY3QoKSwgIlRoZSB3
ZWIgcHJvY2VzcyBoYXMgY3Jhc2hlZC4iLCAwLCB1cmwuZGF0YSgpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgUGFnZUNsaWVudEJhc2U6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAgY29uc3QgY2hh
ciogdGhlbWVQYXRoID0gbV92aWV3LT50aGVtZVBhdGgoKTsKLSAgICBpZiAodGhlbWVQYXRoKQot
ICAgICAgICBtX3ZpZXctPnBhZ2UoKS0+c2V0VGhlbWVQYXRoKHRoZW1lUGF0aCk7Ci19Ci0KLXZv
aWQgUGFnZUNsaWVudEJhc2U6OnBhZ2VDbG9zZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJhc2U6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkKLXsKLSAgICBpZiAobmV3VG9vbFRpcC5pc0VtcHR5
KCkpCi0gICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxUb29sdGlwVGV4dFVuc2V0PigpLmNh
bGwoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdmlldy0+c21hcnRDYWxsYmFjazxUb29sdGlwVGV4
dFNldD4oKS5jYWxsKG5ld1Rvb2xUaXApOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRD
dXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCi17Ci0gICAgbV92aWV3LT5zZXRDdXJzb3IoY3Vy
c29yKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50QmFzZTo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJv
eHk+IGNvbW1hbmQsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAg
IG1fdW5kb0NvbnRyb2xsZXIucmVnaXN0ZXJFZGl0Q29tbWFuZChjb21tYW5kLCB1bmRvT3JSZWRv
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQotewot
ICAgIG1fdW5kb0NvbnRyb2xsZXIuY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKLX0KLQotYm9vbCBQ
YWdlQ2xpZW50QmFzZTo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9P
clJlZG8pCi17Ci0gICAgcmV0dXJuIG1fdW5kb0NvbnRyb2xsZXIuY2FuVW5kb1JlZG8odW5kb09y
UmVkbyk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJhc2U6OmV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdl
UHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBtX3VuZG9Db250cm9sbGVyLmV4
ZWN1dGVVbmRvUmVkbyh1bmRvT3JSZWRvKTsKLX0KLQotSW50UG9pbnQgUGFnZUNsaWVudEJhc2U6
OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBwb2ludDsKLX0KLQotSW50UmVjdCBQYWdlQ2xpZW50QmFzZTo6
d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gSW50UmVjdCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpkb25lV2l0
aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotdm9pZCBQYWdl
Q2xpZW50QmFzZTo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQm
LCBib29sIC8qd2FzRXZlbnRIYW5kbGVkKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LSNlbmRpZgotCi1QYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50QmFzZTo6
Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQotewotICAgIHJldHVybiBX
ZWJQb3B1cE1lbnVQcm94eUVmbDo6Y3JlYXRlKG1fdmlldywgcGFnZSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8V2ViQ29udGV4dE1lbnVQcm94eT4gUGFnZUNsaWVudEJhc2U6OmNyZWF0ZUNvbnRleHRNZW51
UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQotewotICAgIHJldHVybiBXZWJDb250ZXh0TWVudVBy
b3h5RWZsOjpjcmVhdGUobV92aWV3LCBwYWdlKTsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKQotUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gUGFnZUNsaWVudEJhc2U6
OmNyZWF0ZUNvbG9yQ2hvb3NlclByb3h5KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpzZXRGaW5k
SW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKLXsKLSAgICBtX3Zp
ZXctPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50QmFzZTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAgICBtX3ZpZXct
PmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRC
YXNlOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250
ZXh0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNl
OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0
b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1kb3VibGUgUGFnZUNsaWVudEJh
c2U6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6c2V0Q3VzdG9t
UmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRCYXNlOjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29u
c3QgVmVjdG9yPEludFJlY3Q+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFBhZ2VDbGllbnRCYXNlOjpmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBT
dHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXBy
ZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50QmFzZTo6dXBkYXRlVGV4dElu
cHV0U3RhdGUoKQotewotICAgIElucHV0TWV0aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250
ZXh0ID0gbV92aWV3LT5pbnB1dE1ldGhvZENvbnRleHQoKTsKLSAgICBpZiAoaW5wdXRNZXRob2RD
b250ZXh0KQotICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPnVwZGF0ZVRleHRJbnB1dFN0YXRl
KCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEJhc2U6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3du
bG9hZFByb3h5KiBkb3dubG9hZCkKLXsKLSAgICBFd2tDb250ZXh0KiBjb250ZXh0ID0gbV92aWV3
LT5ld2tDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+ZG93bmxvYWRNYW5hZ2VyKCktPnJlZ2lzdGVy
RG93bmxvYWRKb2IodG9BUEkoZG93bmxvYWQpLCBtX3ZpZXcpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNs
aWVudEJhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1MjhjYy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGFnZUNsaWVudEJhc2VfaAotI2RlZmluZSBQ
YWdlQ2xpZW50QmFzZV9oCi0KLSNpbmNsdWRlICJEZWZhdWx0VW5kb0NvbnRyb2xsZXIuaCIKLSNp
bmNsdWRlICJQYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotCi1jbGFzcyBFd2tWaWV3
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViVmlldzsKLQotY2xhc3MgUGFnZUNs
aWVudEJhc2UgOiBwdWJsaWMgUGFnZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UGFn
ZUNsaWVudEJhc2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwot
Ci0gICAgV2ViVmlldyogdmlldygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGFnZUNs
aWVudEJhc2UoRXdrVmlldyopOwotCi0gICAgLy8gUGFnZUNsaWVudAotICAgIHZpcnR1YWwgUGFz
c093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5VmlldygpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5T
Y3JvbGxWaWV3KCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmll
dyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpOwotICAgIHZpcnR1YWwgYm9vbCBp
c1ZpZXdXaW5kb3dBY3RpdmUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpOwot
ICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmll
d0luV2luZG93KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdl
Q2xvc2VkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdl
YkNvcmU6OkN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1v
dXNlTW92ZXMoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVy
dGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJv
eHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFs
bEVkaXRDb21tYW5kcygpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJv
eHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFn
ZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252
ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRv
V2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIHZv
aWQgdXBkYXRlVGV4dElucHV0U3RhdGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxv
YWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtl
eUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKTsKLSNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3Qg
TmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKLSNlbmRpZgotCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQ
cm94eShXZWJQYWdlUHJveHkqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1l
bnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsKLQotI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb2xvckNo
b29zZXJQcm94eT4gY3JlYXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwot
I2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZp
bmRJbmRpY2F0b3I+LCBib29sLCBib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0
Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRh
dGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0gICAg
dmlydHVhbCBkb3VibGUgY3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6SW50UmVjdD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25z
dCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwotCi0gICAgdmlydHVhbCB2b2lkIHBh
Z2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpID0gMDsKLQotcHJvdGVjdGVk
OgotICAgIEV3a1ZpZXcqIG1fdmlldzsgLy8gRklYTUU6IFNob3VsZCBiZSBhIFdlYlZpZXcgd2hl
biBwb3NzaWJsZS4KLSAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29udHJvbGxlcjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZUNsaWVudEJhc2Vf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVm
YXVsdEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50RGVm
YXVsdEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDQ4YTgwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudERlZmF1bHRJ
bXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgotI2luY2x1ZGUg
IlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50RWZsLmgiCi0KLSNpbmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSAiZXdrX3Zp
ZXcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgRXdrVmll
d0NhbGxiYWNrczsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhZ2VDbGllbnREZWZhdWx0SW1w
bDo6UGFnZUNsaWVudERlZmF1bHRJbXBsKEV3a1ZpZXcqIHZpZXcpCi0gICAgOiBQYWdlQ2xpZW50
QmFzZSh2aWV3KQotewotfQotCi12b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6ZGlkQ29tbWl0
TG9hZCgpCi17Ci0gICAgQVNTRVJUKG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlcik7Ci0gICAgbV9w
YWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDb21taXRMb2FkKCk7Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudERlZmF1bHRJbXBsOjp1cGRhdGVWaWV3cG9ydFNpemUoKQotewotICAgIGlmICghbV9wYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50KSB7Ci0gICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJv
bGxlckNsaWVudCA9IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmNyZWF0ZShtX3Zp
ZXcpOwotICAgICAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgUGFn
ZVZpZXdwb3J0Q29udHJvbGxlcihtX3ZpZXctPnBhZ2UoKSwgbV9wYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50LmdldCgpKSk7Ci0gICAgfQotICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudC0+dXBkYXRlVmlld3BvcnRTaXplKCk7Ci19Ci0KLUZsb2F0UmVjdCBQYWdlQ2xpZW50RGVm
YXVsdEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3Qp
Ci17Ci0gICAgRmxvYXRSZWN0IHJlc3VsdCA9IHVzZXJSZWN0OwotICAgIHJlc3VsdC5zY2FsZSht
X3ZpZXctPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotRmxvYXRSZWN0IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y29udmVydFRvVXNlclNwYWNl
KGNvbnN0IEZsb2F0UmVjdCYgZGV2aWNlUmVjdCkKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0g
ZGV2aWNlUmVjdDsKLSAgICByZXN1bHQuc2NhbGUoMSAvIG1fdmlldy0+cGFnZSgpLT5kZXZpY2VT
Y2FsZUZhY3RvcigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFBhZ2VDbGllbnRE
ZWZhdWx0SW1wbDo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZp
ZXdwb3J0QXR0cmlidXRlcyYgYXR0cikKLXsKLSAgICBBU1NFUlQobV9wYWdlVmlld3BvcnRDb250
cm9sbGVyKTsKLSAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXItPmRpZENoYW5nZVZpZXdwb3J0
QXR0cmlidXRlcyhhdHRyKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmRpZENo
YW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIEFT
U0VSVChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpOwotICAgIG1fcGFnZVZpZXdwb3J0Q29udHJv
bGxlci0+ZGlkQ2hhbmdlQ29udGVudHNTaXplKHNpemUpOwotICAgIHZpZXcoKS0+ZGlkQ2hhbmdl
Q29udGVudHNTaXplKHNpemUpOwotfQotCi12b2lkIFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6cGFn
ZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIEFTU0VS
VChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpOwotICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxl
ci0+cGFnZURpZFJlcXVlc3RTY3JvbGwocG9zaXRpb24pOwotfQotCi12b2lkIFBhZ2VDbGllbnRE
ZWZhdWx0SW1wbDo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVu
dHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKLXsKLSAgICBBU1NF
UlQobV9wYWdlVmlld3BvcnRDb250cm9sbGVyKTsKLSAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXItPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwotfQotCi12b2lk
IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkKLXsK
LSAgICBBU1NFUlQobV9wYWdlVmlld3BvcnRDb250cm9sbGVyKTsKLSAgICBtX3BhZ2VWaWV3cG9y
dENvbnRyb2xsZXItPnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudERlZmF1bHRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VDbGllbnREZWZhdWx0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTA1
N2RkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVu
dERlZmF1bHRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBQYWdlQ2xpZW50RGVmYXVsdEltcGxfaAotI2RlZmluZSBQYWdlQ2xpZW50RGVmYXVsdElt
cGxfaAotCi0jaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKLSNpbmNsdWRlICJQYWdlVmlld3Bv
cnRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bC5oIgotCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQYWdlQ2xpZW50RGVmYXVsdElt
cGwgOiBwdWJsaWMgUGFnZUNsaWVudEJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFBhZ2VDbGllbnRCYXNlPiBjcmVhdGUoRXdrVmlldyogdmlld0ltcGwpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VDbGllbnREZWZhdWx0SW1wbCh2aWV3SW1wbCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgflBhZ2VDbGllbnREZWZhdWx0SW1wbCgpIHsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Vmlld3BvcnRTaXplKCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0
VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGFnZUNsaWVudERlZmF1bHRJbXBsKEV3
a1ZpZXcqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMo
Y29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVh
bCB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNv
bnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpOwotICAgIHZp
cnR1YWwgdm9pZCBwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKTsKLQotICAgIE93blB0cjxX
ZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw+IG1fcGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudDsKLSAgICBPd25QdHI8V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVy
PiBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIFBhZ2VDbGllbnREZWZhdWx0SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2M2U2NzdmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9u
aWNzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdl
Q2xpZW50TGVnYWN5SW1wbC5oIgotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaCIKLSNpbmNsdWRlICJFd2tWaWV3LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJld2tfdmlldy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVz
aW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
UGFnZUNsaWVudExlZ2FjeUltcGw6OlBhZ2VDbGllbnRMZWdhY3lJbXBsKEV3a1ZpZXcqIHZpZXcp
Ci0gICAgOiBQYWdlQ2xpZW50QmFzZSh2aWV3KQotewotfQotCi12b2lkIFBhZ2VDbGllbnRMZWdh
Y3lJbXBsOjpkaWRDb21taXRMb2FkKCkKLXsKLSAgICBtX3ZpZXctPnNjaGVkdWxlVXBkYXRlRGlz
cGxheSgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRMZWdhY3lJbXBsOjp1cGRhdGVWaWV3cG9ydFNp
emUoKQotewotICAgIG1fdmlldy0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29u
dGVudHNSZWN0KEludFJlY3Qocm91bmRlZEludFBvaW50KG1fdmlldy0+cGFnZVBvc2l0aW9uKCkp
LCBtX3ZpZXctPnNpemUoKSksIEZsb2F0UG9pbnQoKSk7Ci19Ci0KLUZsb2F0UmVjdCBQYWdlQ2xp
ZW50TGVnYWN5SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3
UmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2aWV3UmVjdDsKLX0K
LQotRmxvYXRSZWN0IFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29u
c3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiB2aWV3UmVjdDsKLX0KLQotdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdl
Vmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpCi17
Ci0gICAgbV92aWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50TGVnYWN5SW1wbDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNpemUpCi17Ci0gICAgdmlldygpLT5kaWRDaGFuZ2VDb250ZW50c1NpemUoc2l6ZSk7Ci19
Ci0KLXZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBtX3ZpZXctPnNldFBhZ2VQb3NpdGlvbihGbG9h
dFBvaW50KHBvc2l0aW9uKSk7Ci0gICAgbV92aWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotICAgIG1fdmlldy0+
c2NoZWR1bGVVcGRhdGVEaXNwbGF5KCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6
OnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpCi17Ci0gICAgbV92aWV3LT5zY2hlZHVsZVVw
ZGF0ZURpc3BsYXkoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRMZWdhY3lJbXBsLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZWFiZWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9u
aWNzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGFnZUNsaWVudExlZ2FjeUltcGxfaAotI2Rl
ZmluZSBQYWdlQ2xpZW50TGVnYWN5SW1wbF9oCi0KLSNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5o
IgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUGFnZUNsaWVudExlZ2FjeUltcGwgOiBw
dWJsaWMgUGFnZUNsaWVudEJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBh
Z2VDbGllbnRCYXNlPiBjcmVhdGUoRXdrVmlldyogdmlldykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgUGFnZUNsaWVudExlZ2FjeUltcGwodmlldykpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgflBhZ2VDbGllbnRMZWdhY3lJbXBsKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tbWl0TG9hZCgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKTsK
LQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBQYWdlQ2xpZW50TGVnYWN5SW1wbChFd2tWaWV3Kik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZp
ZXdwb3J0QXR0cmlidXRlcyYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1Np
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkUmVx
dWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZVRy
YW5zaXRpb25WaWV3cG9ydFJlYWR5KCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIFBhZ2VDbGllbnRMZWdhY3lJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUxvYWRDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVudEVmbC5jcHAKaW5kZXggYzRiYTY0Ny4uMGUxZTRl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVu
dEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlTG9hZENsaWVu
dEVmbC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJQYWdlTG9hZENsaWVudEVmbC5o
IgogCiAjaW5jbHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tGcmFtZS5oIgogI2luY2x1ZGUgIldL
UGFnZS5oIgpAQCAtMTE3LDcgKzExNiw3IEBAIHZvaWQgUGFnZUxvYWRDbGllbnRFZmw6OmRpZENv
bW1pdExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEV3a1ZpZXcqIHZpZXcgPSB0b1BhZ2VMb2FkQ2xpZW50RWZsKGNs
aWVudEluZm8pLT52aWV3KCk7Ci0gICAgdmlldy0+cGFnZUNsaWVudCgpLT5kaWRDb21taXRMb2Fk
KCk7CisgICAgdmlldy0+d2ViVmlldygpLT5kaWRDb21taXRMb2FkKCk7CiB9CiAKIHZvaWQgUGFn
ZUxvYWRDbGllbnRFZmw6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYsIFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZiBhZGRlZEl0ZW0sIFdLQXJyYXlSZWYgcmVtb3ZlZEl0ZW1zLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaAppbmRleCA1
YzE5YzI3Li43MGEwMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaApAQCAtMjcsNyAr
MjcsNiBAQAogI2RlZmluZSBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsX2gKIAogI2lu
Y2x1ZGUgIkV3a1ZpZXcuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUg
IlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQ
cm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlBhZ2VQcm94eUVm
bC5jcHAKaW5kZXggZGU3MGNhMS4uZTA5OWFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJQYWdlUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcApAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5j
bHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0VmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKIAogI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIEV2YXNfT2JqZWN0KiBXZWJQYWdlUHJveHk6OnZpZXdXaWRnZXQoKQogewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50QmFzZSo+KG1fcGFnZUNsaWVudCktPnZpZXcoKS0+
ZXZhc09iamVjdCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJWaWV3Kj4obV9wYWdlQ2xp
ZW50KS0+ZXZhc09iamVjdCgpOwogfQogCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVz
ZXJBZ2VudChjb25zdCBTdHJpbmcmIC8qYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50Ki8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRleCA4NzFkZmMzLi4zYWI0
ZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDc1ICsyNyw5NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlZp
ZXcuaCIKIAorI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlckVmbC5oIgorI2luY2x1ZGUgIkRyYXdp
bmdBcmVhUHJveHlJbXBsLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgorI2luY2x1ZGUgIklucHV0
TWV0aG9kQ29udGV4dEVmbC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmwuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5RWZsLmgiCisj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlFZmwu
aCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCisKICNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCiAjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2VuZGlm
CiAKK3VzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRl
eHQqIGNvbnRleHQsIFBhZ2VDbGllbnQqIHBhZ2VDbGllbnQsIFdlYlBhZ2VHcm91cCogcGFnZUdy
b3VwLCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKLSAgICA6IG1fd2ViUGFnZVByb3h5KGNvbnRl
eHQtPmNyZWF0ZVdlYlBhZ2UocGFnZUNsaWVudCwgcGFnZUdyb3VwKSkKLSAgICAsIG1fZXZhc09i
amVjdChldmFzT2JqZWN0KQorV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBX
ZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKKyAgICA6IG1fZXdrVmll
dyhld2tWaWV3KQorICAgICwgbV9wYWdlKGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFn
ZUdyb3VwKSkKIHsKLSAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2Vz
KCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwotICAgIG1fd2ViUGFn
ZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01v
ZGUodHJ1ZSk7CisgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgbV9wYWdlLT5wYWdlR3JvdXAo
KS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBj
aGFyKiBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCA9IGdldGVudigiV0VCS0lUX1NIT1dfQ09NUE9T
SVRJTkdfREVCVUdfVklTVUFMUyIpOwogICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVn
VmlzdWFsc0Vudmlyb25tZW50ICYmICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIx
Iik7Ci0gICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRD
b21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotICAgIG1fd2ViUGFn
ZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50
Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOworICAgIG1fcGFnZS0+cGFnZUdyb3Vw
KCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVn
VmlzdWFscyk7CisgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29t
cG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwogCiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fd2ViUGFnZVByb3h5LT5mdWxsU2NyZWVuTWFu
YWdlcigpLT5zZXRXZWJWaWV3KG1fZXZhc09iamVjdCk7CisgICAgbV9wYWdlLT5mdWxsU2NyZWVu
TWFuYWdlcigpLT5zZXRXZWJWaWV3KGV2YXNPYmplY3QoKSk7CiAjZW5kaWYKIH0KIAogV2ViVmll
dzo6fldlYlZpZXcoKQogewotICAgIGlmIChtX3dlYlBhZ2VQcm94eS0+aXNDbG9zZWQoKSkKKyAg
ICBpZiAobV9wYWdlLT5pc0Nsb3NlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBh
Z2VQcm94eS0+Y2xvc2UoKTsKKyAgICBtX3BhZ2UtPmNsb3NlKCk7CiB9CiAKIHZvaWQgV2ViVmll
dzo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgbV93ZWJQYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdl
KCk7CisgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOworfQorCitFdmFzX09iamVjdCog
V2ViVmlldzo6ZXZhc09iamVjdCgpCit7CisgICAgcmV0dXJuIG1fZXdrVmlldy0+ZXZhc09iamVj
dCgpOwogfQogCiB2b2lkIFdlYlZpZXc6OnNldFRoZW1lUGF0aChXS1N0cmluZ1JlZiB0aGVtZSkK
IHsKLSAgICBtX3dlYlBhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRvV1RGU3RyaW5nKHRoZW1lKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBtX3BhZ2UtPnNldFRoZW1lUGF0aCh0b1dURlN0cmluZyh0aGVt
ZSkudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgV2ViVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5k
KGJvb2wgZHJhd3NCYWNrZ3JvdW5kKQogewotICAgIG1fd2ViUGFnZVByb3h5LT5zZXREcmF3c0Jh
Y2tncm91bmQoZHJhd3NCYWNrZ3JvdW5kKTsKKyAgICBtX3BhZ2UtPnNldERyYXdzQmFja2dyb3Vu
ZChkcmF3c0JhY2tncm91bmQpOwogfQogCiBib29sIFdlYlZpZXc6OmRyYXdzQmFja2dyb3VuZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5LT5kcmF3c0JhY2tncm91bmQoKTsK
KyAgICByZXR1cm4gbV9wYWdlLT5kcmF3c0JhY2tncm91bmQoKTsKIH0KIAogdm9pZCBXZWJWaWV3
OjpzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sIHRyYW5zcGFyZW50QmFja2dyb3Vu
ZCkKIHsKLSAgICBtX3dlYlBhZ2VQcm94eS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQo
dHJhbnNwYXJlbnRCYWNrZ3JvdW5kKTsKKyAgICBtX3BhZ2UtPnNldERyYXdzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kKHRyYW5zcGFyZW50QmFja2dyb3VuZCk7CiB9CiAKIGJvb2wgV2ViVmlldzo6ZHJh
d3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSBjb25zdAogewotICAgIHJldHVybiBtX3dlYlBhZ2VQ
cm94eS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKTsKKyAgICByZXR1cm4gbV9wYWdlLT5k
cmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpOwogfQogCiB2b2lkIFdlYlZpZXc6OnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCiB7Ci0gICAgbV93ZWJQYWdlUHJveHktPnN1
c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIG1fcGFnZS0+c3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgV2ViVmlldzo6cmVz
dW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogewotICAgIG1fd2ViUGFnZVByb3h5
LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIG1fcGFnZS0+cmVz
dW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKIH0KIAogdm9pZCBXZWJWaWV3Ojpp
bml0aWFsaXplQ2xpZW50KGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50KQpAQCAtMTAyLDE0ICsx
MjMsMzMwIEBAIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS1ZpZXdDbGll
bnQqIGNsaWVudCkKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLXZvaWQg
V2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBhcmVh
KQordm9pZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkKCkKIHsKLSAgICBtX2NsaWVudC52aWV3TmVl
ZHNEaXNwbGF5KHRoaXMsIGFyZWEpOworICAgIGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlcik7CisgICAgICAgIG1f
cGFnZVZpZXdwb3J0Q29udHJvbGxlci0+ZGlkQ29tbWl0TG9hZCgpOworICAgIH0gZWxzZQorICAg
ICAgICBtX2V3a1ZpZXctPnNjaGVkdWxlVXBkYXRlRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZp
ZXc6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCit7CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlv
dXQoKSkgeworICAgICAgICBpZiAoIW1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCkgewor
ICAgICAgICAgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50ID0gUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudEVmbDo6Y3JlYXRlKG1fZXdrVmlldyk7CisgICAgICAgICAgICBtX3Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgUGFnZVZpZXdwb3J0Q29udHJvbGxl
cihwYWdlKCksIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC5nZXQoKSkpOworICAgICAg
ICB9CisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC0+dXBkYXRlVmlld3Bv
cnRTaXplKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChtX2V3a1ZpZXctPnBh
Z2VQb3NpdGlvbigpKSwgbV9ld2tWaWV3LT5zaXplKCkpLCBGbG9hdFBvaW50KCkpOwogfQogCiB2
b2lkIFdlYlZpZXc6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplKQogeworICAgIGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlcik7CisgICAgICAgIG1fcGFnZVZpZXdwb3J0
Q29udHJvbGxlci0+ZGlkQ2hhbmdlQ29udGVudHNTaXplKHNpemUpOworICAgIH0KICAgICBtX2Ns
aWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUodGhpcywgc2l6ZSk7CiB9CiAKKy8vIFBhZ2UgQ2xp
ZW50CisKK1Bhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRlRHJhd2lu
Z0FyZWFQcm94eSgpCit7CisgICAgT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGRyYXdpbmdBcmVh
ID0gRHJhd2luZ0FyZWFQcm94eUltcGw6OmNyZWF0ZShwYWdlKCkpOworICAgIHJldHVybiBkcmF3
aW5nQXJlYS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBhcmVhKQoreworICAgIG1fY2xpZW50LnZpZXdOZWVk
c0Rpc3BsYXkodGhpcywgYXJlYSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlzcGxheVZpZXcoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2Nyb2xsVmlldyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JikKK3sKKyAgICBzZXRWaWV3TmVlZHNEaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCitXZWJDb3Jl
OjpJbnRTaXplIFdlYlZpZXc6OnZpZXdTaXplKCkKK3sKKyAgICByZXR1cm4gbV9ld2tWaWV3LT5z
aXplKCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXc6Omlz
Vmlld0ZvY3VzZWQoKQoreworICAgIHJldHVybiBtX2V3a1ZpZXctPmlzRm9jdXNlZCgpOworfQor
Citib29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQoreworICAgIHJldHVybiBtX2V3a1ZpZXct
PmlzVmlzaWJsZSgpOworfQorCitib29sIFdlYlZpZXc6OmlzVmlld0luV2luZG93KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlZpZXc6
OnByb2Nlc3NEaWRDcmFzaCgpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9hZGluZyB3YXMgb25nb2lu
Zywgd2hlbiB3ZWIgcHJvY2VzcyBjcmFzaGVkLgorICAgIGRvdWJsZSBsb2FkUHJvZ3Jlc3MgPSBl
d2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChtX2V3a1ZpZXctPmV2YXNPYmplY3QoKSk7CisgICAg
aWYgKGxvYWRQcm9ncmVzcyA+PSAwICYmIGxvYWRQcm9ncmVzcyA8IDEpIHsKKyAgICAgICAgbG9h
ZFByb2dyZXNzID0gMTsKKyAgICAgICAgbV9ld2tWaWV3LT5zbWFydENhbGxiYWNrPExvYWRQcm9n
cmVzcz4oKS5jYWxsKCZsb2FkUHJvZ3Jlc3MpOworICAgIH0KKworICAgIG1fZXdrVmlldy0+c21h
cnRDYWxsYmFjazxUb29sdGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKKworICAgIGJvb2wgaGFuZGxl
ZCA9IGZhbHNlOworICAgIG1fZXdrVmlldy0+c21hcnRDYWxsYmFjazxXZWJQcm9jZXNzQ3Jhc2hl
ZD4oKS5jYWxsKCZoYW5kbGVkKTsKKworICAgIGlmICghaGFuZGxlZCkgeworICAgICAgICBDU3Ry
aW5nIHVybCA9IG1fcGFnZS0+dXJsQXRQcm9jZXNzRXhpdCgpLnV0ZjgoKTsKKyAgICAgICAgV0FS
TigiV0FSTklORzogVGhlIHdlYiBwcm9jZXNzIGV4cGVyaWVuY2VkIGEgY3Jhc2ggb24gJyVzJy5c
biIsIHVybC5kYXRhKCkpOworCisgICAgICAgIC8vIERpc3BsYXkgYW4gZXJyb3IgcGFnZQorICAg
ICAgICBld2tfdmlld19odG1sX3N0cmluZ19sb2FkKG1fZXdrVmlldy0+ZXZhc09iamVjdCgpLCAi
VGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkLiIsIDAsIHVybC5kYXRhKCkpOworICAgIH0KK30K
Kwordm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAgIGNvbnN0IGNoYXIq
IHRoZW1lUGF0aCA9IG1fZXdrVmlldy0+dGhlbWVQYXRoKCk7CisgICAgaWYgKHRoZW1lUGF0aCkK
KyAgICAgICAgbV9wYWdlLT5zZXRUaGVtZVBhdGgodGhlbWVQYXRoKTsKK30KKwordm9pZCBXZWJW
aWV3OjpwYWdlQ2xvc2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YlZpZXc6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9v
bFRpcCkKK3sKKyAgICBpZiAobmV3VG9vbFRpcC5pc0VtcHR5KCkpCisgICAgICAgIG1fZXdrVmll
dy0+c21hcnRDYWxsYmFjazxUb29sdGlwVGV4dFVuc2V0PigpLmNhbGwoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fZXdrVmlldy0+c21hcnRDYWxsYmFjazxUb29sdGlwVGV4dFNldD4oKS5jYWxsKG5l
d1Rvb2xUaXApOworfQorCit2b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1
cnNvcikKK3sKKyAgICBtX2V3a1ZpZXctPnNldEN1cnNvcihjdXJzb3IpOworfQorCit2b2lkIFdl
YlZpZXc6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNz
UmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmQsIFdlYlBhZ2VQcm94eTo6VW5kb09y
UmVkbyB1bmRvT3JSZWRvKQoreworICAgIG1fdW5kb0NvbnRyb2xsZXIucmVnaXN0ZXJFZGl0Q29t
bWFuZChjb21tYW5kLCB1bmRvT3JSZWRvKTsKK30KKwordm9pZCBXZWJWaWV3OjpjbGVhckFsbEVk
aXRDb21tYW5kcygpCit7CisgICAgbV91bmRvQ29udHJvbGxlci5jbGVhckFsbEVkaXRDb21tYW5k
cygpOworfQorCitib29sIFdlYlZpZXc6OmNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09y
UmVkbyB1bmRvT3JSZWRvKQoreworICAgIHJldHVybiBtX3VuZG9Db250cm9sbGVyLmNhblVuZG9S
ZWRvKHVuZG9PclJlZG8pOworfQorCit2b2lkIFdlYlZpZXc6OmV4ZWN1dGVVbmRvUmVkbyhXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAgICBtX3VuZG9Db250cm9sbGVy
LmV4ZWN1dGVVbmRvUmVkbyh1bmRvT3JSZWRvKTsKK30KKworSW50UG9pbnQgV2ViVmlldzo6c2Ny
ZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIHBvaW50OworfQorCitJbnRSZWN0IFdlYlZpZXc6OndpbmRvd1RvU2Ny
ZWVuKGNvbnN0IEludFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IEludFJlY3QoKTsKK30KKwordm9pZCBXZWJWaWV3Ojpkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQordm9pZCBXZWJWaWV3Ojpkb25lV2l0aFRvdWNo
RXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgLyp3YXNFdmVudEhhbmRsZWQq
LykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8V2Vi
UG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94
eSogcGFnZSkKK3sKKyAgICByZXR1cm4gV2ViUG9wdXBNZW51UHJveHlFZmw6OmNyZWF0ZShtX2V3
a1ZpZXcsIHBhZ2UpOworfQorCitQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFdlYlZp
ZXc6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIHJl
dHVybiBXZWJDb250ZXh0TWVudVByb3h5RWZsOjpjcmVhdGUobV9ld2tWaWV3LCBwYWdlKTsKK30K
KworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorUGFzc1JlZlB0cjxXZWJDb2xvckNob29z
ZXJQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmll
dzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKK3sKKyAgICBt
X2V3a1ZpZXctPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQoreworICAgIG1fZXdrVmll
dy0+ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRDb21taXRM
b2FkRm9yTWFpbkZyYW1lKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNv
bnN0IFN0cmluZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK2RvdWJsZSBXZWJWaWV3OjpjdXN0b21SZXByZXNlbnRhdGlvblpv
b21GYWN0b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgV2ViVmlldzo6c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmZsYXNoQmFja2lu
Z1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRp
b24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVUZXh0SW5wdXRT
dGF0ZSgpCit7CisgICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQg
PSBtX2V3a1ZpZXctPmlucHV0TWV0aG9kQ29udGV4dCgpOworICAgIGlmIChpbnB1dE1ldGhvZENv
bnRleHQpCisgICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+dXBkYXRlVGV4dElucHV0U3RhdGUo
KTsKK30KKwordm9pZCBXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94
eSogZG93bmxvYWQpCit7CisgICAgRXdrQ29udGV4dCogY29udGV4dCA9IG1fZXdrVmlldy0+ZXdr
Q29udGV4dCgpOworICAgIGNvbnRleHQtPmRvd25sb2FkTWFuYWdlcigpLT5yZWdpc3RlckRvd25s
b2FkSm9iKHRvQVBJKGRvd25sb2FkKSwgbV9ld2tWaWV3KTsKK30KKworRmxvYXRSZWN0IFdlYlZp
ZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3QpCit7Cisg
ICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBGbG9hdFJlY3QgcmVz
dWx0ID0gdXNlclJlY3Q7CisgICAgICAgIHJlc3VsdC5zY2FsZShtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvLyBMZWdhY3kg
bW9kZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB1c2VyUmVjdDsKK30KKwor
RmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIGRl
dmljZVJlY3QpCit7CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAg
ICBGbG9hdFJlY3QgcmVzdWx0ID0gZGV2aWNlUmVjdDsKKyAgICAgICAgcmVzdWx0LnNjYWxlKDEg
LyBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAvLyBMZWdhY3kgbW9kZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBkZXZpY2VSZWN0OworfQorCit2b2lkIFdlYlZpZXc6OmRpZENoYW5nZVZpZXdwb3J0UHJv
cGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0dHIpCit7CisgICAg
aWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBBU1NFUlQobV9wYWdlVmll
d3BvcnRDb250cm9sbGVyKTsKKyAgICAgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRD
aGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoYXR0cik7CisgICAgfSBlbHNlCisgICAgICAgIG1fZXdr
Vmlldy0+c2NoZWR1bGVVcGRhdGVEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZURp
ZFJlcXVlc3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGlmIChtX3Bh
Z2UtPnVzZUZpeGVkTGF5b3V0KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fcGFnZVZpZXdwb3J0Q29u
dHJvbGxlcik7CisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+cGFnZURpZFJlcXVl
c3RTY3JvbGwocG9zaXRpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZXdrVmlldy0+c2V0
UGFnZVBvc2l0aW9uKEZsb2F0UG9pbnQocG9zaXRpb24pKTsKKyAgICAgICAgbV9ld2tWaWV3LT5z
Y2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkUmVu
ZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3sKKyAgICBpZiAobV9wYWdlLT51c2VGaXhlZExh
eW91dCgpKSB7CisgICAgICAgIEFTU0VSVChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpOworICAg
ICAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXItPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6
ZSwgY292ZXJlZFJlY3QpOworICAgIH0gZWxzZQorICAgICAgICBtX2V3a1ZpZXctPnNjaGVkdWxl
VXBkYXRlRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZpZXc6OnBhZ2VUcmFuc2l0aW9uVmlld3Bv
cnRSZWFkeSgpCit7CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAg
ICBBU1NFUlQobV9wYWdlVmlld3BvcnRDb250cm9sbGVyKTsKKyAgICAgICAgbV9wYWdlVmlld3Bv
cnRDb250cm9sbGVyLT5wYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9ld2tWaWV3LT5zY2hlZHVsZVVwZGF0ZURpc3BsYXkoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmluZGV4
IDRiNTZiODUuLmFiMjI4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5o
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNyw2ICsyOCw3IEBACiAjZGVmaW5lIFdlYlZpZXdfaAogCiAjaW5jbHVk
ZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiRGVmYXVsdFVuZG9Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiUGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJQYWdlR3JvdXAuaCIKQEAgLTM0LDE4ICszNiwyMyBAQAogI2luY2x1ZGUgIldlYlByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgogCitjbGFzcyBFd2tWaWV3OworCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3Qgewor
Y2xhc3MgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjsKK2NsYXNzIFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmw7CisKK2NsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJT2JqZWN0LCBwdWJsaWMg
UGFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5
cGVWaWV3OwogCi0gICAgV2ViVmlldyhXZWJDb250ZXh0KiwgUGFnZUNsaWVudCosIFdlYlBhZ2VH
cm91cCosIEV2YXNfT2JqZWN0Kik7CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdy
b3VwKiwgRXdrVmlldyopOwogICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZSgpOwogCi0gICAgV0tQYWdlUmVmIHBhZ2VSZWYoKSBjb25zdCB7IHJldHVybiB0b0FQ
SShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7IH0KKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0
IHsgcmV0dXJuIHRvQVBJKG1fcGFnZS5nZXQoKSk7IH0KIAogICAgIHZvaWQgc2V0RHJhd3NCYWNr
Z3JvdW5kKGJvb2wpOwogICAgIGJvb2wgZHJhd3NCYWNrZ3JvdW5kKCkgY29uc3Q7CkBAIC01OSwx
OSArNjYsOTkgQEAgcHVibGljOgogCiAgICAgLy8gVmlldyBjbGllbnQuCiAgICAgdm9pZCBpbml0
aWFsaXplQ2xpZW50KGNvbnN0IFdLVmlld0NsaWVudCopOwotICAgIHZvaWQgc2V0Vmlld05lZWRz
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDb250
ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCiAgICAgLy8gRklYTUU6IFJlbW92
ZSB3aGVuIHBvc3NpYmxlLgotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KCkgeyByZXR1cm4g
bV9ldmFzT2JqZWN0OyB9Ci0gICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQ
YWdlUHJveHkuZ2V0KCk7IH0KKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCgpOworICAgIFdl
YlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQorCisgICAgdm9pZCBk
aWRDb21taXRMb2FkKCk7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICB2b2lk
IGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisKK3ByaXZh
dGU6CisgICAgLy8gUGFnZUNsaWVudAorICAgIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4g
Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIE9WRVJSSURFOworCisgICAgdm9pZCBzZXRWaWV3TmVl
ZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKworICAgIHZvaWQg
ZGlzcGxheVZpZXcoKSBPVkVSUklERTsKKworICAgIGJvb2wgY2FuU2Nyb2xsVmlldygpIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREU7CisKKyAgICBXZWJD
b3JlOjpJbnRTaXplIHZpZXdTaXplKCkgT1ZFUlJJREU7CisKKyAgICBib29sIGlzVmlld1dpbmRv
d0FjdGl2ZSgpIE9WRVJSSURFOworICAgIGJvb2wgaXNWaWV3Rm9jdXNlZCgpIE9WRVJSSURFOwor
ICAgIGJvb2wgaXNWaWV3VmlzaWJsZSgpIE9WRVJSSURFOworICAgIGJvb2wgaXNWaWV3SW5XaW5k
b3coKSBPVkVSUklERTsKKworICAgIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCkgT1ZFUlJJREU7Cisg
ICAgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKSBPVkVSUklERTsKKyAgICB2b2lkIHBhZ2VDbG9z
ZWQoKSBPVkVSUklERTsKKworICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisKKyAgICB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xs
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7CisgICAgdm9pZCBkaWRSZW5kZXJG
cmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNvdmVyZWRSZWN0KSBPVkVSUklERTsKKyAgICB2b2lkIHBhZ2VUcmFuc2l0aW9u
Vmlld3BvcnRSZWFkeSgpIE9WRVJSSURFOworCisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2Vi
Q29yZTo6Q3Vyc29yJikgT1ZFUlJJREU7CisgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1v
dXNlTW92ZXMoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJv
cGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBPVkVSUklERTsKKwor
ICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJv
eHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIE9WRVJSSURFOworICAgIHZvaWQgY2xlYXJB
bGxFZGl0Q29tbWFuZHMoKSBPVkVSUklERTsKKyAgICBib29sIGNhblVuZG9SZWRvKFdlYlBhZ2VQ
cm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7CisgICAgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVSUklERTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklE
RTsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOworICAgIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRv
V2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7CisgICAgV2ViQ29yZTo6
SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7
CisKKyAgICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgT1ZFUlJJREU7CisKKyAgICB2b2lk
IGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgT1ZFUlJJREU7CisKKyAgICB2
b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wp
IE9WRVJSSURFOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdm9pZCBkb25lV2l0aFRv
dWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVk
KSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4g
Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJREU7CisgICAgUGFzc1Jl
ZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQ
cm94eSopIE9WRVJSSURFOworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIFBhc3NS
ZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IGNyZWF0ZUNvbG9yQ2hvb3NlclByb3h5KFdlYlBh
Z2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRGaW5kSW5kaWNh
dG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpIE9WRVJSSURFOworCisg
ICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNv
bnRleHQmKSBPVkVSUklERTsKKyAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpIE9WRVJSSURFOworICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIE9WRVJSSURFOworCisgICAgdm9pZCBkaWRDb21taXRM
b2FkRm9yTWFpbkZyYW1lKGJvb2wpIE9WRVJSSURFOworICAgIHZvaWQgZGlkRmluaXNoTG9hZGlu
Z0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlJikgT1ZFUlJJREU7CisKKyAgICBkb3VibGUgY3VzdG9tUmVwcmVzZW50
YXRpb25ab29tRmFjdG9yKCkgT1ZFUlJJREU7CisgICAgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3IoZG91YmxlKSBPVkVSUklERTsKKworICAgIHZvaWQgZmxhc2hCYWNraW5n
U3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYpIE9WRVJSSURFOwor
ICAgIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwg
RmluZE9wdGlvbnMsIHVuc2lnbmVkKSBPVkVSUklERTsKKyAgICB2b2lkIGNvdW50U3RyaW5nTWF0
Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVu
c2lnbmVkKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KIAogICAgIFdlYlZpZXdDbGllbnQgbV9jbGllbnQ7Ci0g
ICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV93ZWJQYWdlUHJveHk7Ci0gICAgRXZhc19PYmplY3Qq
IG1fZXZhc09iamVjdDsKKyAgICBFd2tWaWV3KiBtX2V3a1ZpZXc7CisgICAgUmVmUHRyPFdlYlBh
Z2VQcm94eT4gbV9wYWdlOworICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBtX3VuZG9Db250cm9s
bGVyOworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICBPd25QdHI8V2Vi
S2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsPiBtX3BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnQ7CisgICAgT3duUHRyPFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcj4g
bV9wYWdlVmlld3BvcnRDb250cm9sbGVyOwogfTsKIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>