<?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>114734</bug_id>
          
          <creation_ts>2013-04-17 05:21:59 -0700</creation_ts>
          <short_desc>[WK2] Make EFL WKView API shareable between ports</short_desc>
          <delta_ts>2013-04-23 07:44:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jesus</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>luiz</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>877122</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-17 05:21:59 -0700</bug_when>
    <thetext>The EFL WKView API and its implementation (WebView class) can be shared between ports using Coord Graphics code path (QT, EFL).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877820</commentid>
    <comment_count>1</comment_count>
      <attachid>198722</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-18 05:03:54 -0700</bug_when>
    <thetext>Created attachment 198722
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877821</commentid>
    <comment_count>2</comment_count>
      <attachid>198722</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-18 05:06:13 -0700</bug_when>
    <thetext>Comment on attachment 198722
WIP

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

&gt; Source/WebKit2/UIProcess/API/C/CoordinatedGraphics/WKView.cpp:109
&gt; +#if USE(ACCELERATED_COMPOSITING)

this should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877822</commentid>
    <comment_count>3</comment_count>
      <attachid>198722</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-04-18 05:11:51 -0700</bug_when>
    <thetext>Comment on attachment 198722
WIP

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

very nice

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp:82
&gt; +PassRefPtr&lt;WebView&gt; WebView::create(WebContext* context, WebPageGroup* pageGroup)
&gt; +{
&gt; +#if PLATFORM(EFL)
&gt; +    return adoptRef(new WebViewEfl(context, pageGroup));
&gt; +#else
&gt; +    return adoptRef(new WebView(context, pageGroup));
&gt; +#endif
&gt; +}

why not let EFL implement a different create method where it instantiates it&apos;s own derived class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877824</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-18 05:18:32 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 198722 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198722&amp;action=review
&gt; 
&gt; very nice
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp:82
&gt; &gt; +PassRefPtr&lt;WebView&gt; WebView::create(WebContext* context, WebPageGroup* pageGroup)
&gt; &gt; +{
&gt; &gt; +#if PLATFORM(EFL)
&gt; &gt; +    return adoptRef(new WebViewEfl(context, pageGroup));
&gt; &gt; +#else
&gt; &gt; +    return adoptRef(new WebView(context, pageGroup));
&gt; &gt; +#endif
&gt; &gt; +}
&gt; 
&gt; why not let EFL implement a different create method where it instantiates it&apos;s own derived class?

Than it would require another method being invoked from WKViewCreate which I did not wanted, so far WKView.cpp/WKView.h is not aware of existing WebViewEFL.
Secondly in EFL we never want to create WebView which is not WebViewEFL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878288</commentid>
    <comment_count>5</comment_count>
      <attachid>198822</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-19 01:13:31 -0700</bug_when>
    <thetext>Created attachment 198822
patch

WebView::create is defined for EFL inside WebViewEfl as recommended by Kenneth. Also included WKViewEfl files that were accidentally missing in the previous patch :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878289</commentid>
    <comment_count>6</comment_count>
      <attachid>198822</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-19 01:18:15 -0700</bug_when>
    <thetext>Comment on attachment 198822
patch

argh.. forgot to move paintToCairoSurface implementation to WebViewEfl..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878293</commentid>
    <comment_count>7</comment_count>
      <attachid>198824</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-19 01:27:15 -0700</bug_when>
    <thetext>Created attachment 198824
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878366</commentid>
    <comment_count>8</comment_count>
      <attachid>198824</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-04-19 04:18:54 -0700</bug_when>
    <thetext>Comment on attachment 198824
patch

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

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h:162
&gt; +    virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&amp;, bool) OVERRIDE;
&gt; +#if ENABLE(TOUCH_EVENTS)
&gt; +    virtual void doneWithTouchEvent(const NativeWebTouchEvent&amp;, bool wasEventHandled) OVERRIDE;
&gt; +#endif

I thought about this problem for a while to know how we could share the view between Qt and EFL and I came up with the conclusions:
- It&apos;s not a complete view API unless it also allows event handling
- We can&apos;t expose NativeWeb*Event types directly in the API, we have to wrap them in C types
- I prefer to have a Qt-specific view that converts QEvents directly to NativeWeb*Events instead of having to maintain a in-the-middle C wrapper for events and do additional conversions.

So with this I don&apos;t think it&apos;s a good idea to share the view between ports.
What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878388</commentid>
    <comment_count>9</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-19 05:40:14 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 198824 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198824&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h:162
&gt; &gt; +    virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&amp;, bool) OVERRIDE;
&gt; &gt; +#if ENABLE(TOUCH_EVENTS)
&gt; &gt; +    virtual void doneWithTouchEvent(const NativeWebTouchEvent&amp;, bool wasEventHandled) OVERRIDE;
&gt; &gt; +#endif
&gt; 
&gt; I thought about this problem for a while to know how we could share the view between Qt and EFL and I came up with the conclusions:
&gt; - It&apos;s not a complete view API unless it also allows event handling
&gt; - We can&apos;t expose NativeWeb*Event types directly in the API, we have to wrap them in C types
&gt; - I prefer to have a Qt-specific view that converts QEvents directly to NativeWeb*Events instead of having to maintain a in-the-middle C wrapper for events and do additional conversions.
&gt; 
&gt; So with this I don&apos;t think it&apos;s a good idea to share the view between ports.
&gt; What do you think?

The C API creation work for NativeWeb*Events types is ongoing https://bugs.webkit.org/show_bug.cgi?id=108915. 

I don&apos;t think it should be a stopper for this patch as at the moment nothing prevents qt from converting QEvents directly (as a temporary solution) same way as it does now. 

Qt-specific view could be based on the existing WebView (WKView APIs) and handle events via accessing page from it (until events C APIs are ready) and at the same time a rather big part of the functionality which is already implemented inside WebView can be shared and re-used. I think it is beneficial even though WKView API is not 100% completed at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878394</commentid>
    <comment_count>10</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-04-19 06:06:28 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; - I prefer to have a Qt-specific view that converts QEvents directly to NativeWeb*Events instead of having to maintain a in-the-middle C wrapper for events and do additional conversions.

What about having functions that look like (made up example):

WKViewSendTouchEvent(WKViewRef view, const QTouchEvent&amp; event);

in a WKViewQt.h header? Those functions would convert to internal NativeWebTouchEvent and call the common WebView function. Similar approach can be applied to client callbacks related to events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878395</commentid>
    <comment_count>11</comment_count>
      <attachid>198824</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2013-04-19 06:08:51 -0700</bug_when>
    <thetext>Comment on attachment 198824
patch

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

LGTM!

&gt; Source/WebKit2/ChangeLog:60
&gt; +        (WebKit::WebView::paintToCairoSurface):

This shouldn&apos;t be here, right?

&gt; Source/WebKit2/ChangeLog:150
&gt; +        * UIProcess/efl/WebViewEfl.cpp: Added.

I don&apos;t see WebViewEfl::paintToCairoSurface listed here. It seems the Changelog wasn&apos;t updated after you moved this code. ;)

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp:56
&gt; +    char* debugVisualsEnvironment = getenv(&quot;WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS&quot;);

const char* ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878413</commentid>
    <comment_count>12</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-04-19 06:48:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; What about having functions that look like (made up example):
&gt; 
&gt; WKViewSendTouchEvent(WKViewRef view, const QTouchEvent&amp; event);
&gt; 
&gt; in a WKViewQt.h header? Those functions would convert to internal NativeWebTouchEvent and call the common WebView function. Similar approach can be applied to client callbacks related to events.

We talked a bit on IRC and I tend to agree that sharing an API would have its benefits, but this made me think a bit again.

This sounds like it would work, but what would we be gaining out of sharing this code more than with the abstraction already provided by PageClient and CoordinatedGraphicsScene?

If you look at WebView.cpp in the patch above, most of what it does is delegating calls to WebPageProxy and CoordinatedGraphicsScene on one side, and forward callbacks from PageClient on the other side.

It&apos;s difficult for me to guess how it&apos;s going to look in the future, but the way I see it, to get something out of sharing the same view class we have to share everything between CoreIPC and the C API. That would mean avoiding port-specific headers/functions and get rid of the need for NativeWeb*Event and all Qt/EFL type dependencies under the C API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878439</commentid>
    <comment_count>13</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-04-19 07:59:44 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; This sounds like it would work, but what would we be gaining out of sharing this code more than with the abstraction already provided by PageClient and CoordinatedGraphicsScene?

Note that this changes benefit out-of-trunk ports (like Nix), making a clearer interface where we can rely upon, and reducing the amount of &quot;Nix-specific but still generic code&quot; we have to provide.


&gt; If you look at WebView.cpp in the patch above, most of what it does is delegating calls to WebPageProxy and CoordinatedGraphicsScene on one side, and forward callbacks from PageClient on the other side.

One example of benefit I could remember is the code for handling the transformations correctly when painting: I think some bugs we faced developing WebKitNix were also faced by other ports before. This would be an example of shared code.


&gt; It&apos;s difficult for me to guess how it&apos;s going to look in the future, but the way I see it, to get something out of sharing the same view class we have to share everything between CoreIPC and the C API. That would mean avoiding port-specific headers/functions and get rid of the need for NativeWeb*Event and all Qt/EFL type dependencies under the C API.

I didn&apos;t quite grasp the comment about &quot;share everything between CoreIPC and the C API&quot;.

One typical way to benefit is with the TestWebKitAPI and WebKitTestRunner tools, we can significatly reduce boilerplate (usually repeated among ports) by using WKView.

In case of event feeding, if we manage to have a C-API way to get events in, we can use that. Qt could still have their own way to feed Q*Events directly via specific functions, and those would save whatever extra data they need into NativeWeb*Events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878873</commentid>
    <comment_count>14</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-21 10:01:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 198824 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198824&amp;action=review
&gt; 
&gt; LGTM!
thanks for having a look!
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:60
&gt; &gt; +        (WebKit::WebView::paintToCairoSurface):
&gt; 
&gt; This shouldn&apos;t be here, right?
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:150
&gt; &gt; +        * UIProcess/efl/WebViewEfl.cpp: Added.
&gt; 
&gt; I don&apos;t see WebViewEfl::paintToCairoSurface listed here. It seems the Changelog wasn&apos;t updated after you moved this code. ;)
you&apos;re right (ooops!)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp:56
&gt; &gt; +    char* debugVisualsEnvironment = getenv(&quot;WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS&quot;);
&gt; 
&gt; const char* ?
that is the existing code that was just moved, and I think it&apos;s just keeping of the getenv semantics : char* getenv (const char* name);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878876</commentid>
    <comment_count>15</comment_count>
      <attachid>198967</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-04-21 10:19:02 -0700</bug_when>
    <thetext>Created attachment 198967
patch

Updated due to comments from Jesus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879084</commentid>
    <comment_count>16</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2013-04-22 05:02:49 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=198967) [details]
&gt; patch
&gt; 
&gt; Updated due to comments from Jesus.

It looks good, I guess all you need now is to sync with Jocelyn about the Platform events issue he was concerned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879101</commentid>
    <comment_count>17</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2013-04-22 05:42:04 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I didn&apos;t quite grasp the comment about &quot;share everything between CoreIPC and the C API&quot;.

The reason that we have NativeWeb*Event is because the abstraction point for events lies at the WebPageProxy level, to be able to return the unhandled event instances through PageClient::doneWith*Event.
So what I meant is that all ports, if using the same WebView class, can essentially raise the abstraction point up to the C API and there is no need to have port-specific ways of handling events.

My other point is that I think that this is the only way that we can end up with an API opaque enough to allow it to be maintainable, otherwise we&apos;ll have too many different code paths and we&apos;ll need to consider all of them for each modification. Especially considering the lower quality of tests that we have had for platform event handling code in the past.
The slight differences in the way Qt and EFL are using PageViewportController and how it makes modifications to this class difficult is an example of that.

In other words, I think that it only make sense to share the same view class if we avoid port-specific behaviors for the same features.

That said, this patch does seem like a step in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879838</commentid>
    <comment_count>18</comment_count>
      <attachid>198967</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-23 07:44:46 -0700</bug_when>
    <thetext>Comment on attachment 198967
patch

Clearing flags on attachment: 198967

Committed r148963: &lt;http://trac.webkit.org/changeset/148963&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879839</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-23 07:44:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198722</attachid>
            <date>2013-04-18 05:03:54 -0700</date>
            <delta_ts>2013-04-19 01:13:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug114734</filename>
            <type>text/plain</type>
            <size>88857</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDhjNTg3NWY0ZjViNDE0YTdlODRhMWYyMTYxZDFmMDUyNTZkNTVhNTUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VGh1IEFwciAxOCAxNDo0MjozNCAyMDEzICswMzAwCgogICAgYnVnMTE0NzM0CgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQppbmRleCA0ZjNhYjE5Li4zZDdkZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQpAQCAtNDYsMTAgKzQ2LDEyIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
CiAgICAgVUlQcm9jZXNzL0FQSS9DL2NhaXJvL1dLSWNvbkRhdGFiYXNlQ2Fpcm8uY3BwCiAKKyAg
ICBVSVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1ZpZXcuY3BwCisKICAgICBV
SVByb2Nlc3MvQVBJL0MvZWZsL1dLUGFnZUVmbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0MvZWZs
L1dLUG9wdXBJdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tQb3B1cE1lbnVMaXN0
ZW5lci5jcHAKLSAgICBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKyAgICBVSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlld0VmbC5jcHAKIAogICAgIFVJUHJvY2Vzcy9BUEkvY3BwL2VmbC9X
S0VpbmFTaGFyZWRTdHJpbmcuY3BwCiAKQEAgLTk0LDYgKzk2LDkgQEAgbGlzdChBUFBFTkQgV2Vi
S2l0Ml9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
CiAKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcAorICAgIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuY3BwCisKICAgICBVSVBy
b2Nlc3MvZWZsL0JhdHRlcnlQcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvZWZsL0NvbnRleHRI
aXN0b3J5Q2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvQ29udGV4dE1lbnVDbGllbnRF
ZmwuY3BwCkBAIC0xMTAsNiArMTE1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1Zp
YnJhdGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1ZpZXdDbGllbnRFZmwuY3Bw
CisgICAgVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2Vi
Q29udGV4dEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRNZW51UHJveHlFZmwu
Y3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5RWZsLmNwcApA
QCAtMTIwLDggKzEyNiw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJv
Y2Vzcy9lZmwvV2ViUHJlZmVyZW5jZXNFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcm9j
ZXNzUHJveHlFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJVSVBvcHVwTWVudUNsaWVudC5j
cHAKLSAgICBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCi0gICAgVUlQcm9jZXNzL2VmbC9XZWJW
aWV3Q2xpZW50LmNwcAogCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9lZmwvV2ViSW5z
cGVjdG9yU2VydmVyRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvc291cC9X
ZWJTb2NrZXRTZXJ2ZXJTb3VwLmNwcApAQCAtMTgzLDYgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdl
YktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvZWZs
IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0v
VUlQcm9jZXNzL0FQSS9DL2NhaXJvIgorICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJ
L0MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQ
SS9DL2VmbCIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL3NvdXAiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvY3BwL2VmbCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS1Zp
ZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNDk5YWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XS1ZpZXcuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIldLVmlldy5oIgorCisjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCitXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCit7CisgICAgUmVmUHRyPFdlYlZpZXc+
IHdlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFn
ZUdyb3VwUmVmKSk7CisgICAgcmV0dXJuIHRvQVBJKHdlYlZpZXcucmVsZWFzZSgpLmxlYWtSZWYo
KSk7Cit9CisKK3ZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAg
ICB0b0ltcGwodmlld1JlZiktPmluaXRpYWxpemUoKTsKK30KKworV0tTaXplIFdLVmlld0dldFNp
emUoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvQVBJKHRvSW1wbCh2aWV3UmVm
KS0+c2l6ZSgpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRTaXplKFdLVmlld1JlZiB2aWV3UmVmLCBX
S1NpemUgc2l6ZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldFNpemUodG9JbnRTaXplKHNp
emUpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiB2aWV3UmVmLCBj
b25zdCBXS1ZpZXdDbGllbnQqIGNsaWVudCkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPmluaXRp
YWxpemVDbGllbnQoY2xpZW50KTsKK30KKworYm9vbCBXS1ZpZXdJc0ZvY3VzZWQoV0tWaWV3UmVm
IHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+aXNGb2N1c2VkKCk7Cit9
CisKK3ZvaWQgV0tWaWV3U2V0SXNGb2N1c2VkKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGlzRm9j
dXNlZCkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldEZvY3VzZWQoaXNGb2N1c2VkKTsKK30K
KworYm9vbCBXS1ZpZXdJc1Zpc2libGUoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJu
IHRvSW1wbCh2aWV3UmVmKS0+aXNWaXNpYmxlKCk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0SXNWaXNp
YmxlKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGlzVmlzaWJsZSkKK3sKKyAgICB0b0ltcGwodmll
d1JlZiktPnNldFZpc2libGUoaXNWaXNpYmxlKTsKK30KKworZmxvYXQgV0tWaWV3R2V0Q29udGVu
dFNjYWxlRmFjdG9yKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmll
d1JlZiktPmNvbnRlbnRTY2FsZUZhY3RvcigpOworfQorCit2b2lkIFdLVmlld1NldENvbnRlbnRT
Y2FsZUZhY3RvcihXS1ZpZXdSZWYgdmlld1JlZiwgZmxvYXQgc2NhbGUpCit7CisgICAgdG9JbXBs
KHZpZXdSZWYpLT5zZXRDb250ZW50U2NhbGVGYWN0b3Ioc2NhbGUpOworfQorCitXS1BvaW50IFdL
Vmlld0dldENvbnRlbnRQb3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiByZXN1bHQgPSB0b0ltcGwodmlld1JlZiktPmNvbnRlbnRQb3Np
dGlvbigpOworICAgIHJldHVybiBXS1BvaW50TWFrZShyZXN1bHQueCgpLCByZXN1bHQueSgpKTsK
K30KKwordm9pZCBXS1ZpZXdTZXRDb250ZW50UG9zaXRpb24oV0tWaWV3UmVmIHZpZXdSZWYsIFdL
UG9pbnQgcG9zaXRpb24pCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRDb250ZW50UG9zaXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludChwb3NpdGlvbi54LCBwb3NpdGlvbi55KSk7Cit9CisKK3Zv
aWQgV0tWaWV3U2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oV0tWaWV3UmVmIHZpZXdSZWYsIGRv
dWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VXNlclZpZXdw
b3J0VHJhbnNsYXRpb24odHgsIHR5KTsKK30KKworV0tQb2ludCBXS1ZpZXdVc2VyVmlld3BvcnRU
b0NvbnRlbnRzKFdLVmlld1JlZiB2aWV3UmVmLCBXS1BvaW50IHBvaW50KQoreworICAgIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiByZXN1bHQgPSB0b0ltcGwodmlld1JlZiktPnVzZXJWaWV3cG9y
dFRvQ29udGVudHModG9JbnRQb2ludChwb2ludCkpOworICAgIHJldHVybiBXS1BvaW50TWFrZShy
ZXN1bHQueCgpLCByZXN1bHQueSgpKTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKK3ZvaWQgV0tWaWV3UGFpbnRUb0N1cnJlbnRHTENvbnRleHQoV0tWaWV3UmVmIHZpZXdS
ZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCgpOwor
fQorI2VuZGlmCisKK3ZvaWQgV0tWaWV3UGFpbnRUb0NhaXJvU3VyZmFjZShXS1ZpZXdSZWYgdmll
d1JlZiwgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+
cGFpbnRUb0NhaXJvU3VyZmFjZShzdXJmYWNlKTsKK30KKworV0tQYWdlUmVmIFdLVmlld0dldFBh
Z2UoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+cGFn
ZVJlZigpOworfQorCit2b2lkIFdLVmlld1NldERyYXdzQmFja2dyb3VuZChXS1ZpZXdSZWYgdmll
d1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0RHJhd3NCYWNrZ3Jv
dW5kKGZsYWcpOworfQorCitib29sIFdLVmlld0dldERyYXdzQmFja2dyb3VuZChXS1ZpZXdSZWYg
dmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5kcmF3c0JhY2tncm91bmQo
KTsKK30KKwordm9pZCBXS1ZpZXdTZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChXS1ZpZXdS
ZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0RHJhd3NU
cmFuc3BhcmVudEJhY2tncm91bmQoZmxhZyk7Cit9CisKK2Jvb2wgV0tWaWV3R2V0RHJhd3NUcmFu
c3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1w
bCh2aWV3UmVmKS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKTsKK30KKwordm9pZCBXS1Zp
ZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU3RyaW5nUmVmIHRoZW1lKQorewor
ICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRoKHRvSW1wbCh0aGVtZSktPnN0cmluZygp
KTsKK30KKwordm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
V0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5zdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICB0b0ltcGwo
dmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3Zv
aWQgV0tWaWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBmbGFnKQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0U2hvd3NBc1NvdXJjZShmbGFnKTsKK30KKworYm9v
bCBXS1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVy
biB0b0ltcGwodmlld1JlZiktPnNob3dzQXNTb3VyY2UoKTsKK30KKwordm9pZCBXS1ZpZXdFeGl0
RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisgICAgdG9JbXBsKHZpZXdSZWYpLT5leGl0RnVsbFNjcmVlbigpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odmlld1JlZik7CisjZW5kaWYKK30KKworI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjQ4NTRjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oCkBAIC0wLDAgKzEs
MTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXS1ZpZXdfaAorI2RlZmluZSBXS1ZpZXdfaAorCisjaW5jbHVkZSA8V2ViS2l0
Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLR2VvbWV0cnkuaD4KKwordHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OworCisjaWZkZWYgX19jcGx1c3Bs
dXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoKldLVmlld0NhbGxiYWNr
KShXS1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQg
KCpXS1ZpZXdWaWV3TmVlZHNEaXNwbGF5Q2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1JlY3Qg
YXJlYSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdl
RGlkQ2hhbmdlQ29udGVudHNTaXplQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1NpemUgc2l6
ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdXZWJQcm9j
ZXNzQ3Jhc2hlZENhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tVUkxSZWYgdXJsLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRDaGFuZ2VDb250
ZW50c1Bvc2l0aW9uQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1BvaW50IHBvc2l0aW9uLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRSZW5k
ZXJGcmFtZUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTaXplIGNvbnRlbnRzU2l6ZSwgV0tS
ZWN0IGNvdmVyZWRSZWN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAo
KldLVmlld1BhZ2VEaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXNDYWxsYmFjaykoV0tWaWV3UmVm
IHZpZXcsIFdLVmlld3BvcnRBdHRyaWJ1dGVzUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
K3R5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRDaGFuZ2VUb29sdGlwQ2FsbGJhY2spKFdLVmll
d1JlZiB2aWV3LCBXS1N0cmluZ1JlZiBuZXdUb29sdGlwLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKKworc3RydWN0IFdLVmlld0NsaWVudCB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247CisgICAgY29uc3Qgdm9pZCogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudEluZm87CisKKyAgICAvLyBWZXJz
aW9uIDAKKyAgICBXS1ZpZXdWaWV3TmVlZHNEaXNwbGF5Q2FsbGJhY2sgICAgICAgICAgICAgICAg
ICAgdmlld05lZWRzRGlzcGxheTsKKyAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNTaXpl
Q2FsbGJhY2sgICAgICAgICAgZGlkQ2hhbmdlQ29udGVudHNTaXplOworICAgIFdLVmlld1dlYlBy
b2Nlc3NDcmFzaGVkQ2FsbGJhY2sgICAgICAgICAgICAgICAgICB3ZWJQcm9jZXNzQ3Jhc2hlZDsK
KyAgICBXS1ZpZXdDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vi
UHJvY2Vzc0RpZFJlbGF1bmNoOworICAgIFdLVmlld1BhZ2VEaWRDaGFuZ2VDb250ZW50c1Bvc2l0
aW9uQ2FsbGJhY2sgICAgICBkaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uOworICAgIFdLVmlld1Bh
Z2VEaWRSZW5kZXJGcmFtZUNhbGxiYWNrICAgICAgICAgICAgICAgICBkaWRSZW5kZXJGcmFtZTsK
KyAgICBXS1ZpZXdDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlk
Q29tcGxldGVQYWdlVHJhbnNpdGlvbjsKKyAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlVmlld3BvcnRB
dHRyaWJ1dGVzQ2FsbGJhY2sgICAgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzOworICAgIFdL
Vmlld1BhZ2VEaWRDaGFuZ2VUb29sdGlwQ2FsbGJhY2sgICAgICAgICAgICAgICBkaWRDaGFuZ2VU
b29sdGlwOworfTsKK3R5cGVkZWYgc3RydWN0IFdLVmlld0NsaWVudCBXS1ZpZXdDbGllbnQ7CisK
K2VudW0geyBrV0tWaWV3Q2xpZW50Q3VycmVudFZlcnNpb24gPSAwIH07CisKK1dLX0VYUE9SVCBX
S1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXApOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1Jl
Zik7CisKK1dLX0VYUE9SVCBXS1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYpOworV0tfRVhQ
T1JUIHZvaWQgV0tWaWV3U2V0U2l6ZShXS1ZpZXdSZWYsIFdLU2l6ZSBzaXplKTsKKworV0tfRVhQ
T1JUIHZvaWQgV0tWaWV3U2V0Vmlld0NsaWVudChXS1ZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVu
dCopOworCitXS19FWFBPUlQgYm9vbCBXS1ZpZXdJc0ZvY3VzZWQoV0tWaWV3UmVmKTsKK1dLX0VY
UE9SVCB2b2lkIFdLVmlld1NldElzRm9jdXNlZChXS1ZpZXdSZWYsIGJvb2wpOworCitXS19FWFBP
UlQgYm9vbCBXS1ZpZXdJc1Zpc2libGUoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmll
d1NldElzVmlzaWJsZShXS1ZpZXdSZWYsIGJvb2wpOworCitXS19FWFBPUlQgZmxvYXQgV0tWaWV3
R2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdT
ZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVmLCBmbG9hdCk7CisKK1dLX0VYUE9SVCBXS1Bv
aW50IFdLVmlld0dldENvbnRlbnRQb3NpdGlvbihXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0Q29udGVudFBvc2l0aW9uKFdLVmlld1JlZiwgV0tQb2ludCk7CisKK1dLX0VYUE9S
VCB2b2lkIFdLVmlld1NldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKFdLVmlld1JlZiwgZG91Ymxl
IHR4LCBkb3VibGUgdHkpOworV0tfRVhQT1JUIFdLUG9pbnQgV0tWaWV3VXNlclZpZXdwb3J0VG9D
b250ZW50cyhXS1ZpZXdSZWYsIFdLUG9pbnQpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdQYWlu
dFRvQ3VycmVudEdMQ29udGV4dChXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFp
bnRUb0NhaXJvU3VyZmFjZShXS1ZpZXdSZWYsIGNhaXJvX3N1cmZhY2VfdCopOworCitXS19FWFBP
UlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYpOworCitXS19FWFBPUlQg
dm9pZCBXS1ZpZXdTZXREcmF3c0JhY2tncm91bmQoV0tWaWV3UmVmLCBib29sKTsKK1dLX0VYUE9S
VCBib29sIFdLVmlld0dldERyYXdzQmFja2dyb3VuZChXS1ZpZXdSZWYpOworCitXS19FWFBPUlQg
dm9pZCBXS1ZpZXdTZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChXS1ZpZXdSZWYsIGJvb2wp
OworV0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tW
aWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdSZXN1bWVBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgdm9pZCBX
S1ZpZXdTZXRTaG93c0FzU291cmNlKFdLVmlld1JlZiwgYm9vbCk7CitXS19FWFBPUlQgYm9vbCBX
S1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmll
d0V4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2Vu
ZGlmCisKKyNlbmRpZiAvKiBXS1ZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODY3
NDEyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tW
aWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldLVmlldy5oIgotCi0jaW5jbHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgIldL
QVBJQ2FzdC5oIgotI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJl
d2tfcGFnZV9ncm91cF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8u
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShX
S0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQotewot
ICAgIFJlZlB0cjxXZWJWaWV3PiB3ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHRvSW1wbChjb250
ZXh0UmVmKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOwotICAgIHJldHVybiB0b0FQSSh3ZWJWaWV3
LnJlbGVhc2UoKS5sZWFrUmVmKCkpOwotfQotCi12b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3
UmVmIHZpZXdSZWYpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5pbml0aWFsaXplKCk7Ci19Ci0K
LVdLU2l6ZSBXS1ZpZXdHZXRTaXplKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0
b0FQSSh0b0ltcGwodmlld1JlZiktPnNpemUoKSk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0U2l6ZShX
S1ZpZXdSZWYgdmlld1JlZiwgV0tTaXplIHNpemUpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5z
ZXRTaXplKHRvSW50U2l6ZShzaXplKSk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0Vmlld0NsaWVudChX
S1ZpZXdSZWYgdmlld1JlZiwgY29uc3QgV0tWaWV3Q2xpZW50KiBjbGllbnQpCi17Ci0gICAgdG9J
bXBsKHZpZXdSZWYpLT5pbml0aWFsaXplQ2xpZW50KGNsaWVudCk7Ci19Ci0KLWJvb2wgV0tWaWV3
SXNGb2N1c2VkKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0b0ltcGwodmlld1Jl
ZiktPmlzRm9jdXNlZCgpOwotfQotCi12b2lkIFdLVmlld1NldElzRm9jdXNlZChXS1ZpZXdSZWYg
dmlld1JlZiwgYm9vbCBpc0ZvY3VzZWQpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRGb2N1
c2VkKGlzRm9jdXNlZCk7Ci19Ci0KLWJvb2wgV0tWaWV3SXNWaXNpYmxlKFdLVmlld1JlZiB2aWV3
UmVmKQotewotICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmlzVmlzaWJsZSgpOwotfQotCi12
b2lkIFdLVmlld1NldElzVmlzaWJsZShXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBpc1Zpc2libGUp
Ci17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRWaXNpYmxlKGlzVmlzaWJsZSk7Ci19Ci0KLWZs
b2F0IFdLVmlld0dldENvbnRlbnRTY2FsZUZhY3RvcihXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAg
ICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5jb250ZW50U2NhbGVGYWN0b3IoKTsKLX0KLQotdm9p
ZCBXS1ZpZXdTZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVmIHZpZXdSZWYsIGZsb2F0IHNj
YWxlKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0Q29udGVudFNjYWxlRmFjdG9yKHNjYWxl
KTsKLX0KLQotV0tQb2ludCBXS1ZpZXdHZXRDb250ZW50UG9zaXRpb24oV0tWaWV3UmVmIHZpZXdS
ZWYpCi17Ci0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcmVzdWx0ID0gdG9JbXBsKHZp
ZXdSZWYpLT5jb250ZW50UG9zaXRpb24oKTsKLSAgICByZXR1cm4gV0tQb2ludE1ha2UocmVzdWx0
LngoKSwgcmVzdWx0LnkoKSk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0Q29udGVudFBvc2l0aW9uKFdL
Vmlld1JlZiB2aWV3UmVmLCBXS1BvaW50IHBvc2l0aW9uKQotewotICAgIHRvSW1wbCh2aWV3UmVm
KS0+c2V0Q29udGVudFBvc2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQocG9zaXRpb24ueCwgcG9z
aXRpb24ueSkpOwotfQotCi12b2lkIFdLVmlld1NldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKFdL
Vmlld1JlZiB2aWV3UmVmLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKLXsKLSAgICB0b0ltcGwodmll
d1JlZiktPnNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKHR4LCB0eSk7Ci19Ci0KLVdLUG9pbnQg
V0tWaWV3VXNlclZpZXdwb3J0VG9Db250ZW50cyhXS1ZpZXdSZWYgdmlld1JlZiwgV0tQb2ludCBw
b2ludCkKLXsKLSAgICBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcmVzdWx0ID0gdG9JbXBsKHZp
ZXdSZWYpLT51c2VyVmlld3BvcnRUb0NvbnRlbnRzKHRvSW50UG9pbnQocG9pbnQpKTsKLSAgICBy
ZXR1cm4gV0tQb2ludE1ha2UocmVzdWx0LngoKSwgcmVzdWx0LnkoKSk7Ci19Ci0KLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12b2lkIFdLVmlld1BhaW50VG9DdXJyZW50R0xDb250
ZXh0KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoKTsKLX0KLSNlbmRpZgotCi12b2lkIFdLVmlld1BhaW50VG9DYWlyb1N1
cmZhY2UoV0tWaWV3UmVmIHZpZXdSZWYsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAg
ICB0b0ltcGwodmlld1JlZiktPnBhaW50VG9DYWlyb1N1cmZhY2Uoc3VyZmFjZSk7Ci19Ci0KLVdL
UGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0
b0ltcGwodmlld1JlZiktPnBhZ2VSZWYoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXREcmF3c0JhY2tn
cm91bmQoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgZmxhZykKLXsKLSAgICB0b0ltcGwodmlld1Jl
ZiktPnNldERyYXdzQmFja2dyb3VuZChmbGFnKTsKLX0KLQotYm9vbCBXS1ZpZXdHZXREcmF3c0Jh
Y2tncm91bmQoV0tWaWV3UmVmIHZpZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVm
KS0+ZHJhd3NCYWNrZ3JvdW5kKCk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVu
dEJhY2tncm91bmQoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgZmxhZykKLXsKLSAgICB0b0ltcGwo
dmlld1JlZiktPnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGZsYWcpOwotfQotCi1ib29s
IFdLVmlld0dldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmKQot
ewotICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVmLCBXS1N0
cmluZ1JlZiB0aGVtZSkKLXsKLSAgICB0b0ltcGwodmlld1JlZiktPnNldFRoZW1lUGF0aCh0b0lt
cGwodGhlbWUpLT5zdHJpbmcoKSk7Ci19Ci0KLXZvaWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9i
amVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3
UmVmKS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQg
V0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdS
ZWYpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucygpOwotfQotCi12b2lkIFdLVmlld1NldFNob3dzQXNTb3VyY2UoV0tWaWV3UmVmIHZp
ZXdSZWYsIGJvb2wgZmxhZykKLXsKLSAgICB0b0ltcGwodmlld1JlZiktPnNldFNob3dzQXNTb3Vy
Y2UoZmxhZyk7Ci19Ci0KLWJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYgdmll
d1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5zaG93c0FzU291cmNlKCk7Ci19
Ci0KLXZvaWQgV0tWaWV3RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXdSZWYpCi17Ci0jaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHRvSW1wbCh2aWV3UmVmKS0+ZXhpdEZ1bGxTY3Jl
ZW4oKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZpZXdSZWYpOwotI2VuZGlmCi19Ci0KLVdL
SW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCi17Ci0gICAg
RXdrVmlldyogZXdrVmlldyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3Qo
KSk7Ci0gICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKGV3a1ZpZXctPnRh
a2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8pOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBhYzlkMzMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS1ZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXS1ZpZXdf
aAotI2RlZmluZSBXS1ZpZXdfaAotCi0jaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KLSNpbmNs
dWRlIDxXZWJLaXQyL1dLR2VvbWV0cnkuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZh
Y2UgY2Fpcm9fc3VyZmFjZV90OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewot
I2VuZGlmCi0KLXR5cGVkZWYgdm9pZCAoKldLVmlld0NhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdWaWV3TmVlZHNE
aXNwbGF5Q2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1JlY3QgYXJlYSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNT
aXplQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1NpemUgc2l6ZSwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdXZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNr
KShXS1ZpZXdSZWYgdmlldywgV0tVUkxSZWYgdXJsLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
LXR5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uQ2FsbGJh
Y2spKFdLVmlld1JlZiB2aWV3LCBXS1BvaW50IHBvc2l0aW9uLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRSZW5kZXJGcmFtZUNhbGxiYWNrKShX
S1ZpZXdSZWYgdmlldywgV0tTaXplIGNvbnRlbnRzU2l6ZSwgV0tSZWN0IGNvdmVyZWRSZWN0LCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVmlld1BhZ2VEaWRDaGFu
Z2VWaWV3cG9ydEF0dHJpYnV0ZXNDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLVmlld3BvcnRB
dHRyaWJ1dGVzUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldL
Vmlld1BhZ2VEaWRDaGFuZ2VUb29sdGlwQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1N0cmlu
Z1JlZiBuZXdUb29sdGlwLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLQotc3RydWN0IFdLVmll
d0NsaWVudCB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb247Ci0gICAgY29uc3Qgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaWVudEluZm87Ci0KLSAgICAvLyBWZXJzaW9uIDAKLSAgICBXS1ZpZXdW
aWV3TmVlZHNEaXNwbGF5Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgdmlld05lZWRzRGlzcGxh
eTsKLSAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNTaXplQ2FsbGJhY2sgICAgICAgICAg
ZGlkQ2hhbmdlQ29udGVudHNTaXplOwotICAgIFdLVmlld1dlYlByb2Nlc3NDcmFzaGVkQ2FsbGJh
Y2sgICAgICAgICAgICAgICAgICB3ZWJQcm9jZXNzQ3Jhc2hlZDsKLSAgICBXS1ZpZXdDYWxsYmFj
ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViUHJvY2Vzc0RpZFJlbGF1bmNo
OwotICAgIFdLVmlld1BhZ2VEaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uQ2FsbGJhY2sgICAgICBk
aWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uOwotICAgIFdLVmlld1BhZ2VEaWRSZW5kZXJGcmFtZUNh
bGxiYWNrICAgICAgICAgICAgICAgICBkaWRSZW5kZXJGcmFtZTsKLSAgICBXS1ZpZXdDYWxsYmFj
ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkQ29tcGxldGVQYWdlVHJhbnNp
dGlvbjsKLSAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzQ2FsbGJhY2sg
ICAgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzOwotICAgIFdLVmlld1BhZ2VEaWRDaGFuZ2VU
b29sdGlwQ2FsbGJhY2sgICAgICAgICAgICAgICBkaWRDaGFuZ2VUb29sdGlwOwotfTsKLXR5cGVk
ZWYgc3RydWN0IFdLVmlld0NsaWVudCBXS1ZpZXdDbGllbnQ7Ci0KLWVudW0geyBrV0tWaWV3Q2xp
ZW50Q3VycmVudFZlcnNpb24gPSAwIH07Ci0KLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3Jl
YXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwotCi1X
S19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZik7Ci0KLVdLX0VYUE9SVCBX
S1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0
U2l6ZShXS1ZpZXdSZWYsIFdLU2l6ZSBzaXplKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0
Vmlld0NsaWVudChXS1ZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCopOwotCi1XS19FWFBPUlQg
Ym9vbCBXS1ZpZXdJc0ZvY3VzZWQoV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmlld1Nl
dElzRm9jdXNlZChXS1ZpZXdSZWYsIGJvb2wpOwotCi1XS19FWFBPUlQgYm9vbCBXS1ZpZXdJc1Zp
c2libGUoV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmlld1NldElzVmlzaWJsZShXS1Zp
ZXdSZWYsIGJvb2wpOwotCi1XS19FWFBPUlQgZmxvYXQgV0tWaWV3R2V0Q29udGVudFNjYWxlRmFj
dG9yKFdLVmlld1JlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRDb250ZW50U2NhbGVGYWN0
b3IoV0tWaWV3UmVmLCBmbG9hdCk7Ci0KLVdLX0VYUE9SVCBXS1BvaW50IFdLVmlld0dldENvbnRl
bnRQb3NpdGlvbihXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Q29udGVudFBv
c2l0aW9uKFdLVmlld1JlZiwgV0tQb2ludCk7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVmlld1NldFVz
ZXJWaWV3cG9ydFRyYW5zbGF0aW9uKFdLVmlld1JlZiwgZG91YmxlIHR4LCBkb3VibGUgdHkpOwot
V0tfRVhQT1JUIFdLUG9pbnQgV0tWaWV3VXNlclZpZXdwb3J0VG9Db250ZW50cyhXS1ZpZXdSZWYs
IFdLUG9pbnQpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdQYWludFRvQ3VycmVudEdMQ29udGV4
dChXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFpbnRUb0NhaXJvU3VyZmFjZShX
S1ZpZXdSZWYsIGNhaXJvX3N1cmZhY2VfdCopOwotCi1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmll
d0dldFBhZ2UoV0tWaWV3UmVmKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRo
KFdLVmlld1JlZiwgV0tTdHJpbmdSZWYpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXREcmF3
c0JhY2tncm91bmQoV0tWaWV3UmVmLCBib29sKTsKLVdLX0VYUE9SVCBib29sIFdLVmlld0dldERy
YXdzQmFja2dyb3VuZChXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXREcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZChXS1ZpZXdSZWYsIGJvb2wpOwotV0tfRVhQT1JUIGJvb2wg
V0tWaWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmKTsKLQotV0tfRVhQ
T1JUIHZvaWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmll
d1JlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucyhXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRTaG93c0FzU291
cmNlKFdLVmlld1JlZiwgYm9vbCk7Ci1XS19FWFBPUlQgYm9vbCBXS1ZpZXdHZXRTaG93c0FzU291
cmNlKFdLVmlld1JlZik7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdL
Vmlld1JlZik7Ci0KLVdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdL
Vmlld1JlZik7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBX
S1ZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNw
cAppbmRleCA4OGExNTFmLi4wZmQ2OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIEV3a1ZpZXc6OkV3a1ZpZXco
V0tWaWV3UmVmIHZpZXcsIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQogICAgIEFTU0VSVChtX2Nv
bnRleHQpOwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgotICAgIHdlYlZp
ZXcoKS0+c2V0RXdrVmlldyh0aGlzKTsKKyAgICBzdGF0aWNfY2FzdDxXZWJWaWV3RWZsKj4od2Vi
VmlldygpKS0+c2V0RXdrVmlldyh0aGlzKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzX29iamVjdF9ldmFz
X2dldChtX2V2YXNPYmplY3QpKSk7CiAgICAgaWYgKG1fZXZhc0dMKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGQzMTE4MzUuLmIwZjNkM2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTI5LDcgKzI5LDcg
QEAKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5
LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5j
bHVkZSAiV2ViVmlld0VmbC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgi
CiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9X
ZWJWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTViOTM5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViVmlldy5jcHAKQEAgLTAsMCArMSw1MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+
CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShFRkwpCisjaW5jbHVkZSAiV2Vi
Vmlld0VmbC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQ
YWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IG1fcGFnZShjb250ZXh0LT5jcmVhdGVXZWJQYWdl
KHRoaXMsIHBhZ2VHcm91cCkpCisgICAgLCBtX2ZvY3VzZWQoZmFsc2UpCisgICAgLCBtX3Zpc2li
bGUoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRTY2FsZUZhY3RvcigxLjApCit7CisgICAgbV9wYWdl
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQodHJ1ZSk7CisgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0
Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CisKKyAgICBjaGFyKiBkZWJ1Z1Zpc3VhbHNFbnZp
cm9ubWVudCA9IGdldGVudigiV0VCS0lUX1NIT1dfQ09NUE9TSVRJTkdfREVCVUdfVklTVUFMUyIp
OworICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ICYm
ICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIxIik7CisgICAgbV9wYWdlLT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93
RGVidWdWaXN1YWxzKTsKKyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRDb21wb3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Cit9
CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKKyAgICBpZiAobV9wYWdlLT5pc0Nsb3NlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNsb3NlKCk7Cit9CisKK1Bhc3NSZWZQdHI8
V2ViVmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91
cCogcGFnZUdyb3VwKQoreworI2lmIFBMQVRGT1JNKEVGTCkKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYlZpZXdFZmwoY29udGV4dCwgcGFnZUdyb3VwKSk7CisjZWxzZQorICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViVmlldyhjb250ZXh0LCBwYWdlR3JvdXApKTsKKyNlbmRpZgorfQorCit2
b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQoreworICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBh
Z2UoKTsKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZSgpKQorICAgICAgICBzY2VuZS0+c2V0QWN0aXZlKHRydWUpOworfQor
Cit2b2lkIFdlYlZpZXc6OnNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBtX3NpemUgPSBzaXplOworCisgICAgdXBkYXRlVmlld3BvcnRTaXplKCk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6c2V0Rm9jdXNlZChib29sIGZvY3VzZWQpCit7CisgICAgaWYgKG1fZm9jdXNl
ZCA9PSBmb2N1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZvY3VzZWQgPSBmb2N1c2Vk
OworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9j
dXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKK30KKwordm9pZCBXZWJW
aWV3OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAobV92aXNpYmxlID09IHZp
c2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CisgICAg
bV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsK
K30KKwordm9pZCBXZWJWaWV3OjpzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgs
IGRvdWJsZSB0eSkKK3sKKyAgICBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KCkudHJhbnNsYXRlKHR4LCB0eSk7Cit9CisKK0ludFBvaW50IFdlYlZpZXc6OnVz
ZXJWaWV3cG9ydFRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAg
IHJldHVybiBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKQoreworICAgIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKKyAgICBp
ZiAoIXNjZW5lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBj
bGVhbiB1cCB0aGlzIGNvZGUgYXMgaXQgaXMgc3BsaXQgb3ZlciBDb29yZEdmeCBhbmQgUGFnZS4K
KyAgICBzY2VuZS0+c2V0RHJhd3NCYWNrZ3JvdW5kKG1fcGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkp
OworICAgIGNvbnN0IEZsb2F0UmVjdCYgdmlld3BvcnQgPSBtX3VzZXJWaWV3cG9ydFRyYW5zZm9y
bS5tYXBSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKSk7CisKKyAgICBzY2VuZS0+cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtVG9TY2VuZSgpLnRvVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgLyogb3BhY2l0eSAqLyAxLCB2aWV3cG9ydCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
cGFpbnRUb0NhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgp
OworICAgIGlmICghc2NlbmUpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXRmb3JtQ29udGV4
dENhaXJvIGNvbnRleHQoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKworICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uID0gY29udGVudFBvc2l0aW9uKCk7CisgICAgZG91YmxlIGVmZmVjdGl2
ZVNjYWxlID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpICogY29udGVudFNjYWxlRmFjdG9y
KCk7CisKKyAgICBjYWlyb19tYXRyaXhfdCB0cmFuc2Zvcm0gPSB7IGVmZmVjdGl2ZVNjYWxlLCAw
LCAwLCBlZmZlY3RpdmVTY2FsZSwgLSBwb3NpdGlvbi54KCkgKiBtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCksIC0gcG9zaXRpb24ueSgpICogbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpIH07
CisgICAgY2Fpcm9fc2V0X21hdHJpeChjb250ZXh0LmNyKCksICZ0cmFuc2Zvcm0pOworICAgIHNj
ZW5lLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KCZjb250ZXh0KTsKK30KKwordm9pZCBXZWJWaWV3
OjpzZXRUaGVtZVBhdGgoY29uc3QgU3RyaW5nJiB0aGVtZSkKK3sKKyAgICBtX3BhZ2UtPnNldFRo
ZW1lUGF0aCh0aGVtZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5kKGJv
b2wgZHJhd3NCYWNrZ3JvdW5kKQoreworICAgIG1fcGFnZS0+c2V0RHJhd3NCYWNrZ3JvdW5kKGRy
YXdzQmFja2dyb3VuZCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6ZHJhd3NCYWNrZ3JvdW5kKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5kcmF3c0JhY2tncm91bmQoKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sIHRyYW5zcGFyZW50QmFj
a2dyb3VuZCkKK3sKKyAgICBtX3BhZ2UtPnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKHRy
YW5zcGFyZW50QmFja2dyb3VuZCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6ZHJhd3NUcmFuc3BhcmVu
dEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPmRyYXdzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3BhZ2UtPnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3BhZ2UtPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0U2hvd3NBc1NvdXJjZShib29s
IHNob3dzQXNTb3VyY2UpCit7CisgICAgbV9wYWdlLT5zZXRNYWluRnJhbWVJblZpZXdTb3VyY2VN
b2RlKHNob3dzQXNTb3VyY2UpOworfQorCitib29sIFdlYlZpZXc6OnNob3dzQXNTb3VyY2UoKSBj
b25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPm1haW5GcmFtZUluVmlld1NvdXJjZU1vZGUoKTsK
K30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK3ZvaWQgV2ViVmlldzo6ZXhpdEZ1bGxT
Y3JlZW4oKQoreworICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+cmVxdWVzdEV4aXRG
dWxsU2NyZWVuKCk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJWaWV3Ojppbml0aWFsaXplQ2xpZW50
KGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50KQoreworICAgIG1fY2xpZW50LmluaXRpYWxpemUo
Y2xpZW50KTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX2NsaWVudC5kaWRDaGFuZ2VDb250ZW50
c1NpemUodGhpcywgc2l6ZSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBXZWJWaWV3Ojp0cmFuc2Zv
cm1Gcm9tU2NlbmUoKSBjb25zdAoreworICAgIHJldHVybiB0cmFuc2Zvcm1Ub1NjZW5lKCkuaW52
ZXJzZSgpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gV2ViVmlldzo6dHJhbnNmb3JtVG9TY2VuZSgp
IGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbV91c2VyVmll
d3BvcnRUcmFuc2Zvcm07CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiA9IGNvbnRl
bnRQb3NpdGlvbigpOworICAgIHRyYW5zZm9ybS5zY2FsZShtX3BhZ2UtPmRldmljZVNjYWxlRmFj
dG9yKCkpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXBvc2l0aW9uLngoKSwgLXBvc2l0aW9u
LnkoKSk7CisgICAgdHJhbnNmb3JtLnNjYWxlKGNvbnRlbnRTY2FsZUZhY3RvcigpKTsKKworICAg
IHJldHVybiB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKK30KKworQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKiBXZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQoreworICAg
IERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgpOwor
ICAgIGlmICghZHJhd2luZ0FyZWEpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5ID0gZHJhd2lu
Z0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CisgICAgaWYgKCFsYXllclRy
ZWVIb3N0UHJveHkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGxheWVyVHJlZUhv
c3RQcm94eS0+Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
dXBkYXRlVmlld3BvcnRTaXplKCkKK3sKKyAgICBpZiAoRHJhd2luZ0FyZWFQcm94eSogZHJhd2lu
Z0FyZWEgPSBwYWdlKCktPmRyYXdpbmdBcmVhKCkpIHsKKyAgICAgICAgLy8gV2ViIFByb2Nlc3Mg
ZXhwZWN0cyBzaXplcyBpbiBVSSB1bml0cywgYW5kIG5vdCByYXcgZGV2aWNlIHVuaXRzLgorICAg
ICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpLCBJbnRT
aXplKCksIEludFNpemUoKSk7CisgICAgICAgIGRyYXdpbmdBcmVhLT5zZXRWaXNpYmxlQ29udGVu
dHNSZWN0KEZsb2F0UmVjdChjb250ZW50UG9zaXRpb24oKSwgZGlwU2l6ZSgpKSwgRmxvYXRQb2lu
dCgpKTsKKyAgICB9Cit9CisKK2lubGluZSBXZWJDb3JlOjpGbG9hdFNpemUgV2ViVmlldzo6ZGlw
U2l6ZSgpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGRpcFNpemUoc2l6ZSgpKTsKKyAgICBkaXBT
aXplLnNjYWxlKDEgLyBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOworCisgICAgcmV0dXJu
IGRpcFNpemU7Cit9CisKKy8vIFBhZ2UgQ2xpZW50CisKK1Bhc3NPd25QdHI8RHJhd2luZ0FyZWFQ
cm94eT4gV2ViVmlldzo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgT3duUHRyPERy
YXdpbmdBcmVhUHJveHk+IGRyYXdpbmdBcmVhID0gRHJhd2luZ0FyZWFQcm94eUltcGw6OmNyZWF0
ZShwYWdlKCkpOworICAgIHJldHVybiBkcmF3aW5nQXJlYS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBhcmVh
KQoreworICAgIG1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkodGhpcywgYXJlYSk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6ZGlzcGxheVZpZXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6c2Nyb2xsVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxS
ZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sKKyAgICBzZXRWaWV3TmVlZHNEaXNwbGF5
KHNjcm9sbFJlY3QpOworfQorCitXZWJDb3JlOjpJbnRTaXplIFdlYlZpZXc6OnZpZXdTaXplKCkK
K3sKKyAgICByZXR1cm4gcm91bmRlZEludFNpemUoZGlwU2l6ZSgpKTsKK30KKworYm9vbCBXZWJW
aWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAg
cmV0dXJuIGlzRm9jdXNlZCgpOworfQorCitib29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQor
eworICAgIHJldHVybiBpc1Zpc2libGUoKTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdJbldp
bmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBXZWJWaWV3Ojpwcm9jZXNzRGlkQ3Jhc2goKQoreworICAgIG1fY2xpZW50LndlYlByb2Nl
c3NDcmFzaGVkKHRoaXMsIG1fcGFnZS0+dXJsQXRQcm9jZXNzRXhpdCgpKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAgIG1fY2xpZW50LndlYlByb2Nlc3NE
aWRSZWxhdW5jaCh0aGlzKTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWdlQ2xvc2VkKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnRvb2xUaXBDaGFuZ2VkKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRpcCkKK3sKKyAgICBtX2NsaWVudC5k
aWRDaGFuZ2VUb29sdGlwKHRoaXMsIG5ld1Rvb2xUaXApOworfQorCit2b2lkIFdlYlZpZXc6OnNl
dEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpyZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY29tbWFuZCwgV2ViUGFn
ZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgbV91bmRvQ29udHJvbGxlci5y
ZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmQsIHVuZG9PclJlZG8pOworfQorCit2b2lkIFdlYlZp
ZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKK3sKKyAgICBtX3VuZG9Db250cm9sbGVyLmNsZWFy
QWxsRWRpdENvbW1hbmRzKCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6Y2FuVW5kb1JlZG8oV2ViUGFn
ZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgcmV0dXJuIG1fdW5kb0NvbnRy
b2xsZXIuY2FuVW5kb1JlZG8odW5kb09yUmVkbyk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZXhlY3V0
ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQoreworICAgIG1f
dW5kb0NvbnRyb2xsZXIuZXhlY3V0ZVVuZG9SZWRvKHVuZG9PclJlZG8pOworfQorCitJbnRQb2lu
dCBXZWJWaWV3OjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFJlY3QgV2ViVmll
dzo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRvbmVXaXRoS2V5
RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIFdlYlZpZXc6
OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCAvKndh
c0V2ZW50SGFuZGxlZCovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwor
UGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlUG9wdXBNZW51UHJv
eHkoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3Jl
YXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQorUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29sb3JD
aG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRy
PEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0JikKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBz
Y2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpKQorICAgICAgICBzY2VuZS0+c2V0QWN0
aXZlKHRydWUpOworfQorCit2b2lkIFdlYlZpZXc6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSgpCit7CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUoKSkKKyAgICAgICAgc2NlbmUtPnNldEFjdGl2ZShmYWxzZSk7
Cit9CisKK3ZvaWQgV2ViVmlldzo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1
c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2RvdWJsZSBXZWJWaWV3Ojpj
dXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3VzdG9tUmVwcmVzZW50YXRp
b25ab29tRmFjdG9yKGRvdWJsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYlZpZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4m
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZmluZFN0cmlu
Z0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2ln
bmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y291bnRT
dHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0
aW9ucywgdW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJW
aWV3Ojp1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRU
b0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3QpCit7CisgICAgaWYgKG1fcGFn
ZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gdXNlclJl
Y3Q7CisgICAgICAgIHJlc3VsdC5zY2FsZShtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvLyBMZWdhY3kgbW9kZS4KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB1c2VyUmVjdDsKK30KKworRmxvYXRSZWN0IFdl
YlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIGRldmljZVJlY3QpCit7
CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBGbG9hdFJlY3Qg
cmVzdWx0ID0gZGV2aWNlUmVjdDsKKyAgICAgICAgcmVzdWx0LnNjYWxlKDEgLyBtX3BhZ2UtPmRl
dmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAv
LyBMZWdhY3kgbW9kZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBkZXZpY2VS
ZWN0OworfQorCit2b2lkIFdlYlZpZXc6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0dHIpCit7CisgICAgbV9jbGllbnQuZGlk
Q2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRoaXMsIGF0dHIpOworfQorCit2b2lkIFdlYlZpZXc6
OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBG
bG9hdFBvaW50IHVpUG9zaXRpb24ocG9zaXRpb24pOworICAgIHVpUG9zaXRpb24uc2NhbGUoY29u
dGVudFNjYWxlRmFjdG9yKCksIGNvbnRlbnRTY2FsZUZhY3RvcigpKTsKKyAgICBzZXRDb250ZW50
UG9zaXRpb24odWlQb3NpdGlvbik7CisKKyAgICBtX2NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1Bv
c2l0aW9uKHRoaXMsIHBvc2l0aW9uKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRSZW5kZXJGcmFt
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNvdmVyZWRSZWN0KQoreworICAgIG1fY2xpZW50LmRpZFJlbmRlckZyYW1lKHRoaXMs
IGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOworfQorCit2b2lkIFdlYlZpZXc6OnBhZ2VUcmFu
c2l0aW9uVmlld3BvcnRSZWFkeSgpCit7CisgICAgbV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJh
bnNpdGlvbih0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iYTQxNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oCkBAIC0wLDAgKzEsMjAz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdfaAorI2RlZmlu
ZSBXZWJWaWV3X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUg
IkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkRlZmF1bHRVbmRvQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlZpZXdD
bGllbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlZpZXcgOiBwdWJsaWMgVHlwZWRBUElPYmpl
Y3Q8QVBJT2JqZWN0OjpUeXBlVmlldz4sIHB1YmxpYyBQYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5XZWJWaWV3KCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWV3PiBj
cmVhdGUoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOworCisgICAgdm9pZCBpbml0aWFsaXpl
KCk7CisKKyAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwor
ICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9mb2N1c2VkOyB9CisgICAgdm9p
ZCBzZXRGb2N1c2VkKGJvb2wpOworCisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBtX3Zpc2libGU7IH0KKyAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CisKKyAgICB2b2lkIHNl
dENvbnRlbnRTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikgeyBtX2NvbnRlbnRTY2FsZUZh
Y3RvciA9IHNjYWxlRmFjdG9yOyB9CisgICAgZmxvYXQgY29udGVudFNjYWxlRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50U2NhbGVGYWN0b3I7IH0KKworICAgIHZvaWQgc2V0Q29udGVu
dFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fY29udGVu
dFBvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBj
b250ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRQb3NpdGlvbjsgfQorCisg
ICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJsZSB0eSk7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgdXNlclZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpIGNvbnN0OworCisgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4
dCgpOworICAgIHZvaWQgcGFpbnRUb0NhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqKTsKKwor
ICAgIFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV9wYWdlLmdldCgp
KTsgfQorCisgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCk7CisgICAgYm9vbCBkcmF3
c0JhY2tncm91bmQoKSBjb25zdDsKKyAgICB2b2lkIHNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKGJvb2wpOworICAgIGJvb2wgZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSBjb25zdDsK
KworICAgIHZvaWQgc2V0VGhlbWVQYXRoKGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBzdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlc3VtZUFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIHNldFNob3dzQXNTb3VyY2Uo
Ym9vbCk7CisgICAgYm9vbCBzaG93c0FzU291cmNlKCkgY29uc3Q7CisKKyNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCisgICAgdm9pZCBleGl0RnVsbFNjcmVlbigpOworI2VuZGlmCisKKyAgICAv
LyBWaWV3IGNsaWVudC4KKyAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tWaWV3Q2xp
ZW50Kik7CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7
IH0KKworICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgYmVjb21lIHByaXZhdGUgd2hlbiBXZWIgRXZl
bnRzIGNyZWF0aW9uIGlzIG1vdmVkIHRvIFdlYlZpZXcuCisgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0OworICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJW
aWV3KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKKyAgICBXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOworCisgICAgdm9pZCB1
cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZGlwU2l6ZSgpIGNv
bnN0OworICAgIC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJhd2luZ0Fy
ZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3KCkgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsVmlldygpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
U2l6ZSB2aWV3U2l6ZSgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIGlzVmlld1dpbmRv
d0FjdGl2ZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIGlzVmlld1Zpc2libGUoKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3coKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzRGlkQ3Jhc2goKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVu
Y2hQcm9jZXNzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9zZWQoKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkUmVxdWVz
dFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNv
bnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5
PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuVW5k
b1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZs
b2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dElucHV0U3RhdGUoKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYsIGJvb2wpIE9WRVJSSURFOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3Vj
aEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5
KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250
ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIE9WRVJS
SURFOworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb2xvckNob29zZXJQcm94eT4gY3JlYXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVBy
b3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmluZElu
ZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0
IExheWVyVHJlZUNvbnRleHQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3Rv
bVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVu
Y2UmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJlc2VudGF0aW9u
Wm9vbUZhY3RvcigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNl
bnRhdGlvblpvb21GYWN0b3IoZG91YmxlKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBm
bGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+Jikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0
aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKSBPVkVSUklERTsKKworcHJvdGVjdGVk
OgorICAgIFdlYlZpZXdDbGllbnQgbV9jbGllbnQ7CisgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4g
bV9wYWdlOworICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBtX3VuZG9Db250cm9sbGVyOworICAg
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdXNlclZpZXdwb3J0VHJhbnNmb3JtOwor
ICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOyAvLyBTaXplIGluIGRldmljZSB1bml0cy4KKyAg
ICBib29sIG1fZm9jdXNlZDsKKyAgICBib29sIG1fdmlzaWJsZTsKKyAgICBmbG9hdCBtX2NvbnRl
bnRTY2FsZUZhY3RvcjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fY29udGVudFBvc2l0aW9u
OyAvLyBQb3NpdGlvbiBpbiBVSSB1bml0cy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gV2ViVmll
d19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJWaWV3Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmNjYzQzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmNwcApAQCAtMCwwICsxLDEx
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgorCisj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVkZSAiV0tS
ZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJWaWV3cG9ydEF0dHJpYnV0ZXMuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlZpZXdD
bGllbnQ6OnZpZXdOZWVkc0Rpc3BsYXkoV2ViVmlldyogdmlldywgY29uc3QgSW50UmVjdCYgYXJl
YSkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkodG9BUEkodmlldyksIHRvQVBJKGFy
ZWEpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRD
aGFuZ2VDb250ZW50c1NpemUoV2ViVmlldyogdmlldywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNTaXplKHRvQVBJKHZpZXcpLCB0b0FQ
SShzaXplKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6
d2ViUHJvY2Vzc0NyYXNoZWQoV2ViVmlldyogdmlldywgY29uc3QgU3RyaW5nJiB1cmwpCit7Cisg
ICAgaWYgKCFtX2NsaWVudC53ZWJQcm9jZXNzQ3Jhc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQodG9BUEkodmlldyksIGFkb3B0V0sodG9Db3Bp
ZWRVUkxBUEkodXJsKSkuZ2V0KCksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdl
YlZpZXdDbGllbnQ6OndlYlByb2Nlc3NEaWRSZWxhdW5jaChXZWJWaWV3KiB2aWV3KQoreworICAg
IGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2NsaWVudC53ZWJQcm9jZXNzRGlkUmVsYXVuY2godG9BUEkodmlldyksIG1fY2xpZW50
LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENoYW5nZUNvbnRlbnRz
UG9zaXRpb24oV2ViVmlldyogdmlldywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQor
eworICAgIGlmICghbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbih0b0FQSSh2
aWV3KSwgdG9BUEkocG9pbnQpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJW
aWV3Q2xpZW50OjpkaWRSZW5kZXJGcmFtZShXZWJWaWV3KiB2aWV3LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3sKKyAg
ICBpZiAoIW1fY2xpZW50LmRpZFJlbmRlckZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NsaWVudC5kaWRSZW5kZXJGcmFtZSh0b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSksIHRvQVBJKGNv
dmVyZWRSZWN0KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVu
dDo6ZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbihXZWJWaWV3KiB2aWV3KQoreworICAgIGlmICgh
bV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbih0b0FQSSh2aWV3KSwgbV9jbGll
bnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ2hhbmdlVmlld3Bv
cnRBdHRyaWJ1dGVzKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgYXR0
cmlidXRlcykKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRl
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tSZXRhaW5QdHI8V0tWaWV3cG9ydEF0dHJpYnV0
ZXNSZWY+IHdrQXR0cmlidXRlcyA9IGFkb3B0V0sodG9BUEkoV2ViVmlld3BvcnRBdHRyaWJ1dGVz
OjpjcmVhdGUoYXR0cmlidXRlcykubGVha1JlZigpKSk7CisgICAgbV9jbGllbnQuZGlkQ2hhbmdl
Vmlld3BvcnRBdHRyaWJ1dGVzKHRvQVBJKHZpZXcpLCB3a0F0dHJpYnV0ZXMuZ2V0KCksIG1fY2xp
ZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENoYW5nZVRvb2x0
aXAoV2ViVmlldyogdmlldywgY29uc3QgU3RyaW5nJiB0b29sdGlwKQoreworICAgIGlmICghbV9j
bGllbnQuZGlkQ2hhbmdlVG9vbHRpcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQu
ZGlkQ2hhbmdlVG9vbHRpcCh0b0FQSSh2aWV3KSwgYWRvcHRXSyh0b0NvcGllZEFQSSh0b29sdGlw
KSkuZ2V0KCksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdD
bGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGJmNGRkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViVmlld0NsaWVudF9oCisjZGVmaW5lIFdlYlZpZXdDbGllbnRfaAorCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQVBJQ2xpZW50LmgiCisjaW5j
bHVkZSAiV0tWaWV3LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFBvaW50OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIElu
dFNpemU7CitjbGFzcyBWaWV3cG9ydEF0dHJpYnV0ZXM7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJWaWV3OworCitjbGFzcyBXZWJWaWV3Q2xpZW50OiBwdWJsaWMgQVBJQ2xp
ZW50PFdLVmlld0NsaWVudCwga1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uPiB7CitwdWJsaWM6
CisgICAgdm9pZCB2aWV3TmVlZHNEaXNwbGF5KFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoV2ViVmlldyosIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIHdlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqLCBj
b25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCB3ZWJQcm9jZXNzRGlkUmVsYXVuY2goV2ViVmll
dyopOworICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbihXZWJWaWV3KiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKFdlYlZpZXcqLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZv
aWQgZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbihXZWJWaWV3Kik7CisgICAgdm9pZCBkaWRDaGFu
Z2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0
cmlidXRlcyYpOworICAgIHZvaWQgZGlkQ2hhbmdlVG9vbHRpcChXZWJWaWV3KiwgY29uc3QgU3Ry
aW5nJiB0b29sdGlwKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gV2ViVmlld0NsaWVudF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzRlMjZhZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJW
aWV3LmgiCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgotI2lu
Y2x1ZGUgIkRvd25sb2FkTWFuYWdlckVmbC5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJ
bXBsLmgiCi0jaW5jbHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4
dEVmbC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZVZpZXdw
b3J0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRF
ZmwuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5RWZsLmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUG9wdXBNZW51TGlzdGVuZXJFZmwuaCIKLSNpbmNs
dWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJv
Lmg+Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0jaW5jbHVkZSAiV2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eS5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJh
Y2tzOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1X
ZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdy
b3VwKQotICAgIDogbV9ld2tWaWV3KDApCi0gICAgLCBtX3BhZ2UoY29udGV4dC0+Y3JlYXRlV2Vi
UGFnZSh0aGlzLCBwYWdlR3JvdXApKQotICAgICwgbV9mb2N1c2VkKGZhbHNlKQotICAgICwgbV92
aXNpYmxlKGZhbHNlKQotICAgICwgbV9jb250ZW50U2NhbGVGYWN0b3IoMS4wKQotewotICAgIG1f
cGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKHRydWUpOwotICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCkt
PnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwotCi0gICAgY2hhciogZGVidWdWaXN1YWxz
RW52aXJvbm1lbnQgPSBnZXRlbnYoIldFQktJVF9TSE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VB
TFMiKTsKLSAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVu
dCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50LCAiMSIpOwotICAgIG1fcGFnZS0+
cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUo
c2hvd0RlYnVnVmlzdWFscyk7Ci0gICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMp
OwotfQotCi1XZWJWaWV3Ojp+V2ViVmlldygpCi17Ci0gICAgaWYgKG1fcGFnZS0+aXNDbG9zZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jbG9zZSgpOwotfQotCi1QYXNzUmVm
UHRyPFdlYlZpZXc+IFdlYlZpZXc6OmNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdl
R3JvdXAqIHBhZ2VHcm91cCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZXcoY29u
dGV4dCwgcGFnZUdyb3VwKSk7Ci19Ci0KLS8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4K
LXZvaWQgV2ViVmlldzo6c2V0RXdrVmlldyhFd2tWaWV3KiBld2tWaWV3KQotewotICAgIG1fZXdr
VmlldyA9IGV3a1ZpZXc7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgbV9wYWdl
LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3a1ZpZXctPmV2YXNPYmplY3QoKSk7
Ci0jZW5kaWYKLQotfQotCi12b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQotewotICAgIG1fcGFn
ZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRlZEdyYXBo
aWNzU2NlbmUoKSkKLSAgICAgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKLSNlbmRpZgotfQot
Ci12b2lkIFdlYlZpZXc6OnNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBtX3NpemUgPSBzaXplOwotCi0gICAgdXBkYXRlVmlld3BvcnRTaXplKCk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6c2V0Rm9jdXNlZChib29sIGZvY3VzZWQpCi17Ci0gICAgaWYgKG1fZm9jdXNl
ZCA9PSBmb2N1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZvY3VzZWQgPSBmb2N1c2Vk
OwotICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9j
dXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLX0KLQotdm9pZCBXZWJW
aWV3OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAobV92aXNpYmxlID09IHZp
c2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlzaWJsZSA9IHZpc2libGU7Ci0gICAg
bV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgs
IGRvdWJsZSB0eSkKLXsKLSAgICBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KCkudHJhbnNsYXRlKHR4LCB0eSk7Ci19Ci0KLUludFBvaW50IFdlYlZpZXc6OnVz
ZXJWaWV3cG9ydFRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotewotICAg
IHJldHVybiBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7Ci19Ci0KLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIFdlYlZpZXc6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KCkKLXsKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0gY29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci0gICAgaWYgKCFzY2VuZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2xlYW4gdXAgdGhpcyBjb2RlIGFzIGl0IGlz
IHNwbGl0IG92ZXIgQ29vcmRHZnggYW5kIFBhZ2UuCi0gICAgc2NlbmUtPnNldERyYXdzQmFja2dy
b3VuZChtX3BhZ2UtPmRyYXdzQmFja2dyb3VuZCgpKTsKLSAgICBjb25zdCBGbG9hdFJlY3QmIHZp
ZXdwb3J0ID0gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0ubWFwUmVjdChJbnRSZWN0KEludFBvaW50
KCksIG1fc2l6ZSkpOwotCi0gICAgc2NlbmUtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5z
Zm9ybVRvU2NlbmUoKS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCksIC8qIG9wYWNpdHkgKi8gMSwg
dmlld3BvcnQpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlldzo6cGFpbnRUb0NhaXJvU3VyZmFj
ZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUoKTsKLSAgICBpZiAoIXNjZW5lKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYK
LSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBjb250ZXh0KGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7
Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiA9IGNvbnRlbnRQb3NpdGlvbigpOwot
ICAgIGRvdWJsZSBlZmZlY3RpdmVTY2FsZSA9IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSAq
IGNvbnRlbnRTY2FsZUZhY3RvcigpOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgdHJhbnNmb3JtID0g
eyBlZmZlY3RpdmVTY2FsZSwgMCwgMCwgZWZmZWN0aXZlU2NhbGUsIC0gcG9zaXRpb24ueCgpICog
bV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCAtIHBvc2l0aW9uLnkoKSAqIG1fcGFnZS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKSB9OwotICAgIGNhaXJvX3NldF9tYXRyaXgoY29udGV4dC5jcigpLCAm
dHJhbnNmb3JtKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgc2NlbmUtPnBh
aW50VG9HcmFwaGljc0NvbnRleHQoJmNvbnRleHQpOwotI2VuZGlmCi19Ci0KLUV2YXNfT2JqZWN0
KiBXZWJWaWV3OjpldmFzT2JqZWN0KCkKLXsKLSAgICByZXR1cm4gbV9ld2tWaWV3LT5ldmFzT2Jq
ZWN0KCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0VGhlbWVQYXRoKGNvbnN0IFN0cmluZyYgdGhl
bWUpCi17Ci0gICAgbV9wYWdlLT5zZXRUaGVtZVBhdGgodGhlbWUpOwotfQotCi12b2lkIFdlYlZp
ZXc6OnNldERyYXdzQmFja2dyb3VuZChib29sIGRyYXdzQmFja2dyb3VuZCkKLXsKLSAgICBtX3Bh
Z2UtPnNldERyYXdzQmFja2dyb3VuZChkcmF3c0JhY2tncm91bmQpOwotfQotCi1ib29sIFdlYlZp
ZXc6OmRyYXdzQmFja2dyb3VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJhd3NC
YWNrZ3JvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmQoYm9vbCB0cmFuc3BhcmVudEJhY2tncm91bmQpCi17Ci0gICAgbV9wYWdlLT5zZXREcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZCh0cmFuc3BhcmVudEJhY2tncm91bmQpOwotfQotCi1ib29s
IFdlYlZpZXc6OmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdlYlZp
ZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCi17Ci0gICAgbV9wYWdl
LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBXZWJW
aWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCi17Ci0gICAgbV9wYWdl
LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwotfQotCi12b2lkIFdlYlZp
ZXc6OnNldFNob3dzQXNTb3VyY2UoYm9vbCBzaG93c0FzU291cmNlKQotewotICAgIG1fcGFnZS0+
c2V0TWFpbkZyYW1lSW5WaWV3U291cmNlTW9kZShzaG93c0FzU291cmNlKTsKLX0KLQotYm9vbCBX
ZWJWaWV3OjpzaG93c0FzU291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlLT5tYWlu
RnJhbWVJblZpZXdTb3VyY2VNb2RlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
Ci12b2lkIFdlYlZpZXc6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAgICBtX3BhZ2UtPmZ1bGxTY3Jl
ZW5NYW5hZ2VyKCktPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOwotfQotI2VuZGlmCi0KLXZvaWQg
V2ViVmlldzo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS1ZpZXdDbGllbnQqIGNsaWVudCkKLXsK
LSAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlk
Q2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAg
bV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNTaXplKHRoaXMsIHNpemUpOwotfQotCi1BZmZpbmVU
cmFuc2Zvcm0gV2ViVmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gdHJhbnNmb3JtVG9TY2VuZSgpLmludmVyc2UoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIFdl
YlZpZXc6OnRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdAotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybSA9IG1fdXNlclZpZXdwb3J0VHJhbnNmb3JtOwotCi0gICAgY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb24gPSBjb250ZW50UG9zaXRpb24oKTsKLSAgICB0cmFuc2Zvcm0uc2Nh
bGUobV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRl
KC1wb3NpdGlvbi54KCksIC1wb3NpdGlvbi55KCkpOwotICAgIHRyYW5zZm9ybS5zY2FsZShjb250
ZW50U2NhbGVGYWN0b3IoKSk7Ci0KLSAgICByZXR1cm4gdHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNm
b3JtKCk7Ci19Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi1Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIFdlYlZpZXc6OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpCi17Ci0gICAg
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdBcmVhKCk7Ci0g
ICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkgPSBkcmF3aW5n
QXJlYS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICBpZiAoIWxheWVyVHJl
ZUhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbGF5ZXJUcmVlSG9z
dFByb3h5LT5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKLX0KLSNlbmRpZgotCi12b2lkIFdl
YlZpZXc6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCi17Ci0gICAgaWYgKERyYXdpbmdBcmVhUHJveHkq
IGRyYXdpbmdBcmVhID0gcGFnZSgpLT5kcmF3aW5nQXJlYSgpKSB7Ci0gICAgICAgIC8vIFdlYiBQ
cm9jZXNzIGV4cGVjdHMgc2l6ZXMgaW4gVUkgdW5pdHMsIGFuZCBub3QgcmF3IGRldmljZSB1bml0
cy4KLSAgICAgICAgZHJhd2luZ0FyZWEtPnNldFNpemUocm91bmRlZEludFNpemUoZGlwU2l6ZSgp
KSwgSW50U2l6ZSgpLCBJbnRTaXplKCkpOwotICAgICAgICBkcmF3aW5nQXJlYS0+c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChGbG9hdFJlY3QoY29udGVudFBvc2l0aW9uKCksIGRpcFNpemUoKSksIEZs
b2F0UG9pbnQoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgV2ViQ29yZTo6RmxvYXRTaXplIFdlYlZp
ZXc6OmRpcFNpemUoKSBjb25zdAotewotICAgIEZsb2F0U2l6ZSBkaXBTaXplKHNpemUoKSk7Ci0g
ICAgZGlwU2l6ZS5zY2FsZSgxIC8gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQotICAg
IHJldHVybiBkaXBTaXplOwotfQotCi0vLyBQYWdlIENsaWVudAotCi1QYXNzT3duUHRyPERyYXdp
bmdBcmVhUHJveHk+IFdlYlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQotewotICAgIE93
blB0cjxEcmF3aW5nQXJlYVByb3h5PiBkcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhUHJveHlJbXBs
OjpjcmVhdGUocGFnZSgpKTsKLSAgICByZXR1cm4gZHJhd2luZ0FyZWEucmVsZWFzZSgpOwotfQot
Ci12b2lkIFdlYlZpZXc6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgYXJlYSkKLXsKLSAgICBtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5KHRoaXMsIGFyZWEpOwot
fQotCi12b2lkIFdlYlZpZXc6OmRpc3BsYXlWaWV3KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYlZpZXc6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCi17Ci0gICAgc2V0Vmlld05lZWRz
RGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBXZWJWaWV3Ojp2aWV3
U2l6ZSgpCi17Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKGRpcFNpemUoKSk7Ci19Ci0KLWJv
b2wgV2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQot
ewotICAgIHJldHVybiBpc0ZvY3VzZWQoKTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNp
YmxlKCkKLXsKLSAgICByZXR1cm4gaXNWaXNpYmxlKCk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNW
aWV3SW5XaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKCkKLXsKLSAgICBtX2NsaWVudC53
ZWJQcm9jZXNzQ3Jhc2hlZCh0aGlzLCBtX3BhZ2UtPnVybEF0UHJvY2Vzc0V4aXQoKSk7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKLXsKLSAgICBtX2NsaWVudC53ZWJQ
cm9jZXNzRGlkUmVsYXVuY2godGhpcyk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojp0b29sVGlwQ2hh
bmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApCi17Ci0gICAgbV9j
bGllbnQuZGlkQ2hhbmdlVG9vbHRpcCh0aGlzLCBuZXdUb29sVGlwKTsKLX0KLQotdm9pZCBXZWJW
aWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCi17Ci0gICAgbV9ld2tWaWV3LT5z
ZXRDdXJzb3IoY3Vyc29yKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
YlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5
PiBjb21tYW5kLCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBt
X3VuZG9Db250cm9sbGVyLnJlZ2lzdGVyRWRpdENvbW1hbmQoY29tbWFuZCwgdW5kb09yUmVkbyk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQotewotICAgIG1fdW5k
b0NvbnRyb2xsZXIuY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKLX0KLQotYm9vbCBXZWJWaWV3Ojpj
YW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBy
ZXR1cm4gbV91bmRvQ29udHJvbGxlci5jYW5VbmRvUmVkbyh1bmRvT3JSZWRvKTsKLX0KLQotdm9p
ZCBXZWJWaWV3OjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9P
clJlZG8pCi17Ci0gICAgbV91bmRvQ29udHJvbGxlci5leGVjdXRlVW5kb1JlZG8odW5kb09yUmVk
byk7Ci19Ci0KLUludFBvaW50IFdlYlZpZXc6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50
JiBwb2ludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBwb2ludDsKLX0K
LQotSW50UmVjdCBXZWJWaWV3Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgV2Vi
Vmlldzo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKLXZvaWQgV2ViVmlldzo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNo
RXZlbnQmLCBib29sIC8qd2FzRXZlbnRIYW5kbGVkKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBXZWJWaWV3Ojpj
cmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIFdl
YlBvcHVwTWVudUxpc3RlbmVyRWZsOjpjcmVhdGUocGFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2Vi
Q29udGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdl
UHJveHkqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlFZmw6OmNyZWF0
ZShtX2V3a1ZpZXcsIHBhZ2UpOwotfQotCi0jaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi1Q
YXNzUmVmUHRyPFdlYkNvbG9yQ2hvb3NlclByb3h5PiBXZWJWaWV3OjpjcmVhdGVDb2xvckNob29z
ZXJQcm94eShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8Rmlu
ZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgV2ViVmlldzo6ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKLXsKLSAgICBpZiAo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSgpKQotICAgICAgICBzY2VuZS0+c2V0QWN0aXZlKHRydWUpOwotfQotCi12b2lkIFdlYlZpZXc6
OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCi17Ci0gICAgaWYgKENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSkKLSAgICAg
ICAgc2NlbmUtPnNldEFjdGl2ZShmYWxzZSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWV3Ojp1
cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpZENvbW1pdExv
YWRGb3JNYWluRnJhbWUoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFdlYlZpZXc6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotZG91YmxlIFdlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9v
bUZhY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBXZWJWaWV3OjpzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Zmxhc2hCYWNraW5n
U3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnVwZGF0ZVRleHRJbnB1dFN0
YXRlKCkKLXsKLSAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9
IG1fZXdrVmlldy0+aW5wdXRNZXRob2RDb250ZXh0KCk7Ci0gICAgaWYgKGlucHV0TWV0aG9kQ29u
dGV4dCkKLSAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT51cGRhdGVUZXh0SW5wdXRTdGF0ZSgp
OwotfQotCi12b2lkIFdlYlZpZXc6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5
KiBkb3dubG9hZCkKLXsKLSAgICBFd2tDb250ZXh0KiBjb250ZXh0ID0gbV9ld2tWaWV3LT5ld2tD
b250ZXh0KCk7Ci0gICAgY29udGV4dC0+ZG93bmxvYWRNYW5hZ2VyKCktPnJlZ2lzdGVyRG93bmxv
YWRKb2IodG9BUEkoZG93bmxvYWQpLCBtX2V3a1ZpZXcpOwotfQotCi1GbG9hdFJlY3QgV2ViVmll
dzo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB1c2VyUmVjdCkKLXsKLSAg
ICBpZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZXN1
bHQgPSB1c2VyUmVjdDsKLSAgICAgICAgcmVzdWx0LnNjYWxlKG1fcGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIC8vIExlZ2FjeSBt
b2RlLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHVzZXJSZWN0OwotfQotCi1G
bG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGV2
aWNlUmVjdCkKLXsKLSAgICBpZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7Ci0gICAgICAg
IEZsb2F0UmVjdCByZXN1bHQgPSBkZXZpY2VSZWN0OwotICAgICAgICByZXN1bHQuc2NhbGUoMSAv
IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotICAgIC8vIExlZ2FjeSBtb2RlLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGRldmljZVJlY3Q7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9w
ZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cikKLXsKLSAgICBt
X2NsaWVudC5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXModGhpcywgYXR0cik7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6cGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
KQotewotICAgIEZsb2F0UG9pbnQgdWlQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgdWlQb3NpdGlv
bi5zY2FsZShjb250ZW50U2NhbGVGYWN0b3IoKSwgY29udGVudFNjYWxlRmFjdG9yKCkpOwotICAg
IHNldENvbnRlbnRQb3NpdGlvbih1aVBvc2l0aW9uKTsKLQotICAgIG1fY2xpZW50LmRpZENoYW5n
ZUNvbnRlbnRzUG9zaXRpb24odGhpcywgcG9zaXRpb24pOwotfQotCi12b2lkIFdlYlZpZXc6OmRp
ZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCi17Ci0gICAgbV9jbGllbnQuZGlkUmVuZGVy
RnJhbWUodGhpcywgY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkKLXsKLSAgICBtX2NsaWVudC5kaWRDb21w
bGV0ZVBhZ2VUcmFuc2l0aW9uKHRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDI1MzdlNmQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJWaWV3X2gKLSNkZWZpbmUgV2ViVmlld19oCi0KLSNp
bmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJEZWZhdWx0VW5kb0NvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgotI2luY2x1
ZGUgIldlYkdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJX
ZWJWaWV3Q2xpZW50LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
PgotCi1jbGFzcyBFd2tWaWV3OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJW
aWV3IDogcHVibGljIFR5cGVkQVBJT2JqZWN0PEFQSU9iamVjdDo6VHlwZVZpZXc+LCBwdWJsaWMg
UGFnZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViVmlldygpOwotCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViVmlldz4gY3JlYXRlKFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAq
KTsKLQotICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KLSAgICB2b2lkIHNldEV3
a1ZpZXcoRXdrVmlldyopOwotCi0gICAgdm9pZCBpbml0aWFsaXplKCk7Ci0KLSAgICB2b2lkIHNl
dFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIGJvb2wgaXNGb2N1c2Vk
KCkgY29uc3QgeyByZXR1cm4gbV9mb2N1c2VkOyB9Ci0gICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wp
OwotCi0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KLSAg
ICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0KLSAgICB2b2lkIHNldENvbnRlbnRTY2FsZUZhY3Rv
cihmbG9hdCBzY2FsZUZhY3RvcikgeyBtX2NvbnRlbnRTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9y
OyB9Ci0gICAgZmxvYXQgY29udGVudFNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50U2NhbGVGYWN0b3I7IH0KLQotICAgIHZvaWQgc2V0Q29udGVudFBvc2l0aW9uKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fY29udGVudFBvc2l0aW9uID0gcG9zaXRp
b247IH0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBjb250ZW50UG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRQb3NpdGlvbjsgfQotCi0gICAgdm9pZCBzZXRVc2VyVmll
d3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJsZSB0eSk7Ci0gICAgV2ViQ29yZTo6SW50
UG9pbnQgdXNlclZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNv
bnN0OwotCi0gICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dCgpOwotICAgIHZvaWQgcGFp
bnRUb0NhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqKTsKLQotICAgIFdLUGFnZVJlZiBwYWdl
UmVmKCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV9wYWdlLmdldCgpKTsgfQotCi0gICAgdm9pZCBz
ZXREcmF3c0JhY2tncm91bmQoYm9vbCk7Ci0gICAgYm9vbCBkcmF3c0JhY2tncm91bmQoKSBjb25z
dDsKLSAgICB2b2lkIHNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wpOwotICAgIGJv
b2wgZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0VGhl
bWVQYXRoKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmlt
YXRpb25zKCk7Ci0KLSAgICB2b2lkIHNldFNob3dzQXNTb3VyY2UoYm9vbCk7Ci0gICAgYm9vbCBz
aG93c0FzU291cmNlKCkgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAg
dm9pZCBleGl0RnVsbFNjcmVlbigpOwotI2VuZGlmCi0KLSAgICAvLyBWaWV3IGNsaWVudC4KLSAg
ICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tWaWV3Q2xpZW50Kik7Ci0KLSAgICAvLyBG
SVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCi0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3Qo
KTsKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7IH0KLQot
ICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
LQotICAgIC8vIEZJWE1FOiBTaG91bGQgYmVjb21lIHByaXZhdGUgd2hlbiBXZWIgRXZlbnRzIGNy
ZWF0aW9uIGlzIG1vdmVkIHRvIFdlYlZpZXcuCi0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0OwotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlldyhXZWJD
b250ZXh0KiwgV2ViUGFnZUdyb3VwKik7Ci0gICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKLQotICAgIHZvaWQgdXBkYXRlVmll
d3BvcnRTaXplKCk7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIGRpcFNpemUoKSBjb25zdDsKLSAg
ICAvLyBQYWdlQ2xpZW50Ci0gICAgUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVE
cmF3aW5nQXJlYVByb3h5KCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIHNldFZpZXdOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOwotCi0gICAgdm9pZCBkaXNwbGF5
VmlldygpIE9WRVJSSURFOwotCi0gICAgYm9vbCBjYW5TY3JvbGxWaWV3KCkgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBPVkVSUklERTsKLQotICAgIFdlYkNvcmU6Oklu
dFNpemUgdmlld1NpemUoKSBPVkVSUklERTsKLQotICAgIGJvb2wgaXNWaWV3V2luZG93QWN0aXZl
KCkgT1ZFUlJJREU7Ci0gICAgYm9vbCBpc1ZpZXdGb2N1c2VkKCkgT1ZFUlJJREU7Ci0gICAgYm9v
bCBpc1ZpZXdWaXNpYmxlKCkgT1ZFUlJJREU7Ci0gICAgYm9vbCBpc1ZpZXdJbldpbmRvdygpIE9W
RVJSSURFOwotCi0gICAgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKSBPVkVSUklERTsKLSAgICB2b2lk
IGRpZFJlbGF1bmNoUHJvY2VzcygpIE9WRVJSSURFOwotICAgIHZvaWQgcGFnZUNsb3NlZCgpIE9W
RVJSSURFOwotCi0gICAgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKSBPVkVSUklERTsKLQotICAgIHZvaWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY292ZXJlZFJlY3QpIE9WRVJSSURFOwotICAgIHZvaWQgcGFnZVRyYW5zaXRpb25WaWV3cG9y
dFJlYWR5KCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpD
dXJzb3ImKSBPVkVSUklERTsKLSAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhib29sKSBPVkVSUklERTsKLQotICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVz
KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIE9WRVJSSURFOwotCi0gICAgdm9p
ZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7Ci0gICAgdm9pZCBjbGVhckFsbEVkaXRD
b21tYW5kcygpIE9WRVJSSURFOwotICAgIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpV
bmRvT3JSZWRvKSBPVkVSUklERTsKLSAgICB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJv
eHk6OlVuZG9PclJlZG8pIE9WRVJSSURFOwotCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZl
cnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JikgT1ZFUlJJREU7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3co
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0
IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKLQotICAg
IHZvaWQgdXBkYXRlVGV4dElucHV0U3RhdGUoKSBPVkVSUklERTsKLQotICAgIHZvaWQgaGFuZGxl
RG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBPVkVSUklERTsKLQotICAgIHZvaWQgZG9u
ZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCkgT1ZFUlJJ
REU7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2b2lkIGRvbmVXaXRoVG91Y2hFdmVu
dChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIE9WRVJS
SURFOwotI2VuZGlmCi0KLSAgICBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQ
b3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERTsKLSAgICBQYXNzUmVmUHRyPFdl
YkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5Kikg
T1ZFUlJJREU7Ci0jaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0gICAgUGFzc1JlZlB0cjxX
ZWJDb2xvckNob29zZXJQcm94eT4gY3JlYXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5
KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIE9WRVJSSURFOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFz
c1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCwgYm9vbCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lk
IGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYp
IE9WRVJSSURFOwotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgT1ZF
UlJJREU7Ci0gICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0JikgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JN
YWluRnJhbWUoYm9vbCkgT1ZFUlJJREU7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZv
ckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UmKSBPVkVSUklERTsKLQotICAgIGRvdWJsZSBjdXN0b21SZXByZXNlbnRhdGlvblpv
b21GYWN0b3IoKSBPVkVSUklERTsKLSAgICB2b2lkIHNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9v
bUZhY3Rvcihkb3VibGUpIE9WRVJSSURFOwotCi0gICAgdm9pZCBmbGFzaEJhY2tpbmdTdG9yZVVw
ZGF0ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JikgT1ZFUlJJREU7Ci0gICAgdm9p
ZCBmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0
aW9ucywgdW5zaWduZWQpIE9WRVJSSURFOwotICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzSW5D
dXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQp
IE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIFdlYlZpZXdDbGllbnQgbV9jbGllbnQ7Ci0gICAg
RXdrVmlldyogbV9ld2tWaWV3OwotICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKLSAg
ICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29udHJvbGxlcjsKLSAgICBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKLSAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fc2l6ZTsgLy8gU2l6ZSBpbiBkZXZpY2UgdW5pdHMuCi0gICAgYm9vbCBtX2Zv
Y3VzZWQ7Ci0gICAgYm9vbCBtX3Zpc2libGU7Ci0gICAgZmxvYXQgbV9jb250ZW50U2NhbGVGYWN0
b3I7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2NvbnRlbnRQb3NpdGlvbjsgLy8gUG9zaXRp
b24gaW4gVUkgdW5pdHMuCi19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBmZDFkYzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3Q2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld0NsaWVu
dC5oIgotI2luY2x1ZGUgIldlYlZpZXdwb3J0QXR0cmlidXRlcy5oIgotCi0jaW5jbHVkZSAiV0tB
UElDYXN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIK
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lk
IFdlYlZpZXdDbGllbnQ6OnZpZXdOZWVkc0Rpc3BsYXkoV2ViVmlldyogdmlldywgY29uc3QgSW50
UmVjdCYgYXJlYSkKLXsKLSAgICBpZiAoIW1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkodG9BUEkodmlldyks
IHRvQVBJKGFyZWEpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xp
ZW50OjpkaWRDaGFuZ2VDb250ZW50c1NpemUoV2ViVmlldyogdmlldywgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNTaXplKHRvQVBJKHZp
ZXcpLCB0b0FQSShzaXplKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVmll
d0NsaWVudDo6d2ViUHJvY2Vzc0NyYXNoZWQoV2ViVmlldyogdmlldywgY29uc3QgU3RyaW5nJiB1
cmwpCi17Ci0gICAgaWYgKCFtX2NsaWVudC53ZWJQcm9jZXNzQ3Jhc2hlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQodG9BUEkodmlldyksIGFkb3B0
V0sodG9Db3BpZWRVUkxBUEkodXJsKSkuZ2V0KCksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQot
Ci12b2lkIFdlYlZpZXdDbGllbnQ6OndlYlByb2Nlc3NEaWRSZWxhdW5jaChXZWJWaWV3KiB2aWV3
KQotewotICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NsaWVudC53ZWJQcm9jZXNzRGlkUmVsYXVuY2godG9BUEkodmlldyks
IG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENoYW5n
ZUNvbnRlbnRzUG9zaXRpb24oV2ViVmlldyogdmlldywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IHBvaW50KQotewotICAgIGlmICghbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlv
bih0b0FQSSh2aWV3KSwgdG9BUEkocG9pbnQpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQot
dm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRSZW5kZXJGcmFtZShXZWJWaWV3KiB2aWV3LCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVj
dCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZFJlbmRlckZyYW1lKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSh0b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSks
IHRvQVBJKGNvdmVyZWRSZWN0KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2Vi
Vmlld0NsaWVudDo6ZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbihXZWJWaWV3KiB2aWV3KQotewot
ICAgIGlmICghbV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbih0b0FQSSh2aWV3
KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ2hh
bmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFZpZXdwb3J0QXR0cmli
dXRlcyYgYXR0cmlidXRlcykKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZVZpZXdwb3J0
QXR0cmlidXRlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0tSZXRhaW5QdHI8V0tWaWV3cG9y
dEF0dHJpYnV0ZXNSZWY+IHdrQXR0cmlidXRlcyA9IGFkb3B0V0sodG9BUEkoV2ViVmlld3BvcnRB
dHRyaWJ1dGVzOjpjcmVhdGUoYXR0cmlidXRlcykubGVha1JlZigpKSk7Ci0gICAgbV9jbGllbnQu
ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRvQVBJKHZpZXcpLCB3a0F0dHJpYnV0ZXMuZ2V0
KCksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENo
YW5nZVRvb2x0aXAoV2ViVmlldyogdmlldywgY29uc3QgU3RyaW5nJiB0b29sdGlwKQotewotICAg
IGlmICghbV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCh0b0FQSSh2aWV3KSwgYWRvcHRXSyh0b0NvcGllZEFQ
SSh0b29sdGlwKSkuZ2V0KCksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
Vmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTg2ZGYuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdD
bGllbnRfaAotI2RlZmluZSBXZWJWaWV3Q2xpZW50X2gKLQotI2luY2x1ZGUgIkFQSUNsaWVudC5o
IgotI2luY2x1ZGUgIldLVmlldy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1j
bGFzcyBJbnRTaXplOwotY2xhc3MgVmlld3BvcnRBdHRyaWJ1dGVzOwotfQotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgV2ViVmlldzsKLQotY2xhc3MgV2ViVmlld0NsaWVudDogcHVibGlj
IEFQSUNsaWVudDxXS1ZpZXdDbGllbnQsIGtXS1ZpZXdDbGllbnRDdXJyZW50VmVyc2lvbj4gewot
cHVibGljOgotICAgIHZvaWQgdmlld05lZWRzRGlzcGxheShXZWJWaWV3KiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOwotICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYlZpZXcqLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCB3ZWJQcm9jZXNzQ3Jhc2hlZChXZWJW
aWV3KiwgY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgd2ViUHJvY2Vzc0RpZFJlbGF1bmNo
KFdlYlZpZXcqKTsKLSAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24oV2ViVmlldyos
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZShXZWJW
aWV3KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2b2lkIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oV2ViVmlldyopOwotICAgIHZvaWQg
ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpWaWV3
cG9ydEF0dHJpYnV0ZXMmKTsKLSAgICB2b2lkIGRpZENoYW5nZVRvb2x0aXAoV2ViVmlldyosIGNv
bnN0IFN0cmluZyYgdG9vbHRpcCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFdlYlZpZXdDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJWaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
Vmlld0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4ZDAxZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0Vm
bC5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdFZmwuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkTWFu
YWdlckVmbC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIKKyNpbmNsdWRlICJJbnB1dE1ldGhvZENv
bnRleHRFZmwuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5RWZsLmgiCisjaW5jbHVk
ZSAiV2ViUG9wdXBNZW51TGlzdGVuZXJFZmwuaCIKKworI2luY2x1ZGUgImV3a19jb250ZXh0X3By
aXZhdGUuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEV3a1ZpZXdD
YWxsYmFja3M7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYlZpZXdFZmw6OldlYlZpZXdFZmwoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdy
b3VwKiBwYWdlR3JvdXApCisgICAgOiBXZWJWaWV3KGNvbnRleHQsIHBhZ2VHcm91cCkKKyAgICAs
IG1fZXdrVmlldygwKQoreworfQorCit2b2lkIFdlYlZpZXdFZmw6OnNldEV3a1ZpZXcoRXdrVmll
dyogZXdrVmlldykKK3sKKyAgICBtX2V3a1ZpZXcgPSBld2tWaWV3OworCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmll
dyhld2tWaWV3LT5ldmFzT2JqZWN0KCkpOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8V2ViUG9w
dXBNZW51UHJveHk+IFdlYlZpZXdFZmw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94
eSogcGFnZSkKK3sKKyAgICByZXR1cm4gV2ViUG9wdXBNZW51TGlzdGVuZXJFZmw6OmNyZWF0ZShw
YWdlKTsKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBXZWJWaWV3RWZsOjpj
cmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICByZXR1cm4g
V2ViQ29udGV4dE1lbnVQcm94eUVmbDo6Y3JlYXRlKG1fZXdrVmlldywgcGFnZSk7Cit9CisKK3Zv
aWQgV2ViVmlld0VmbDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIEFT
U0VSVChtX2V3a1ZpZXcpOworICAgIG1fZXdrVmlldy0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisK
K3ZvaWQgV2ViVmlld0VmbDo6dXBkYXRlVGV4dElucHV0U3RhdGUoKQoreworICAgIElucHV0TWV0
aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0ID0gbV9ld2tWaWV3LT5pbnB1dE1ldGhv
ZENvbnRleHQoKTsKKyAgICBpZiAoaW5wdXRNZXRob2RDb250ZXh0KQorICAgICAgICBpbnB1dE1l
dGhvZENvbnRleHQtPnVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViVmlld0Vm
bDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQoreworICAg
IEV3a0NvbnRleHQqIGNvbnRleHQgPSBtX2V3a1ZpZXctPmV3a0NvbnRleHQoKTsKKyAgICBjb250
ZXh0LT5kb3dubG9hZE1hbmFnZXIoKS0+cmVnaXN0ZXJEb3dubG9hZEpvYih0b0FQSShkb3dubG9h
ZCksIG1fZXdrVmlldyk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmQ3ZTBkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXdFZmwuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYlZpZXdFZmxfaAorI2RlZmluZSBXZWJWaWV3RWZsX2gKKworI2luY2x1
ZGUgIldlYlZpZXcuaCIKKworY2xhc3MgRXdrVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYlZpZXdFZmwgOiBwdWJsaWMgV2ViVmlldyB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRFd2tWaWV3KEV3a1ZpZXcqKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3KCkgeyByZXR1cm4gbV9l
d2tWaWV3OyB9CisKK3ByaXZhdGU6CisgICAgV2ViVmlld0VmbChXZWJDb250ZXh0KiwgV2ViUGFn
ZUdyb3VwKik7CisKKyAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSBP
VkVSUklERTsKKyAgICBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1l
bnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvbnRl
eHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJ
REU7CisgICAgdm9pZCB1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpIE9WRVJSSURFOworICAgIHZvaWQg
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICBFd2tWaWV3KiBtX2V3a1ZpZXc7CisKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlldzsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVmlld0VmbF9oCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiNDhiMDA0Li41YjVjNTM3IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTExLDYgKzExLDcgQEAgYWRk
X2N1c3RvbV90YXJnZXQoZm9yd2FyZGluZy1oZWFkZXJzU291cEZvclRlc3RXZWJLaXRBUEkKIHNl
dChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNGb3JUZXN0V2ViS2l0QVBJX05BTUUgZm9yd2FyZGlu
Zy1oZWFkZXJzU291cEZvclRlc3RXZWJLaXRBUEkpCiAKIGluY2x1ZGVfZGlyZWN0b3JpZXMoCisg
ICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MKICAg
ICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0Mvc291cAogICAgICR7V0VCS0lUMl9ESVJ9
L1VJUHJvY2Vzcy9BUEkvQy9lZmwKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3
RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5j
cHAKaW5kZXggYTRlYjA3YS4uMWJmNjU3OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNs
dWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tWaWV3RWZs
Lmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198822</attachid>
            <date>2013-04-19 01:13:31 -0700</date>
            <delta_ts>2013-04-19 01:27:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug114734</filename>
            <type>text/plain</type>
            <size>101261</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGI4NWFkZTVmZjdlZDUxZTc4NGYzNDhhMWYwNzQ4MjZmMTA2OTEwZTcKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VGh1IEFwciAxOCAxNDo0MjozNCAyMDEzICswMzAwCgogICAgYnVnMTE0NzM0CgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGNhZTlkZTIuLjMwZjg4ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjcgQEAKKzIwMTMt
MDQtMTkgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW1dLMl0gTWFrZSBFRkwgV0tWaWV3IEFQSSBzaGFyZWFibGUgYmV0d2VlbiBw
b3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0
NzM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRUZM
LWluZGVwZW5kZW50IHBhcnQgb2YgV0tWaWV3IEFQSSAoYW5kIGl0cyBpbXBsZW1lbnRhdGlvbikg
aXMgbm93CisgICAgICAgIHNoYXJlYWJsZSBiZXR3ZWVuIHBvcnRzIHRoYXQgdXNlIENvb3JkaW5h
dGVkIEdyYXBoaWNzIGFuZCBwdXQgdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljcyBmb2xk
ZXJzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcC4KKyAgICAgICAgKFdLVmll
d0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dl
dFNpemUpOgorICAgICAgICAoV0tWaWV3U2V0U2l6ZSk6CisgICAgICAgIChXS1ZpZXdTZXRWaWV3
Q2xpZW50KToKKyAgICAgICAgKFdLVmlld0lzRm9jdXNlZCk6CisgICAgICAgIChXS1ZpZXdTZXRJ
c0ZvY3VzZWQpOgorICAgICAgICAoV0tWaWV3SXNWaXNpYmxlKToKKyAgICAgICAgKFdLVmlld1Nl
dElzVmlzaWJsZSk6CisgICAgICAgIChXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IpOgorICAg
ICAgICAoV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdLVmlld0dldENv
bnRlbnRQb3NpdGlvbik6CisgICAgICAgIChXS1ZpZXdTZXRDb250ZW50UG9zaXRpb24pOgorICAg
ICAgICAoV0tWaWV3U2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24pOgorICAgICAgICAoV0tWaWV3
VXNlclZpZXdwb3J0VG9Db250ZW50cyk6CisgICAgICAgIChXS1ZpZXdQYWludFRvQ3VycmVudEdM
Q29udGV4dCk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAgICAgICAgKFdLVmlld1NldERy
YXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQpOgorICAg
ICAgICAoV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV0tW
aWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV0tWaWV3U2V0VGhl
bWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyk6CisgICAgICAgIChXS1ZpZXdTZXRTaG93c0FzU291cmNlKToKKyAgICAgICAgKFdLVmlld0dl
dFNob3dzQXNTb3VyY2UpOgorICAgICAgICAoV0tWaWV3RXhpdEZ1bGxTY3JlZW4pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V0tWaWV3UGFpbnRUb0NhaXJvU3VyZmFjZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hv
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXdFZmwuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3
OjpFd2tWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpzZXRGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFVzZXJWaWV3cG9ydFRy
YW5zbGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dXNlclZpZXdwb3J0VG9Db250
ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFpbnRUb0NhaXJvU3VyZmFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFRoZW1lUGF0aCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnNldERyYXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRy
YXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldERyYXdzVHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZHJhd3NUcmFuc3Bh
cmVudEJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpyZXN1
bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OnNldFNob3dzQXNTb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzaG93c0Fz
U291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZXhpdEZ1bGxTY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppbml0aWFsaXplQ2xpZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHJh
bnNmb3JtVG9TY2VuZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnVwZGF0ZVZpZXdwb3J0U2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpcFNpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6c2V0Vmlld05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRp
c3BsYXlWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2Nyb2xsVmlldyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnZpZXdTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6aXNWaWV3V2luZG93QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aXNWaWV3
Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmlzVmlld1Zpc2libGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdJbldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRp
ZFJlbGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VDbG9zZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0b29sVGlwQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNl
dEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnJlZ2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjbGVhckFs
bEVkaXRDb21tYW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNhblVuZG9SZWRvKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZXhlY3V0ZVVuZG9SZWRvKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c2NyZWVuVG9XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Ojp3aW5kb3dUb1NjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRvbmVXaXRoS2V5
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpkb25lV2l0aFRvdWNoRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpjcmVhdGVDb2xvckNob29zZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnNldEZpbmRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpl
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZh
Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRl
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2Vu
dGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y291bnRTdHJpbmdNYXRjaGVzSW5D
dXN0b21SZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnVwZGF0ZVRl
eHRJbnB1dFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvRGV2aWNlU3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb252ZXJ0VG9Vc2VyU3BhY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXcuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzaXplKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6aXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q29udGVu
dFNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udGVudFNjYWxlRmFj
dG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q29udGVudFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udGVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50
LmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6
OnZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpkaWRD
aGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Ojp3ZWJQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6OndlYlByb2Nl
c3NEaWRSZWxhdW5jaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6OmRpZENoYW5n
ZUNvbnRlbnRzUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpkaWRS
ZW5kZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6OmRpZENvbXBsZXRl
UGFnZVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpkaWRDaGFu
Z2VWaWV3cG9ydEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Ojpk
aWRDaGFuZ2VUb29sdGlwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XZWJWaWV3Q2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXdDbGllbnQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdFZmw6OldlYlZpZXdFZmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3RWZsOjpzZXRFd2tWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6Y3JlYXRl
UG9wdXBNZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3RWZsOjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6c2V0Q3Vyc29yKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6dXBkYXRlVGV4dElucHV0U3RhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3RWZsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJWaWV3RWZsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6ZXdr
Vmlldyk6CisKIDIwMTMtMDQtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUERGUGx1Z2luOiBVcGRhdGUgUERGTGF5ZXJDb250cm9sbGVyJ3Mgc2Nh
bGUgZmFjdG9ycyBlYXJsaWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDAxYzVmNjEu
LmI5YjJiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00NiwxMCArNDYsMTIgQEAg
bGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvY2Fpcm8v
V0tJY29uRGF0YWJhc2VDYWlyby5jcHAKIAorICAgIFVJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dLVmlldy5jcHAKKwogICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tQYWdlRWZs
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tQb3B1cEl0ZW0uY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9DL2VmbC9XS1BvcHVwTWVudUxpc3RlbmVyLmNwcAotICAgIFVJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcAog
CiAgICAgVUlQcm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5jcHAKIApAQCAt
OTQsNiArOTYsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFVJUHJvY2Vz
cy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYlZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViVmlld0NsaWVudC5jcHAKKwogICAgIFVJUHJvY2Vzcy9lZmwvQmF0dGVyeVByb3ZpZGVyLmNw
cAogICAgIFVJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCiAgICAgVUlQ
cm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVudEVmbC5jcHAKQEAgLTExMSw2ICsxMTYsNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2Vy
RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmNwcAogICAgIFVJ
UHJvY2Vzcy9lZmwvVmlld0NsaWVudEVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1dlYlZpZXdF
ZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcAogICAgIFVJUHJvY2Vz
cy9lZmwvV2ViQ29udGV4dE1lbnVQcm94eUVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCkBAIC0xMjEsOCArMTI3LDYgQEAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcmVmZXJlbmNlc0VmbC5j
cHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQcm94eUVmbC5jcHAKICAgICBVSVByb2Nl
c3MvZWZsL1dlYlVJUG9wdXBNZW51Q2xpZW50LmNwcAotICAgIFVJUHJvY2Vzcy9lZmwvV2ViVmll
dy5jcHAKLSAgICBVSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwCiAKICAgICBVSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL2VmbC9XZWJJbnNwZWN0b3JTZXJ2ZXJFZmwuY3BwCiAgICAgVUlQ
cm9jZXNzL0luc3BlY3RvclNlcnZlci9zb3VwL1dlYlNvY2tldFNlcnZlclNvdXAuY3BwCkBAIC0x
ODQsNiArMTg4LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJl
ZC9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCisgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzIgogICAg
ICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJfRElS
fS9VSVByb2Nlc3MvQVBJL0Mvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQ
SS9jcHAvZWZsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzkxYmIwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKQEAgLTAsMCAr
MSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
CisjaW5jbHVkZSAiV0tWaWV3LmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1dLVmlld1JlZiBXS1Zp
ZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZikKK3sKKyAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSh0
b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICByZXR1cm4gdG9B
UEkod2ViVmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KKwordm9pZCBXS1ZpZXdJbml0aWFs
aXplKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6
ZSgpOworfQorCitXS1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAg
ICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5zaXplKCkpOworfQorCit2b2lkIFdLVmll
d1NldFNpemUoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU2l6ZSBzaXplKQoreworICAgIHRvSW1wbCh2
aWV3UmVmKS0+c2V0U2l6ZSh0b0ludFNpemUoc2l6ZSkpOworfQorCit2b2lkIFdLVmlld1NldFZp
ZXdDbGllbnQoV0tWaWV3UmVmIHZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50KQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZUNsaWVudChjbGllbnQpOworfQorCiti
b29sIFdLVmlld0lzRm9jdXNlZChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9J
bXBsKHZpZXdSZWYpLT5pc0ZvY3VzZWQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXRJc0ZvY3VzZWQo
V0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgaXNGb2N1c2VkKQoreworICAgIHRvSW1wbCh2aWV3UmVm
KS0+c2V0Rm9jdXNlZChpc0ZvY3VzZWQpOworfQorCitib29sIFdLVmlld0lzVmlzaWJsZShXS1Zp
ZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5pc1Zpc2libGUo
KTsKK30KKwordm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wg
aXNWaXNpYmxlKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VmlzaWJsZShpc1Zpc2libGUp
OworfQorCitmbG9hdCBXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVmIHZpZXdS
ZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFNjYWxlRmFjdG9yKCk7
Cit9CisKK3ZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiB2aWV3UmVm
LCBmbG9hdCBzY2FsZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRTY2FsZUZh
Y3RvcihzY2FsZSk7Cit9CisKK1dLUG9pbnQgV0tWaWV3R2V0Q29udGVudFBvc2l0aW9uKFdLVmll
d1JlZiB2aWV3UmVmKQoreworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHJlc3VsdCA9
IHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFdLUG9pbnRN
YWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOworfQorCit2b2lkIFdLVmlld1NldENvbnRlbnRQ
b3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgV0tQb2ludCBwb3NpdGlvbikKK3sKKyAgICB0b0lt
cGwodmlld1JlZiktPnNldENvbnRlbnRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KHBvc2l0
aW9uLngsIHBvc2l0aW9uLnkpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRUcmFu
c2xhdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAg
dG9JbXBsKHZpZXdSZWYpLT5zZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbih0eCwgdHkpOworfQor
CitXS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmIHZpZXdSZWYs
IFdLUG9pbnQgcG9pbnQpCit7CisgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHJlc3VsdCA9
IHRvSW1wbCh2aWV3UmVmKS0+dXNlclZpZXdwb3J0VG9Db250ZW50cyh0b0ludFBvaW50KHBvaW50
KSk7CisgICAgcmV0dXJuIFdLUG9pbnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOworfQor
Cit2b2lkIFdLVmlld1BhaW50VG9DdXJyZW50R0xDb250ZXh0KFdLVmlld1JlZiB2aWV3UmVmKQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKK30KKwor
V0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJu
IHRvSW1wbCh2aWV3UmVmKS0+cGFnZVJlZigpOworfQorCit2b2lkIFdLVmlld1NldERyYXdzQmFj
a2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2aWV3
UmVmKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZsYWcpOworfQorCitib29sIFdLVmlld0dldERyYXdz
QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdS
ZWYpLT5kcmF3c0JhY2tncm91bmQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXREcmF3c1RyYW5zcGFy
ZW50QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1w
bCh2aWV3UmVmKS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoZmxhZyk7Cit9CisKK2Jv
b2wgV0tWaWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmIHZpZXdSZWYp
Cit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91
bmQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYsIFdL
U3RyaW5nUmVmIHRoZW1lKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRoKHRv
SW1wbCh0aGVtZSktPnN0cmluZygpKTsKK30KKwordm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZp
ZXdSZWYpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9p
ZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmll
d1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYg
dmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0U2hvd3NBc1Nv
dXJjZShmbGFnKTsKK30KKworYm9vbCBXS1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1JlZiB2
aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPnNob3dzQXNTb3VyY2UoKTsK
K30KKwordm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdG9JbXBsKHZpZXdSZWYpLT5leGl0RnVsbFNj
cmVlbigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlld1JlZik7CisjZW5kaWYKK30KKwor
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5ZDdhOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNz
L1dLVmlldy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXS1ZpZXdfaAorI2RlZmluZSBXS1ZpZXdf
aAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLR2Vv
bWV0cnkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0
eXBlZGVmIHZvaWQgKCpXS1ZpZXdDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tWaWV3Vmlld05lZWRzRGlzcGxheUNhbGxi
YWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IGFyZWEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OwordHlwZWRlZiB2b2lkICgqV0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNr
KShXS1ZpZXdSZWYgdmlldywgV0tTaXplIHNpemUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
dHlwZWRlZiB2b2lkICgqV0tWaWV3V2ViUHJvY2Vzc0NyYXNoZWRDYWxsYmFjaykoV0tWaWV3UmVm
IHZpZXcsIFdLVVJMUmVmIHVybCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZv
aWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNhbGxiYWNrKShXS1ZpZXdS
ZWYgdmlldywgV0tQb2ludCBwb3NpdGlvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkUmVuZGVyRnJhbWVDYWxsYmFjaykoV0tWaWV3UmVmIHZp
ZXcsIFdLU2l6ZSBjb250ZW50c1NpemUsIFdLUmVjdCBjb3ZlcmVkUmVjdCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlVmlld3BvcnRB
dHRyaWJ1dGVzQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1ZpZXdwb3J0QXR0cmlidXRlc1Jl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlk
Q2hhbmdlVG9vbHRpcENhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTdHJpbmdSZWYgbmV3VG9v
bHRpcCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3N0cnVjdCBXS1ZpZXdDbGllbnQgewor
ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJz
aW9uOworICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGllbnRJbmZvOworCisgICAgLy8gVmVyc2lvbiAwCisgICAgV0tWaWV3Vmlld05lZWRzRGlz
cGxheUNhbGxiYWNrICAgICAgICAgICAgICAgICAgIHZpZXdOZWVkc0Rpc3BsYXk7CisgICAgV0tW
aWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNrICAgICAgICAgIGRpZENoYW5nZUNv
bnRlbnRzU2l6ZTsKKyAgICBXS1ZpZXdXZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrICAgICAgICAg
ICAgICAgICAgd2ViUHJvY2Vzc0NyYXNoZWQ7CisgICAgV0tWaWV3Q2FsbGJhY2sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdlYlByb2Nlc3NEaWRSZWxhdW5jaDsKKyAgICBXS1Zp
ZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNhbGxiYWNrICAgICAgZGlkQ2hhbmdlQ29u
dGVudHNQb3NpdGlvbjsKKyAgICBXS1ZpZXdQYWdlRGlkUmVuZGVyRnJhbWVDYWxsYmFjayAgICAg
ICAgICAgICAgICAgZGlkUmVuZGVyRnJhbWU7CisgICAgV0tWaWV3Q2FsbGJhY2sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb247CisgICAg
V0tWaWV3UGFnZURpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlc0NhbGxiYWNrICAgIGRpZENoYW5n
ZVZpZXdwb3J0QXR0cmlidXRlczsKKyAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxi
YWNrICAgICAgICAgICAgICAgZGlkQ2hhbmdlVG9vbHRpcDsKK307Cit0eXBlZGVmIHN0cnVjdCBX
S1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OworCitlbnVtIHsga1dLVmlld0NsaWVudEN1cnJlbnRW
ZXJzaW9uID0gMCB9OworCitXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRl
eHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKKworV0tfRVhQT1JUIHZv
aWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgV0tTaXplIFdLVmll
d0dldFNpemUoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFNpemUoV0tWaWV3
UmVmLCBXS1NpemUgc2l6ZSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFZpZXdDbGllbnQo
V0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKKworV0tfRVhQT1JUIGJvb2wgV0tWaWV3
SXNGb2N1c2VkKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc0ZvY3VzZWQo
V0tWaWV3UmVmLCBib29sKTsKKworV0tfRVhQT1JUIGJvb2wgV0tWaWV3SXNWaXNpYmxlKFdLVmll
d1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmLCBib29s
KTsKKworV0tfRVhQT1JUIGZsb2F0IFdLVmlld0dldENvbnRlbnRTY2FsZUZhY3RvcihXS1ZpZXdS
ZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1Jl
ZiwgZmxvYXQpOworCitXS19FWFBPUlQgV0tQb2ludCBXS1ZpZXdHZXRDb250ZW50UG9zaXRpb24o
V0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldENvbnRlbnRQb3NpdGlvbihXS1Zp
ZXdSZWYsIFdLUG9pbnQpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRU
cmFuc2xhdGlvbihXS1ZpZXdSZWYsIGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKK1dLX0VYUE9SVCBX
S1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmLCBXS1BvaW50KTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFpbnRUb0N1cnJlbnRHTENvbnRleHQoV0tWaWV3UmVm
KTsKKworV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7CisKK1dL
X0VYUE9SVCB2b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiwgYm9v
bCk7CitXS19FWFBPUlQgYm9vbCBXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQoV0tWaWV3UmVmKTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tW
aWV3UmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdLVmlld0dldERyYXdzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kKFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tW
aWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKKworV0tf
RVhQT1JUIHZvaWQgV0tWaWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYsIGJvb2wpOworV0tf
RVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOworCitXS19FWFBP
UlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOworCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjg2NzQxMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXS1ZpZXcuaCIKLQotI2luY2x1ZGUgIkV3a1ZpZXcuaCIK
LSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgi
Ci0jaW5jbHVkZSAiZXdrX3BhZ2VfZ3JvdXBfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYktpdDIv
V0tJbWFnZUNhaXJvLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLVdLVmlld1JlZiBX
S1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKLXsKLSAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0
ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKLSAgICByZXR1cm4g
dG9BUEkod2ViVmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKLX0KLQotdm9pZCBXS1ZpZXdJbml0
aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlh
bGl6ZSgpOwotfQotCi1XS1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYgdmlld1JlZikKLXsK
LSAgICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5zaXplKCkpOwotfQotCi12b2lkIFdL
Vmlld1NldFNpemUoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU2l6ZSBzaXplKQotewotICAgIHRvSW1w
bCh2aWV3UmVmKS0+c2V0U2l6ZSh0b0ludFNpemUoc2l6ZSkpOwotfQotCi12b2lkIFdLVmlld1Nl
dFZpZXdDbGllbnQoV0tWaWV3UmVmIHZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50
KQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZUNsaWVudChjbGllbnQpOwotfQot
Ci1ib29sIFdLVmlld0lzRm9jdXNlZChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4g
dG9JbXBsKHZpZXdSZWYpLT5pc0ZvY3VzZWQoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRJc0ZvY3Vz
ZWQoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgaXNGb2N1c2VkKQotewotICAgIHRvSW1wbCh2aWV3
UmVmKS0+c2V0Rm9jdXNlZChpc0ZvY3VzZWQpOwotfQotCi1ib29sIFdLVmlld0lzVmlzaWJsZShX
S1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5pc1Zpc2li
bGUoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmIHZpZXdSZWYsIGJv
b2wgaXNWaXNpYmxlKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VmlzaWJsZShpc1Zpc2li
bGUpOwotfQotCi1mbG9hdCBXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVmIHZp
ZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFNjYWxlRmFjdG9y
KCk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiB2aWV3
UmVmLCBmbG9hdCBzY2FsZSkKLXsKLSAgICB0b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRTY2Fs
ZUZhY3RvcihzY2FsZSk7Ci19Ci0KLVdLUG9pbnQgV0tWaWV3R2V0Q29udGVudFBvc2l0aW9uKFdL
Vmlld1JlZiB2aWV3UmVmKQotewotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHJlc3Vs
dCA9IHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFdLUG9p
bnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOwotfQotCi12b2lkIFdLVmlld1NldENvbnRl
bnRQb3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgV0tQb2ludCBwb3NpdGlvbikKLXsKLSAgICB0
b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KHBv
c2l0aW9uLngsIHBvc2l0aW9uLnkpKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRU
cmFuc2xhdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0g
ICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbih0eCwgdHkpOwot
fQotCi1XS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmIHZpZXdS
ZWYsIFdLUG9pbnQgcG9pbnQpCi17Ci0gICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHJlc3Vs
dCA9IHRvSW1wbCh2aWV3UmVmKS0+dXNlclZpZXdwb3J0VG9Db250ZW50cyh0b0ludFBvaW50KHBv
aW50KSk7Ci0gICAgcmV0dXJuIFdLUG9pbnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOwot
fQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBXS1ZpZXdQYWludFRv
Q3VycmVudEdMQ29udGV4dChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICB0b0ltcGwodmlld1Jl
ZiktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXS1ZpZXdQ
YWludFRvQ2Fpcm9TdXJmYWNlKFdLVmlld1JlZiB2aWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5wYWludFRvQ2Fpcm9TdXJmYWNlKHN1cmZh
Y2UpOwotfQotCi1XS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikKLXsK
LSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5wYWdlUmVmKCk7Ci19Ci0KLXZvaWQgV0tWaWV3
U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17Ci0gICAg
dG9JbXBsKHZpZXdSZWYpLT5zZXREcmF3c0JhY2tncm91bmQoZmxhZyk7Ci19Ci0KLWJvb2wgV0tW
aWV3R2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0
b0ltcGwodmlld1JlZiktPmRyYXdzQmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdLVmlld1NldERy
YXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17
Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChmbGFn
KTsKLX0KLQotYm9vbCBXS1ZpZXdHZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChXS1ZpZXdS
ZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5kcmF3c1RyYW5zcGFy
ZW50QmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYg
dmlld1JlZiwgV0tTdHJpbmdSZWYgdGhlbWUpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRU
aGVtZVBhdGgodG9JbXBsKHRoZW1lKS0+c3RyaW5nKCkpOwotfQotCi12b2lkIFdLVmlld1N1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAg
ICB0b0ltcGwodmlld1JlZiktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygp
OwotfQotCi12b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdL
Vmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRTaG93c0FzU291cmNl
KFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5z
ZXRTaG93c0FzU291cmNlKGZsYWcpOwotfQotCi1ib29sIFdLVmlld0dldFNob3dzQXNTb3VyY2Uo
V0tWaWV3UmVmIHZpZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+c2hvd3NB
c1NvdXJjZSgpOwotfQotCi12b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3
UmVmKQotewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB0b0ltcGwodmlld1JlZikt
PmV4aXRGdWxsU2NyZWVuKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2aWV3UmVmKTsKLSNl
bmRpZgotfQotCi1XS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3
UmVmKQotewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSB0b0V3a1ZpZXcodG9JbXBsKHZpZXdSZWYp
LT5ldmFzT2JqZWN0KCkpOwotICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFj
ZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwYWM5ZDMzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgV0tWaWV3X2gKLSNkZWZpbmUgV0tWaWV3X2gKLQotI2luY2x1ZGUgPFdlYktpdDIvV0tC
YXNlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS0dlb21ldHJ5Lmg+Ci0KLXR5cGVkZWYgc3RydWN0
IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1l
eHRlcm4gIkMiIHsKLSNlbmRpZgotCi10eXBlZGVmIHZvaWQgKCpXS1ZpZXdDYWxsYmFjaykoV0tW
aWV3UmVmIHZpZXcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tW
aWV3Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IGFyZWEs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tWaWV3UGFnZURpZENo
YW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTaXplIHNpemUsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tWaWV3V2ViUHJvY2Vzc0Ny
YXNoZWRDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLVVJMUmVmIHVybCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQ
b3NpdGlvbkNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tQb2ludCBwb3NpdGlvbiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkUmVuZGVyRnJh
bWVDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLU2l6ZSBjb250ZW50c1NpemUsIFdLUmVjdCBj
b3ZlcmVkUmVjdCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1Zp
ZXdQYWdlRGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3
LCBXS1ZpZXdwb3J0QXR0cmlidXRlc1JlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10eXBl
ZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxiYWNrKShXS1ZpZXdSZWYg
dmlldywgV0tTdHJpbmdSZWYgbmV3VG9vbHRpcCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0K
LXN0cnVjdCBXS1ZpZXdDbGllbnQgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOwotICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOwotCi0gICAgLy8gVmVyc2lvbiAw
Ci0gICAgV0tWaWV3Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrICAgICAgICAgICAgICAgICAgIHZp
ZXdOZWVkc0Rpc3BsYXk7Ci0gICAgV0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxi
YWNrICAgICAgICAgIGRpZENoYW5nZUNvbnRlbnRzU2l6ZTsKLSAgICBXS1ZpZXdXZWJQcm9jZXNz
Q3Jhc2hlZENhbGxiYWNrICAgICAgICAgICAgICAgICAgd2ViUHJvY2Vzc0NyYXNoZWQ7Ci0gICAg
V0tWaWV3Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYlByb2Nl
c3NEaWRSZWxhdW5jaDsKLSAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNh
bGxiYWNrICAgICAgZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbjsKLSAgICBXS1ZpZXdQYWdlRGlk
UmVuZGVyRnJhbWVDYWxsYmFjayAgICAgICAgICAgICAgICAgZGlkUmVuZGVyRnJhbWU7Ci0gICAg
V0tWaWV3Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZENvbXBs
ZXRlUGFnZVRyYW5zaXRpb247Ci0gICAgV0tWaWV3UGFnZURpZENoYW5nZVZpZXdwb3J0QXR0cmli
dXRlc0NhbGxiYWNrICAgIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlczsKLSAgICBXS1ZpZXdQ
YWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxiYWNrICAgICAgICAgICAgICAgZGlkQ2hhbmdlVG9vbHRp
cDsKLX07Ci10eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwotCi1lbnVt
IHsga1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwotCi1XS19FWFBPUlQgV0tWaWV3
UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwot
Ci1XS19FWFBPUlQgV0tTaXplIFdLVmlld0dldFNpemUoV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2
b2lkIFdLVmlld1NldFNpemUoV0tWaWV3UmVmLCBXS1NpemUgc2l6ZSk7Ci0KLVdLX0VYUE9SVCB2
b2lkIFdLVmlld1NldFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsK
LQotV0tfRVhQT1JUIGJvb2wgV0tWaWV3SXNGb2N1c2VkKFdLVmlld1JlZik7Ci1XS19FWFBPUlQg
dm9pZCBXS1ZpZXdTZXRJc0ZvY3VzZWQoV0tWaWV3UmVmLCBib29sKTsKLQotV0tfRVhQT1JUIGJv
b2wgV0tWaWV3SXNWaXNpYmxlKFdLVmlld1JlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJ
c1Zpc2libGUoV0tWaWV3UmVmLCBib29sKTsKLQotV0tfRVhQT1JUIGZsb2F0IFdLVmlld0dldENv
bnRlbnRTY2FsZUZhY3RvcihXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Q29u
dGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiwgZmxvYXQpOwotCi1XS19FWFBPUlQgV0tQb2ludCBX
S1ZpZXdHZXRDb250ZW50UG9zaXRpb24oV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmll
d1NldENvbnRlbnRQb3NpdGlvbihXS1ZpZXdSZWYsIFdLUG9pbnQpOwotCi1XS19FWFBPUlQgdm9p
ZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihXS1ZpZXdSZWYsIGRvdWJsZSB0eCwg
ZG91YmxlIHR5KTsKLVdLX0VYUE9SVCBXS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVu
dHMoV0tWaWV3UmVmLCBXS1BvaW50KTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmlld1BhaW50VG9D
YWlyb1N1cmZhY2UoV0tWaWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqKTsKLQotV0tfRVhQT1JUIFdL
UGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVmll
d1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsKLQotV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiwgYm9vbCk7Ci1XS19FWFBPUlQgYm9v
bCBXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQoV0tWaWV3UmVmKTsKLQotV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmLCBib29sKTsKLVdL
X0VYUE9SVCBib29sIFdLVmlld0dldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmlld1Jl
Zik7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucyhXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3UmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3
U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYsIGJvb2wpOwotV0tfRVhQT1JUIGJvb2wgV0tWaWV3
R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0
RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVh
dGVTbmFwc2hvdChXS1ZpZXdSZWYpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgot
Ci0jZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tWaWV3RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mMTY1MzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXdFZmwuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS1ZpZXdFZmwuaCIKKworI2luY2x1
ZGUgIkV3a1ZpZXcuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJWaWV3
RWZsLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKwordm9pZCBXS1ZpZXdQYWludFRvQ2Fpcm9TdXJmYWNlKFdLVmlld1JlZiB2
aWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgdG9JbXBsKHZpZXdSZWYp
LT5wYWludFRvQ2Fpcm9TdXJmYWNlKHN1cmZhY2UpOworfQorCitXS0ltYWdlUmVmIFdLVmlld0Ny
ZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIEV3a1ZpZXcqIGV3a1ZpZXcg
PSBzdGF0aWNfY2FzdDxXZWJWaWV3RWZsKj4odG9JbXBsKHZpZXdSZWYpKS0+ZXdrVmlldygpOwor
ICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25h
cHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJiY2QyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV0tWaWV3RWZsX2gKKyNkZWZpbmUgV0tWaWV3RWZsX2gKKworI2lu
Y2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNl
IGNhaXJvX3N1cmZhY2VfdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNl
bmRpZgorCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdQYWludFRvQ2Fpcm9TdXJmYWNlKFdLVmlld1Jl
ZiwgY2Fpcm9fc3VyZmFjZV90Kik7CisKK1dLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0
ZVNuYXBzaG90KFdLVmlld1JlZik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisK
KyNlbmRpZiAvKiBXS1ZpZXdFZmxfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmNwcAppbmRleCA4OGExNTFmLi43MWMzMmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2lu
Y2x1ZGUgIldLUG9wdXBJdGVtLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJX
S1ZpZXcuaCIKKyNpbmNsdWRlICJXS1ZpZXdFZmwuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTI4
Miw3ICsyODMsNyBAQCBFd2tWaWV3OjpFd2tWaWV3KFdLVmlld1JlZiB2aWV3LCBFdmFzX09iamVj
dCogZXZhc09iamVjdCkKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAogICAgIC8vIEZJWE1FOiBS
ZW1vdmUgd2hlbiBwb3NzaWJsZS4KLSAgICB3ZWJWaWV3KCktPnNldEV3a1ZpZXcodGhpcyk7Cisg
ICAgc3RhdGljX2Nhc3Q8V2ViVmlld0VmbCo+KHdlYlZpZXcoKSktPnNldEV3a1ZpZXcodGhpcyk7
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIG1fZXZhc0dMID0gYWRvcHRQ
dHIoZXZhc19nbF9uZXcoZXZhc19vYmplY3RfZXZhc19nZXQobV9ldmFzT2JqZWN0KSkpOwogICAg
IGlmIChtX2V2YXNHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcu
aAppbmRleCBkMzExODM1Li5iMGYzZDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlldy5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiV0tFaW5hU2hhcmVk
U3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgogI2luY2x1ZGUgIldLUmV0YWluUHRy
LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlZpZXdFZmwuaCIKICNpbmNs
dWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzU1NzBlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCkBAIC0wLDAg
KzEsNTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiV2ViVmlldy5oIgor
CisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlICJE
cmF3aW5nQXJlYVByb3h5SW1wbC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQorI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNlbmRpZgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlZpZXc6
OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCisg
ICAgOiBtX3BhZ2UoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCBwYWdlR3JvdXApKQorICAg
ICwgbV9mb2N1c2VkKGZhbHNlKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAgICwgbV9jb250
ZW50U2NhbGVGYWN0b3IoMS4wKQoreworICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOworICAgIG1fcGFn
ZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRy
dWUpOworCisgICAgY2hhciogZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgPSBnZXRlbnYoIldFQktJ
VF9TSE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKTsKKyAgICBib29sIHNob3dEZWJ1Z1Zp
c3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vu
dmlyb25tZW50LCAiMSIpOworICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCkt
PnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CisgICAgbV9w
YWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291
bnRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOworfQorCitXZWJWaWV3Ojp+V2ViVmlldygp
Cit7CisgICAgaWYgKG1fcGFnZS0+aXNDbG9zZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9wYWdlLT5jbG9zZSgpOworfQorCit2b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQoreworICAg
IG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpKQorICAgICAgICBzY2Vu
ZS0+c2V0QWN0aXZlKHRydWUpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFNpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgPSBzaXplOworCisgICAgdXBkYXRl
Vmlld3BvcnRTaXplKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Rm9jdXNlZChib29sIGZvY3Vz
ZWQpCit7CisgICAgaWYgKG1fZm9jdXNlZCA9PSBmb2N1c2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2ZvY3VzZWQgPSBmb2N1c2VkOworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdl
KFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lz
QWN0aXZlKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sK
KyAgICBpZiAobV92aXNpYmxlID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
dmlzaWJsZSA9IHZpc2libGU7CisgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFn
ZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRVc2VyVmlld3Bv
cnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJsZSB0eSkKK3sKKyAgICBtX3VzZXJWaWV3cG9y
dFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKHR4LCB0eSk7Cit9
CisKK0ludFBvaW50IFdlYlZpZXc6OnVzZXJWaWV3cG9ydFRvQ29udGVudHMoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybS5t
YXBQb2ludChwb2ludCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoKQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUoKTsKKyAgICBpZiAoIXNjZW5lKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRTogV2UgbmVlZCB0byBjbGVhbiB1cCB0aGlzIGNvZGUgYXMgaXQgaXMgc3BsaXQg
b3ZlciBDb29yZEdmeCBhbmQgUGFnZS4KKyAgICBzY2VuZS0+c2V0RHJhd3NCYWNrZ3JvdW5kKG1f
cGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgdmlld3BvcnQg
PSBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybS5tYXBSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9z
aXplKSk7CisKKyAgICBzY2VuZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtVG9T
Y2VuZSgpLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgLyogb3BhY2l0eSAqLyAxLCB2aWV3cG9y
dCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFpbnRUb0NhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UpCit7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9IGNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOworICAgIGlmICghc2NlbmUpCisgICAgICAgIHJldHVy
bjsKKworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIGNvbnRleHQoY2Fpcm9fY3JlYXRlKHN1cmZh
Y2UpKTsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uID0gY29udGVudFBvc2l0aW9u
KCk7CisgICAgZG91YmxlIGVmZmVjdGl2ZVNjYWxlID0gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3Rv
cigpICogY29udGVudFNjYWxlRmFjdG9yKCk7CisKKyAgICBjYWlyb19tYXRyaXhfdCB0cmFuc2Zv
cm0gPSB7IGVmZmVjdGl2ZVNjYWxlLCAwLCAwLCBlZmZlY3RpdmVTY2FsZSwgLSBwb3NpdGlvbi54
KCkgKiBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIC0gcG9zaXRpb24ueSgpICogbV9wYWdl
LT5kZXZpY2VTY2FsZUZhY3RvcigpIH07CisgICAgY2Fpcm9fc2V0X21hdHJpeChjb250ZXh0LmNy
KCksICZ0cmFuc2Zvcm0pOworICAgIHNjZW5lLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KCZjb250
ZXh0KTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRUaGVtZVBhdGgoY29uc3QgU3RyaW5nJiB0aGVt
ZSkKK3sKKyAgICBtX3BhZ2UtPnNldFRoZW1lUGF0aCh0aGVtZSk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZHJhd3NCYWNrZ3JvdW5kKQoreworICAgIG1fcGFn
ZS0+c2V0RHJhd3NCYWNrZ3JvdW5kKGRyYXdzQmFja2dyb3VuZCk7Cit9CisKK2Jvb2wgV2ViVmll
dzo6ZHJhd3NCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5kcmF3c0Jh
Y2tncm91bmQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXREcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZChib29sIHRyYW5zcGFyZW50QmFja2dyb3VuZCkKK3sKKyAgICBtX3BhZ2UtPnNldERyYXdz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKHRyYW5zcGFyZW50QmFja2dyb3VuZCk7Cit9CisKK2Jvb2wg
V2ViVmlldzo6ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3BhZ2Ut
PnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZp
ZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3BhZ2Ut
PnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0U2hvd3NBc1NvdXJjZShib29sIHNob3dzQXNTb3VyY2UpCit7CisgICAgbV9wYWdlLT5z
ZXRNYWluRnJhbWVJblZpZXdTb3VyY2VNb2RlKHNob3dzQXNTb3VyY2UpOworfQorCitib29sIFdl
YlZpZXc6OnNob3dzQXNTb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPm1haW5G
cmFtZUluVmlld1NvdXJjZU1vZGUoKTsKK30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
K3ZvaWQgV2ViVmlldzo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAgIG1fcGFnZS0+ZnVsbFNjcmVl
bk1hbmFnZXIoKS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7Cit9CisjZW5kaWYKKwordm9pZCBX
ZWJWaWV3Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50KQorewor
ICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRD
aGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBt
X2NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUodGhpcywgc2l6ZSk7Cit9CisKK0FmZmluZVRy
YW5zZm9ybSBXZWJWaWV3Ojp0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdAoreworICAgIHJldHVy
biB0cmFuc2Zvcm1Ub1NjZW5lKCkuaW52ZXJzZSgpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gV2Vi
Vmlldzo6dHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtID0gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm07CisKKyAgICBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbiA9IGNvbnRlbnRQb3NpdGlvbigpOworICAgIHRyYW5zZm9ybS5zY2Fs
ZShtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
LXBvc2l0aW9uLngoKSwgLXBvc2l0aW9uLnkoKSk7CisgICAgdHJhbnNmb3JtLnNjYWxlKGNvbnRl
bnRTY2FsZUZhY3RvcigpKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zv
cm0oKTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBXZWJWaWV3Ojpjb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUoKQoreworICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0g
bV9wYWdlLT5kcmF3aW5nQXJlYSgpOworICAgIGlmICghZHJhd2luZ0FyZWEpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogbGF5
ZXJUcmVlSG9zdFByb3h5ID0gZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5KCk7CisgICAgaWYgKCFsYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIGxheWVyVHJlZUhvc3RQcm94eS0+Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dXBkYXRlVmlld3BvcnRTaXplKCkKK3sKKyAgICBpZiAo
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBwYWdlKCktPmRyYXdpbmdBcmVhKCkpIHsK
KyAgICAgICAgLy8gV2ViIFByb2Nlc3MgZXhwZWN0cyBzaXplcyBpbiBVSSB1bml0cywgYW5kIG5v
dCByYXcgZGV2aWNlIHVuaXRzLgorICAgICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShyb3VuZGVk
SW50U2l6ZShkaXBTaXplKCkpLCBJbnRTaXplKCksIEludFNpemUoKSk7CisgICAgICAgIGRyYXdp
bmdBcmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KEZsb2F0UmVjdChjb250ZW50UG9zaXRpb24o
KSwgZGlwU2l6ZSgpKSwgRmxvYXRQb2ludCgpKTsKKyAgICB9Cit9CisKK2lubGluZSBXZWJDb3Jl
OjpGbG9hdFNpemUgV2ViVmlldzo6ZGlwU2l6ZSgpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGRp
cFNpemUoc2l6ZSgpKTsKKyAgICBkaXBTaXplLnNjYWxlKDEgLyBtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCkpOworCisgICAgcmV0dXJuIGRpcFNpemU7Cit9CisKKy8vIFBhZ2UgQ2xpZW50CisK
K1Bhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRlRHJhd2luZ0FyZWFQ
cm94eSgpCit7CisgICAgT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGRyYXdpbmdBcmVhID0gRHJh
d2luZ0FyZWFQcm94eUltcGw6OmNyZWF0ZShwYWdlKCkpOworICAgIHJldHVybiBkcmF3aW5nQXJl
YS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBhcmVhKQoreworICAgIG1fY2xpZW50LnZpZXdOZWVkc0Rpc3Bs
YXkodGhpcywgYXJlYSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlzcGxheVZpZXcoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2Nyb2xsVmlldyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikKK3sK
KyAgICBzZXRWaWV3TmVlZHNEaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCitXZWJDb3JlOjpJbnRT
aXplIFdlYlZpZXc6OnZpZXdTaXplKCkKK3sKKyAgICByZXR1cm4gcm91bmRlZEludFNpemUoZGlw
U2l6ZSgpKTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlldzo6
aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgcmV0dXJuIGlzRm9jdXNlZCgpOworfQorCitib29sIFdl
YlZpZXc6OmlzVmlld1Zpc2libGUoKQoreworICAgIHJldHVybiBpc1Zpc2libGUoKTsKK30KKwor
Ym9vbCBXZWJWaWV3Ojppc1ZpZXdJbldpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJWaWV3Ojpwcm9jZXNzRGlkQ3Jhc2goKQor
eworICAgIG1fY2xpZW50LndlYlByb2Nlc3NDcmFzaGVkKHRoaXMsIG1fcGFnZS0+dXJsQXRQcm9j
ZXNzRXhpdCgpKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MoKQorewor
ICAgIG1fY2xpZW50LndlYlByb2Nlc3NEaWRSZWxhdW5jaCh0aGlzKTsKK30KKwordm9pZCBXZWJW
aWV3OjpwYWdlQ2xvc2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YlZpZXc6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9v
bFRpcCkKK3sKKyAgICBtX2NsaWVudC5kaWRDaGFuZ2VUb29sdGlwKHRoaXMsIG5ld1Rvb2xUaXAp
OworfQorCit2b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29ySGlk
ZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1h
bmRQcm94eT4gY29tbWFuZCwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7
CisgICAgbV91bmRvQ29udHJvbGxlci5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmQsIHVuZG9P
clJlZG8pOworfQorCit2b2lkIFdlYlZpZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKK3sKKyAg
ICBtX3VuZG9Db250cm9sbGVyLmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Cit9CisKK2Jvb2wgV2Vi
Vmlldzo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7
CisgICAgcmV0dXJuIG1fdW5kb0NvbnRyb2xsZXIuY2FuVW5kb1JlZG8odW5kb09yUmVkbyk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVk
byB1bmRvT3JSZWRvKQoreworICAgIG1fdW5kb0NvbnRyb2xsZXIuZXhlY3V0ZVVuZG9SZWRvKHVu
ZG9PclJlZG8pOworfQorCitJbnRQb2ludCBXZWJWaWV3OjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJ
bnRQb2ludCYgcG9pbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gcG9p
bnQ7Cit9CisKK0ludFJlY3QgV2ViVmlldzo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCit2
b2lkIFdlYlZpZXc6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCit2b2lkIFdlYlZpZXc6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVX
ZWJUb3VjaEV2ZW50JiwgYm9vbCAvKndhc0V2ZW50SGFuZGxlZCovKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisjZW5kaWYKKworUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gV2Vi
Vmlldzo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4
dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkq
IHBhZ2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworI2lm
IEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94
eT4gV2ViVmlldzo6Y3JlYXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmlldzo6c2V0
RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKK3sKKyAgICBpZiAoQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgp
KQorICAgICAgICBzY2VuZS0+c2V0QWN0aXZlKHRydWUpOworfQorCit2b2lkIFdlYlZpZXc6OmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCit7CisgICAgaWYgKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSkKKyAgICAgICAg
c2NlbmUtPnNldEFjdGl2ZShmYWxzZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dXBkYXRlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZy
YW1lKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojpk
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYs
IGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK2RvdWJsZSBXZWJWaWV3OjpjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRl
cyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3Ry
aW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJl
cXVlc3QoRG93bmxvYWRQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxv
YXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNl
clJlY3QpCit7CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICBG
bG9hdFJlY3QgcmVzdWx0ID0gdXNlclJlY3Q7CisgICAgICAgIHJlc3VsdC5zY2FsZShtX3BhZ2Ut
PmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAvLyBMZWdhY3kgbW9kZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB1c2Vy
UmVjdDsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBG
bG9hdFJlY3QmIGRldmljZVJlY3QpCit7CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQo
KSkgeworICAgICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gZGV2aWNlUmVjdDsKKyAgICAgICAgcmVz
dWx0LnNjYWxlKDEgLyBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAvLyBMZWdhY3kgbW9kZS4KKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBkZXZpY2VSZWN0OworfQorCit2b2lkIFdlYlZpZXc6OmRpZENoYW5n
ZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0
dHIpCit7CisgICAgbV9jbGllbnQuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRoaXMsIGF0
dHIpOworfQorCit2b2lkIFdlYlZpZXc6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbikKK3sKKyAgICBGbG9hdFBvaW50IHVpUG9zaXRpb24ocG9zaXRpb24pOwor
ICAgIHVpUG9zaXRpb24uc2NhbGUoY29udGVudFNjYWxlRmFjdG9yKCksIGNvbnRlbnRTY2FsZUZh
Y3RvcigpKTsKKyAgICBzZXRDb250ZW50UG9zaXRpb24odWlQb3NpdGlvbik7CisKKyAgICBtX2Ns
aWVudC5kaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQoreworICAgIG1fY2xp
ZW50LmRpZFJlbmRlckZyYW1lKHRoaXMsIGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOworfQor
Cit2b2lkIFdlYlZpZXc6OnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpCit7CisgICAgbV9j
bGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbih0aGlzKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZp
ZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQxNzg5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViVmlldy5oCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlZpZXdfaAorI2RlZmluZSBXZWJWaWV3X2gKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkRlZmF1bHRV
bmRvQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJD
b250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3Jv
dXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNl
cy5oIgorI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5z
Zm9ybWF0aW9uTWF0cml4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlZp
ZXcgOiBwdWJsaWMgVHlwZWRBUElPYmplY3Q8QVBJT2JqZWN0OjpUeXBlVmlldz4sIHB1YmxpYyBQ
YWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJWaWV3PiBjcmVhdGUoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCop
OworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICB2b2lkIHNldFNpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOworICAgIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3QgeyByZXR1
cm4gbV9mb2N1c2VkOyB9CisgICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpOworCisgICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KKyAgICB2b2lkIHNldFZpc2li
bGUoYm9vbCk7CisKKyAgICB2b2lkIHNldENvbnRlbnRTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikgeyBtX2NvbnRlbnRTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOyB9CisgICAgZmxvYXQg
Y29udGVudFNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50U2NhbGVGYWN0b3I7
IH0KKworICAgIHZvaWQgc2V0Q29udGVudFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHBvc2l0aW9uKSB7IG1fY29udGVudFBvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBjb250ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRQb3NpdGlvbjsgfQorCisgICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlv
bihkb3VibGUgdHgsIGRvdWJsZSB0eSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgdXNlclZpZXdw
b3J0VG9Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworCisgICAgdm9p
ZCBwYWludFRvQ3VycmVudEdMQ29udGV4dCgpOworICAgIHZvaWQgcGFpbnRUb0NhaXJvU3VyZmFj
ZShjYWlyb19zdXJmYWNlX3QqKTsKKworICAgIFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3QgeyBy
ZXR1cm4gdG9BUEkobV9wYWdlLmdldCgpKTsgfQorCisgICAgdm9pZCBzZXREcmF3c0JhY2tncm91
bmQoYm9vbCk7CisgICAgYm9vbCBkcmF3c0JhY2tncm91bmQoKSBjb25zdDsKKyAgICB2b2lkIHNl
dERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wpOworICAgIGJvb2wgZHJhd3NUcmFuc3Bh
cmVudEJhY2tncm91bmQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VGhlbWVQYXRoKGNvbnN0IFN0
cmluZyYpOworCisgICAgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KTsKKyAgICB2b2lkIHJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisKKyAg
ICB2b2lkIHNldFNob3dzQXNTb3VyY2UoYm9vbCk7CisgICAgYm9vbCBzaG93c0FzU291cmNlKCkg
Y29uc3Q7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdm9pZCBleGl0RnVsbFNj
cmVlbigpOworI2VuZGlmCisKKyAgICAvLyBWaWV3IGNsaWVudC4KKyAgICB2b2lkIGluaXRpYWxp
emVDbGllbnQoY29uc3QgV0tWaWV3Q2xpZW50Kik7CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2Uo
KSB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7IH0KKworICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNT
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgYmVj
b21lIHByaXZhdGUgd2hlbiBXZWIgRXZlbnRzIGNyZWF0aW9uIGlzIG1vdmVkIHRvIFdlYlZpZXcu
CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0
OworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3Q7
CisKK3Byb3RlY3RlZDoKKyAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsK
KyAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSgpOworCisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICBXZWJDb3Jl
OjpGbG9hdFNpemUgZGlwU2l6ZSgpIGNvbnN0OworICAgIC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlW
aWV3KCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsVmlldygpIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFZpZXcoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCBib29sIGlzVmlld1dpbmRvd0FjdGl2ZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBpc1ZpZXdGb2N1c2VkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzVmlld1Zp
c2libGUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3coKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHBhZ2VDbG9zZWQoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCB0b29sVGlw
Q2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgdm9pZCBwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRS
ZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZVRyYW5zaXRpb25WaWV3cG9ydFJl
YWR5KCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNv
cmU6OkN1cnNvciYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXMoYm9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1Jl
ZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbykgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBj
b252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQ
b2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dElucHV0
U3RhdGUoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVl
c3QoRG93bmxvYWRQcm94eSopIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRo
S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wpIE9WRVJSSURFOwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hF
dmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIE9W
RVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJv
eHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVBy
b3h5KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gY3JlYXRlQ29s
b3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRp
YWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworI2VuZGlmCisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+
LCBib29sLCBib29sKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0
IExheWVyVHJlZUNvbnRleHQmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21t
aXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNv
bnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZG91
YmxlIGN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgdm9pZCBmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZpbmRT
dHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1
bnNpZ25lZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0lu
Q3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVk
KSBPVkVSUklERTsKKworcHJvdGVjdGVkOgorICAgIFdlYlZpZXdDbGllbnQgbV9jbGllbnQ7Cisg
ICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdlOworICAgIERlZmF1bHRVbmRvQ29udHJvbGxl
ciBtX3VuZG9Db250cm9sbGVyOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
dXNlclZpZXdwb3J0VHJhbnNmb3JtOworICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOyAvLyBT
aXplIGluIGRldmljZSB1bml0cy4KKyAgICBib29sIG1fZm9jdXNlZDsKKyAgICBib29sIG1fdmlz
aWJsZTsKKyAgICBmbG9hdCBtX2NvbnRlbnRTY2FsZUZhY3RvcjsKKyAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IG1fY29udGVudFBvc2l0aW9uOyAvLyBQb3NpdGlvbiBpbiBVSSB1bml0cy4KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorCisjZW5kaWYgLy8gV2ViVmlld19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzQzNWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3
Q2xpZW50LmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVk
ZSAiV2ViVmlld0NsaWVudC5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAi
V0tCYXNlLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJWaWV3cG9y
dEF0dHJpYnV0ZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit2b2lkIFdlYlZpZXdDbGllbnQ6OnZpZXdOZWVkc0Rpc3BsYXkoV2ViVmlldyog
dmlldywgY29uc3QgSW50UmVjdCYgYXJlYSkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnZpZXdOZWVk
c0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LnZpZXdOZWVkc0Rpc3Bs
YXkodG9BUEkodmlldyksIHRvQVBJKGFyZWEpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwor
dm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRDaGFuZ2VDb250ZW50c1NpemUoV2ViVmlldyogdmlldywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZUNvbnRl
bnRzU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVu
dHNTaXplKHRvQVBJKHZpZXcpLCB0b0FQSShzaXplKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9
CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6d2ViUHJvY2Vzc0NyYXNoZWQoV2ViVmlldyogdmlldywg
Y29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKCFtX2NsaWVudC53ZWJQcm9jZXNzQ3Jhc2hl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQodG9B
UEkodmlldyksIGFkb3B0V0sodG9Db3BpZWRVUkxBUEkodXJsKSkuZ2V0KCksIG1fY2xpZW50LmNs
aWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnQ6OndlYlByb2Nlc3NEaWRSZWxhdW5j
aChXZWJWaWV3KiB2aWV3KQoreworICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1
bmNoKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC53ZWJQcm9jZXNzRGlkUmVsYXVu
Y2godG9BUEkodmlldyksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdD
bGllbnQ6OmRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24oV2ViVmlldyogdmlldywgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50KQoreworICAgIGlmICghbV9jbGllbnQuZGlkQ2hhbmdlQ29u
dGVudHNQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkQ2hhbmdl
Q29udGVudHNQb3NpdGlvbih0b0FQSSh2aWV3KSwgdG9BUEkocG9pbnQpLCBtX2NsaWVudC5jbGll
bnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRSZW5kZXJGcmFtZShXZWJWaWV3
KiB2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjb3ZlcmVkUmVjdCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZFJlbmRlckZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSh0b0FQSSh2aWV3
KSwgdG9BUEkoc2l6ZSksIHRvQVBJKGNvdmVyZWRSZWN0KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7
Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbihXZWJW
aWV3KiB2aWV3KQoreworICAgIGlmICghbV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNp
dGlvbih0b0FQSSh2aWV3KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmll
d0NsaWVudDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYlZpZXcqIHZpZXcsIGNvbnN0
IFZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cmlidXRlcykKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRp
ZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tSZXRh
aW5QdHI8V0tWaWV3cG9ydEF0dHJpYnV0ZXNSZWY+IHdrQXR0cmlidXRlcyA9IGFkb3B0V0sodG9B
UEkoV2ViVmlld3BvcnRBdHRyaWJ1dGVzOjpjcmVhdGUoYXR0cmlidXRlcykubGVha1JlZigpKSk7
CisgICAgbV9jbGllbnQuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRvQVBJKHZpZXcpLCB3
a0F0dHJpYnV0ZXMuZ2V0KCksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZp
ZXdDbGllbnQ6OmRpZENoYW5nZVRvb2x0aXAoV2ViVmlldyogdmlldywgY29uc3QgU3RyaW5nJiB0
b29sdGlwKQoreworICAgIGlmICghbV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCh0b0FQSSh2aWV3KSwgYWRv
cHRXSyh0b0NvcGllZEFQSSh0b29sdGlwKSkuZ2V0KCksIG1fY2xpZW50LmNsaWVudEluZm8pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40NGJmNGRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld0NsaWVudF9oCisjZGVmaW5l
IFdlYlZpZXdDbGllbnRfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5j
bHVkZSAiQVBJQ2xpZW50LmgiCisjaW5jbHVkZSAiV0tWaWV3LmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFBvaW50Owor
Y2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBWaWV3cG9ydEF0dHJpYnV0ZXM7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJWaWV3OworCitjbGFzcyBXZWJW
aWV3Q2xpZW50OiBwdWJsaWMgQVBJQ2xpZW50PFdLVmlld0NsaWVudCwga1dLVmlld0NsaWVudEN1
cnJlbnRWZXJzaW9uPiB7CitwdWJsaWM6CisgICAgdm9pZCB2aWV3TmVlZHNEaXNwbGF5KFdlYlZp
ZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50
c1NpemUoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIHdlYlBy
b2Nlc3NDcmFzaGVkKFdlYlZpZXcqLCBjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCB3ZWJQ
cm9jZXNzRGlkUmVsYXVuY2goV2ViVmlldyopOworICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNQ
b3NpdGlvbihXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGRp
ZFJlbmRlckZyYW1lKFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbihXZWJW
aWV3Kik7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViVmlldyosIGNv
bnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOworICAgIHZvaWQgZGlkQ2hhbmdlVG9v
bHRpcChXZWJWaWV3KiwgY29uc3QgU3RyaW5nJiB0b29sdGlwKTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5k
aWYgLy8gV2ViVmlld0NsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlMjZhZS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3Vu
ZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS5oIgotI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlckVmbC5oIgotI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiRXdrVmlldy5oIgotI2lu
Y2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0TWVudVBy
b3h5RWZsLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUG9wdXBN
ZW51TGlzdGVuZXJFZmwuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
Ci0jaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgotI2VuZGlmCi0KLXVzaW5n
IG5hbWVzcGFjZSBFd2tWaWV3Q2FsbGJhY2tzOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRl
eHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQotICAgIDogbV9ld2tWaWV3KDApCi0gICAgLCBt
X3BhZ2UoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCBwYWdlR3JvdXApKQotICAgICwgbV9m
b2N1c2VkKGZhbHNlKQotICAgICwgbV92aXNpYmxlKGZhbHNlKQotICAgICwgbV9jb250ZW50U2Nh
bGVGYWN0b3IoMS4wKQotewotICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCkt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwotICAgIG1fcGFnZS0+cGFn
ZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwot
Ci0gICAgY2hhciogZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgPSBnZXRlbnYoIldFQktJVF9TSE9X
X0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKTsKLSAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMg
PSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25t
ZW50LCAiMSIpOwotICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENv
bXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci0gICAgbV9wYWdlLT5w
YWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNW
aXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotfQotCi1XZWJWaWV3Ojp+V2ViVmlldygpCi17Ci0g
ICAgaWYgKG1fcGFnZS0+aXNDbG9zZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdl
LT5jbG9zZSgpOwotfQotCi1QYXNzUmVmUHRyPFdlYlZpZXc+IFdlYlZpZXc6OmNyZWF0ZShXZWJD
b250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYlZpZXcoY29udGV4dCwgcGFnZUdyb3VwKSk7Ci19Ci0KLS8vIEZJWE1F
OiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KLXZvaWQgV2ViVmlldzo6c2V0RXdrVmlldyhFd2tWaWV3
KiBld2tWaWV3KQotewotICAgIG1fZXdrVmlldyA9IGV3a1ZpZXc7Ci0KLSNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCi0gICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3
KGV3a1ZpZXctPmV2YXNPYmplY3QoKSk7Ci0jZW5kaWYKLQotfQotCi12b2lkIFdlYlZpZXc6Omlu
aXRpYWxpemUoKQotewotICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSog
c2NlbmUgPSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSkKLSAgICAgICAgc2NlbmUtPnNldEFj
dGl2ZSh0cnVlKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlZpZXc6OnNldFNpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBzaXplOwotCi0gICAgdXBkYXRl
Vmlld3BvcnRTaXplKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Rm9jdXNlZChib29sIGZvY3Vz
ZWQpCi17Ci0gICAgaWYgKG1fZm9jdXNlZCA9PSBmb2N1c2VkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2ZvY3VzZWQgPSBmb2N1c2VkOwotICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdl
KFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lz
QWN0aXZlKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsK
LSAgICBpZiAobV92aXNpYmxlID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
dmlzaWJsZSA9IHZpc2libGU7Ci0gICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFn
ZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRVc2VyVmlld3Bv
cnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJsZSB0eSkKLXsKLSAgICBtX3VzZXJWaWV3cG9y
dFRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKHR4LCB0eSk7Ci19
Ci0KLUludFBvaW50IFdlYlZpZXc6OnVzZXJWaWV3cG9ydFRvQ29udGVudHMoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAotewotICAgIHJldHVybiBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybS5t
YXBQb2ludChwb2ludCk7Ci19Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lk
IFdlYlZpZXc6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKLXsKLSAgICBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIHNjZW5lID0gY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci0gICAgaWYg
KCFzY2VuZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2xl
YW4gdXAgdGhpcyBjb2RlIGFzIGl0IGlzIHNwbGl0IG92ZXIgQ29vcmRHZnggYW5kIFBhZ2UuCi0g
ICAgc2NlbmUtPnNldERyYXdzQmFja2dyb3VuZChtX3BhZ2UtPmRyYXdzQmFja2dyb3VuZCgpKTsK
LSAgICBjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0ID0gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0u
bWFwUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkpOwotCi0gICAgc2NlbmUtPnBhaW50
VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybVRvU2NlbmUoKS50b1RyYW5zZm9ybWF0aW9uTWF0
cml4KCksIC8qIG9wYWNpdHkgKi8gMSwgdmlld3BvcnQpOwotfQotI2VuZGlmCi0KLXZvaWQgV2Vi
Vmlldzo6cGFpbnRUb0NhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSogc2NlbmUgPSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKLSAgICBpZiAoIXNjZW5lKQot
ICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBjb250ZXh0
KGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
biA9IGNvbnRlbnRQb3NpdGlvbigpOwotICAgIGRvdWJsZSBlZmZlY3RpdmVTY2FsZSA9IG1fcGFn
ZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSAqIGNvbnRlbnRTY2FsZUZhY3RvcigpOwotCi0gICAgY2Fp
cm9fbWF0cml4X3QgdHJhbnNmb3JtID0geyBlZmZlY3RpdmVTY2FsZSwgMCwgMCwgZWZmZWN0aXZl
U2NhbGUsIC0gcG9zaXRpb24ueCgpICogbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCAtIHBv
c2l0aW9uLnkoKSAqIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSB9OwotICAgIGNhaXJvX3Nl
dF9tYXRyaXgoY29udGV4dC5jcigpLCAmdHJhbnNmb3JtKTsKLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0gICAgc2NlbmUtPnBhaW50VG9HcmFwaGljc0NvbnRleHQoJmNvbnRleHQpOwot
I2VuZGlmCi19Ci0KLUV2YXNfT2JqZWN0KiBXZWJWaWV3OjpldmFzT2JqZWN0KCkKLXsKLSAgICBy
ZXR1cm4gbV9ld2tWaWV3LT5ldmFzT2JqZWN0KCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0VGhl
bWVQYXRoKGNvbnN0IFN0cmluZyYgdGhlbWUpCi17Ci0gICAgbV9wYWdlLT5zZXRUaGVtZVBhdGgo
dGhlbWUpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldERyYXdzQmFja2dyb3VuZChib29sIGRyYXdz
QmFja2dyb3VuZCkKLXsKLSAgICBtX3BhZ2UtPnNldERyYXdzQmFja2dyb3VuZChkcmF3c0JhY2tn
cm91bmQpOwotfQotCi1ib29sIFdlYlZpZXc6OmRyYXdzQmFja2dyb3VuZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6
c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0cmFuc3BhcmVudEJhY2tncm91bmQp
Ci17Ci0gICAgbV9wYWdlLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCh0cmFuc3BhcmVu
dEJhY2tncm91bmQpOwotfQotCi1ib29sIFdlYlZpZXc6OmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dy
b3VuZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucygpCi17Ci0gICAgbV9wYWdlLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucygpCi17Ci0gICAgbV9wYWdlLT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFNob3dzQXNTb3VyY2UoYm9vbCBzaG93c0Fz
U291cmNlKQotewotICAgIG1fcGFnZS0+c2V0TWFpbkZyYW1lSW5WaWV3U291cmNlTW9kZShzaG93
c0FzU291cmNlKTsKLX0KLQotYm9vbCBXZWJWaWV3OjpzaG93c0FzU291cmNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWVJblZpZXdTb3VyY2VNb2RlKCk7Ci19Ci0KLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi12b2lkIFdlYlZpZXc6OmV4aXRGdWxsU2NyZWVuKCkK
LXsKLSAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnJlcXVlc3RFeGl0RnVsbFNjcmVl
bigpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBX
S1ZpZXdDbGllbnQqIGNsaWVudCkKLXsKLSAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpCi17Ci0gICAgbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNTaXplKHRo
aXMsIHNpemUpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gV2ViVmlldzo6dHJhbnNmb3JtRnJvbVNj
ZW5lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJhbnNmb3JtVG9TY2VuZSgpLmludmVyc2UoKTsK
LX0KLQotQWZmaW5lVHJhbnNmb3JtIFdlYlZpZXc6OnRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdAot
ewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IG1fdXNlclZpZXdwb3J0VHJh
bnNmb3JtOwotCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24gPSBjb250ZW50UG9zaXRp
b24oKTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUobV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
LSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1wb3NpdGlvbi54KCksIC1wb3NpdGlvbi55KCkpOwot
ICAgIHRyYW5zZm9ybS5zY2FsZShjb250ZW50U2NhbGVGYWN0b3IoKSk7Ci0KLSAgICByZXR1cm4g
dHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3JtKCk7Ci19Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi1Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIFdlYlZpZXc6OmNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSgpCi17Ci0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBt
X3BhZ2UtPmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXll
clRyZWVIb3N0UHJveHkgPSBkcmF3aW5nQXJlYS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkoKTsKLSAgICBpZiAoIWxheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gbGF5ZXJUcmVlSG9zdFByb3h5LT5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUo
KTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlZpZXc6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCi17Ci0g
ICAgaWYgKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gcGFnZSgpLT5kcmF3aW5nQXJl
YSgpKSB7Ci0gICAgICAgIC8vIFdlYiBQcm9jZXNzIGV4cGVjdHMgc2l6ZXMgaW4gVUkgdW5pdHMs
IGFuZCBub3QgcmF3IGRldmljZSB1bml0cy4KLSAgICAgICAgZHJhd2luZ0FyZWEtPnNldFNpemUo
cm91bmRlZEludFNpemUoZGlwU2l6ZSgpKSwgSW50U2l6ZSgpLCBJbnRTaXplKCkpOwotICAgICAg
ICBkcmF3aW5nQXJlYS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChGbG9hdFJlY3QoY29udGVudFBv
c2l0aW9uKCksIGRpcFNpemUoKSksIEZsb2F0UG9pbnQoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUg
V2ViQ29yZTo6RmxvYXRTaXplIFdlYlZpZXc6OmRpcFNpemUoKSBjb25zdAotewotICAgIEZsb2F0
U2l6ZSBkaXBTaXplKHNpemUoKSk7Ci0gICAgZGlwU2l6ZS5zY2FsZSgxIC8gbV9wYWdlLT5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKLQotICAgIHJldHVybiBkaXBTaXplOwotfQotCi0vLyBQYWdlIENs
aWVudAotCi1QYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IFdlYlZpZXc6OmNyZWF0ZURyYXdp
bmdBcmVhUHJveHkoKQotewotICAgIE93blB0cjxEcmF3aW5nQXJlYVByb3h5PiBkcmF3aW5nQXJl
YSA9IERyYXdpbmdBcmVhUHJveHlJbXBsOjpjcmVhdGUocGFnZSgpKTsKLSAgICByZXR1cm4gZHJh
d2luZ0FyZWEucmVsZWFzZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFZpZXdOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgYXJlYSkKLXsKLSAgICBtX2NsaWVudC52aWV3TmVl
ZHNEaXNwbGF5KHRoaXMsIGFyZWEpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpc3BsYXlWaWV3KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNjcm9sbFZpZXco
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpCi17Ci0gICAgc2V0Vmlld05lZWRzRGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotV2ViQ29y
ZTo6SW50U2l6ZSBXZWJWaWV3Ojp2aWV3U2l6ZSgpCi17Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRT
aXplKGRpcFNpemUoKSk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdl
YlZpZXc6OmlzVmlld0ZvY3VzZWQoKQotewotICAgIHJldHVybiBpc0ZvY3VzZWQoKTsKLX0KLQot
Ym9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkKLXsKLSAgICByZXR1cm4gaXNWaXNpYmxlKCk7
Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3SW5XaW5kb3coKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZENy
YXNoKCkKLXsKLSAgICBtX2NsaWVudC53ZWJQcm9jZXNzQ3Jhc2hlZCh0aGlzLCBtX3BhZ2UtPnVy
bEF0UHJvY2Vzc0V4aXQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkUmVsYXVuY2hQcm9jZXNz
KCkKLXsKLSAgICBtX2NsaWVudC53ZWJQcm9jZXNzRGlkUmVsYXVuY2godGhpcyk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJWaWV3Ojp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG5ld1Rvb2xUaXApCi17Ci0gICAgbV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCh0aGlzLCBuZXdU
b29sVGlwKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJz
b3IpCi17Ci0gICAgbV9ld2tWaWV3LT5zZXRDdXJzb3IoY3Vyc29yKTsKLX0KLQotdm9pZCBXZWJW
aWV3OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1Jl
ZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kLCBXZWJQYWdlUHJveHk6OlVuZG9PclJl
ZG8gdW5kb09yUmVkbykKLXsKLSAgICBtX3VuZG9Db250cm9sbGVyLnJlZ2lzdGVyRWRpdENvbW1h
bmQoY29tbWFuZCwgdW5kb09yUmVkbyk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0
Q29tbWFuZHMoKQotewotICAgIG1fdW5kb0NvbnRyb2xsZXIuY2xlYXJBbGxFZGl0Q29tbWFuZHMo
KTsKLX0KLQotYm9vbCBXZWJWaWV3OjpjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJl
ZG8gdW5kb09yUmVkbykKLXsKLSAgICByZXR1cm4gbV91bmRvQ29udHJvbGxlci5jYW5VbmRvUmVk
byh1bmRvT3JSZWRvKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpleGVjdXRlVW5kb1JlZG8oV2ViUGFn
ZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCi17Ci0gICAgbV91bmRvQ29udHJvbGxlci5l
eGVjdXRlVW5kb1JlZG8odW5kb09yUmVkbyk7Ci19Ci0KLUludFBvaW50IFdlYlZpZXc6OnNjcmVl
blRvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBwb2ludDsKLX0KLQotSW50UmVjdCBXZWJWaWV3Ojp3aW5kb3dUb1NjcmVl
bihjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJ
bnRSZWN0KCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLXZvaWQgV2ViVmlldzo6ZG9uZVdpdGhUb3VjaEV2
ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29sIC8qd2FzRXZlbnRIYW5kbGVkKi8p
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPFdlYlBv
cHVwTWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkq
IHBhZ2UpCi17Ci0gICAgcmV0dXJuIFdlYlBvcHVwTWVudUxpc3RlbmVyRWZsOjpjcmVhdGUocGFn
ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRl
Q29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIFdlYkNv
bnRleHRNZW51UHJveHlFZmw6OmNyZWF0ZShtX2V3a1ZpZXcsIHBhZ2UpOwotfQotCi0jaWYgRU5B
QkxFKElOUFVUX1RZUEVfQ09MT1IpCi1QYXNzUmVmUHRyPFdlYkNvbG9yQ2hvb3NlclByb3h5PiBX
ZWJWaWV3OjpjcmVhdGVDb2xvckNob29zZXJQcm94eShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWV3OjpzZXRGaW5k
SW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZv
aWQgV2ViVmlldzo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRy
ZWVDb250ZXh0JikKLXsKLSAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9
IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpKQotICAgICAgICBzY2VuZS0+c2V0QWN0aXZlKHRy
dWUpOwotfQotCi12b2lkIFdlYlZpZXc6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
Ci17Ci0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUoKSkKLSAgICAgICAgc2NlbmUtPnNldEFjdGl2ZShmYWxzZSk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBXZWJWaWV3Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShj
b25zdCBMYXllclRyZWVDb250ZXh0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9y
Q3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgQ29yZUlQQzo6RGF0YVJl
ZmVyZW5jZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotZG91YmxlIFdlYlZpZXc6
OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRDdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3IoZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpmaW5kU3Ry
aW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5z
aWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpjb3Vu
dFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRP
cHRpb25zLCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
YlZpZXc6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKLXsKLSAgICBJbnB1dE1ldGhvZENvbnRleHRF
ZmwqIGlucHV0TWV0aG9kQ29udGV4dCA9IG1fZXdrVmlldy0+aW5wdXRNZXRob2RDb250ZXh0KCk7
Ci0gICAgaWYgKGlucHV0TWV0aG9kQ29udGV4dCkKLSAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0
LT51cGRhdGVUZXh0SW5wdXRTdGF0ZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OmhhbmRsZURvd25s
b2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKLXsKLSAgICBFd2tDb250ZXh0KiBj
b250ZXh0ID0gbV9ld2tWaWV3LT5ld2tDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+ZG93bmxvYWRN
YW5hZ2VyKCktPnJlZ2lzdGVyRG93bmxvYWRKb2IodG9BUEkoZG93bmxvYWQpLCBtX2V3a1ZpZXcp
OwotfQotCi1GbG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxv
YXRSZWN0JiB1c2VyUmVjdCkKLXsKLSAgICBpZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCByZXN1bHQgPSB1c2VyUmVjdDsKLSAgICAgICAgcmVzdWx0LnNj
YWxlKG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIC8vIExlZ2FjeSBtb2RlLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHVzZXJSZWN0OwotfQotCi1GbG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNw
YWNlKGNvbnN0IEZsb2F0UmVjdCYgZGV2aWNlUmVjdCkKLXsKLSAgICBpZiAobV9wYWdlLT51c2VG
aXhlZExheW91dCgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZXN1bHQgPSBkZXZpY2VSZWN0Owot
ICAgICAgICByZXN1bHQuc2NhbGUoMSAvIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIC8vIExlZ2FjeSBtb2RlLgotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGRldmljZVJlY3Q7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0
cmlidXRlcyYgYXR0cikKLXsKLSAgICBtX2NsaWVudC5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0
ZXModGhpcywgYXR0cik7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cGFnZURpZFJlcXVlc3RTY3JvbGwo
Y29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIEZsb2F0UG9pbnQgdWlQb3NpdGlvbihw
b3NpdGlvbik7Ci0gICAgdWlQb3NpdGlvbi5zY2FsZShjb250ZW50U2NhbGVGYWN0b3IoKSwgY29u
dGVudFNjYWxlRmFjdG9yKCkpOwotICAgIHNldENvbnRlbnRQb3NpdGlvbih1aVBvc2l0aW9uKTsK
LQotICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24odGhpcywgcG9zaXRpb24p
OwotfQotCi12b2lkIFdlYlZpZXc6OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCi17
Ci0gICAgbV9jbGllbnQuZGlkUmVuZGVyRnJhbWUodGhpcywgY29udGVudHNTaXplLCBjb3ZlcmVk
UmVjdCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkK
LXsKLSAgICBtX2NsaWVudC5kaWRDb21wbGV0ZVBhZ2VUcmFuc2l0aW9uKHRoaXMpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MzdlNmQuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwy
MDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0
cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJWaWV3X2gK
LSNkZWZpbmUgV2ViVmlld19oCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJE
ZWZhdWx0VW5kb0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgotCi1jbGFzcyBFd2tWaWV3OwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJWaWV3IDogcHVibGljIFR5cGVkQVBJT2JqZWN0PEFQSU9i
amVjdDo6VHlwZVZpZXc+LCBwdWJsaWMgUGFnZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2ViVmlldygpOwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlldz4gY3JlYXRlKFdl
YkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKLQotICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBw
b3NzaWJsZS4KLSAgICB2b2lkIHNldEV3a1ZpZXcoRXdrVmlldyopOwotCi0gICAgdm9pZCBpbml0
aWFsaXplKCk7Ci0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwot
ICAgIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KLQotICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9mb2N1c2VkOyB9Ci0g
ICAgdm9pZCBzZXRGb2N1c2VkKGJvb2wpOwotCi0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX3Zpc2libGU7IH0KLSAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7Ci0KLSAgICB2
b2lkIHNldENvbnRlbnRTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikgeyBtX2NvbnRlbnRT
Y2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOyB9Ci0gICAgZmxvYXQgY29udGVudFNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50U2NhbGVGYWN0b3I7IH0KLQotICAgIHZvaWQgc2V0
Q29udGVudFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1f
Y29udGVudFBvc2l0aW9uID0gcG9zaXRpb247IH0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBjb250ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRQb3NpdGlvbjsg
fQotCi0gICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJs
ZSB0eSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgdXNlclZpZXdwb3J0VG9Db250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotCi0gICAgdm9pZCBwYWludFRvQ3VycmVudEdM
Q29udGV4dCgpOwotICAgIHZvaWQgcGFpbnRUb0NhaXJvU3VyZmFjZShjYWlyb19zdXJmYWNlX3Qq
KTsKLQotICAgIFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV9wYWdl
LmdldCgpKTsgfQotCi0gICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCk7Ci0gICAgYm9v
bCBkcmF3c0JhY2tncm91bmQoKSBjb25zdDsKLSAgICB2b2lkIHNldERyYXdzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kKGJvb2wpOwotICAgIGJvb2wgZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSBj
b25zdDsKLQotICAgIHZvaWQgc2V0VGhlbWVQYXRoKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9p
ZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlc3Vt
ZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0KLSAgICB2b2lkIHNldFNob3dzQXNT
b3VyY2UoYm9vbCk7Ci0gICAgYm9vbCBzaG93c0FzU291cmNlKCkgY29uc3Q7Ci0KLSNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdm9pZCBleGl0RnVsbFNjcmVlbigpOwotI2VuZGlmCi0K
LSAgICAvLyBWaWV3IGNsaWVudC4KLSAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tW
aWV3Q2xpZW50Kik7Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCi0gICAg
RXZhc19PYmplY3QqIGV2YXNPYmplY3QoKTsKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJl
dHVybiBtX3BhZ2UuZ2V0KCk7IH0KLQotICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgYmVjb21lIHBy
aXZhdGUgd2hlbiBXZWIgRXZlbnRzIGNyZWF0aW9uIGlzIG1vdmVkIHRvIFdlYlZpZXcuCi0gICAg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0OwotICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7Ci0gICAgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUo
KTsKLQotICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7Ci0gICAgV2ViQ29yZTo6RmxvYXRT
aXplIGRpcFNpemUoKSBjb25zdDsKLSAgICAvLyBQYWdlQ2xpZW50Ci0gICAgUGFzc093blB0cjxE
cmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkgT1ZFUlJJREU7Ci0KLSAg
ICB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJS
SURFOwotCi0gICAgdm9pZCBkaXNwbGF5VmlldygpIE9WRVJSSURFOwotCi0gICAgYm9vbCBjYW5T
Y3JvbGxWaWV3KCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNjcm9sbFZp
ZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBPVkVS
UklERTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBPVkVSUklERTsKLQotICAg
IGJvb2wgaXNWaWV3V2luZG93QWN0aXZlKCkgT1ZFUlJJREU7Ci0gICAgYm9vbCBpc1ZpZXdGb2N1
c2VkKCkgT1ZFUlJJREU7Ci0gICAgYm9vbCBpc1ZpZXdWaXNpYmxlKCkgT1ZFUlJJREU7Ci0gICAg
Ym9vbCBpc1ZpZXdJbldpbmRvdygpIE9WRVJSSURFOwotCi0gICAgdm9pZCBwcm9jZXNzRGlkQ3Jh
c2goKSBPVkVSUklERTsKLSAgICB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpIE9WRVJSSURFOwot
ICAgIHZvaWQgcGFnZUNsb3NlZCgpIE9WRVJSSURFOwotCi0gICAgdm9pZCB0b29sVGlwQ2hhbmdl
ZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLQotICAgIHZvaWQgcGFn
ZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKLSAg
ICB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpIE9WRVJSSURFOwotICAgIHZv
aWQgcGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIHNl
dEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSBPVkVSUklERTsKLSAgICB2b2lkIHNldEN1
cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBPVkVSUklERTsKLQotICAgIHZvaWQgZGlk
Q2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyYpIE9WRVJSSURFOwotCi0gICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8
V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7
Ci0gICAgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpIE9WRVJSSURFOwotICAgIGJvb2wgY2Fu
VW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVSUklERTsKLSAgICB2b2lkIGV4
ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIE9WRVJSSURFOwotCi0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIE9WRVJSSURFOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2Vy
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklE
RTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBPVkVSUklERTsKLQotICAgIHZvaWQgdXBkYXRlVGV4dElucHV0U3RhdGUoKSBPVkVS
UklERTsKLQotICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBP
VkVSUklERTsKLQotICAgIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiwgYm9vbCkgT1ZFUlJJREU7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAg
ICB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpIE9WRVJSSURFOwotI2VuZGlmCi0KLSAgICBQYXNzUmVmUHRyPFdl
YlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVS
UklERTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRN
ZW51UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJREU7Ci0jaWYgRU5BQkxFKElOUFVUX1RZUEVf
Q09MT1IpCi0gICAgUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gY3JlYXRlQ29sb3JD
aG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxD
b2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOwotI2VuZGlmCi0KLSAgICB2
b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCwgYm9v
bCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIE9WRVJSSURFOwotICAgIHZvaWQgZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCkgT1ZFUlJJREU7Ci0gICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikgT1ZFUlJJREU7Ci0KLSAg
ICB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCkgT1ZFUlJJREU7Ci0gICAgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKSBPVkVSUklERTsKLQotICAgIGRvdWJs
ZSBjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKSBPVkVSUklERTsKLSAgICB2b2lkIHNl
dEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpIE9WRVJSSURFOwotCi0gICAg
dm9pZCBmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJl
Y3Q+JikgT1ZFUlJJREU7Ci0gICAgdm9pZCBmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpIE9WRVJSSURFOwotICAgIHZv
aWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucywgdW5zaWduZWQpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIFdlYlZp
ZXdDbGllbnQgbV9jbGllbnQ7Ci0gICAgRXdrVmlldyogbV9ld2tWaWV3OwotICAgIFJlZlB0cjxX
ZWJQYWdlUHJveHk+IG1fcGFnZTsKLSAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29u
dHJvbGxlcjsKLSAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3VzZXJWaWV3cG9y
dFRyYW5zZm9ybTsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsgLy8gU2l6ZSBpbiBkZXZp
Y2UgdW5pdHMuCi0gICAgYm9vbCBtX2ZvY3VzZWQ7Ci0gICAgYm9vbCBtX3Zpc2libGU7Ci0gICAg
ZmxvYXQgbV9jb250ZW50U2NhbGVGYWN0b3I7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2Nv
bnRlbnRQb3NpdGlvbjsgLy8gUG9zaXRpb24gaW4gVUkgdW5pdHMuCi19OwotCi19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZDFkYzUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgIldlYlZpZXdwb3J0QXR0cmli
dXRlcy5oIgotCi0jaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0j
aW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlZpZXdDbGllbnQ6OnZpZXdOZWVkc0Rpc3BsYXko
V2ViVmlldyogdmlldywgY29uc3QgSW50UmVjdCYgYXJlYSkKLXsKLSAgICBpZiAoIW1fY2xpZW50
LnZpZXdOZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LnZpZXdO
ZWVkc0Rpc3BsYXkodG9BUEkodmlldyksIHRvQVBJKGFyZWEpLCBtX2NsaWVudC5jbGllbnRJbmZv
KTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRDaGFuZ2VDb250ZW50c1NpemUoV2ViVmll
dyogdmlldywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENo
YW5nZUNvbnRlbnRzU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQuZGlkQ2hh
bmdlQ29udGVudHNTaXplKHRvQVBJKHZpZXcpLCB0b0FQSShzaXplKSwgbV9jbGllbnQuY2xpZW50
SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVmlld0NsaWVudDo6d2ViUHJvY2Vzc0NyYXNoZWQoV2ViVmll
dyogdmlldywgY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKCFtX2NsaWVudC53ZWJQcm9j
ZXNzQ3Jhc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQud2ViUHJvY2Vzc0Ny
YXNoZWQodG9BUEkodmlldyksIGFkb3B0V0sodG9Db3BpZWRVUkxBUEkodXJsKSkuZ2V0KCksIG1f
Y2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlZpZXdDbGllbnQ6OndlYlByb2Nlc3NE
aWRSZWxhdW5jaChXZWJWaWV3KiB2aWV3KQotewotICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vz
c0RpZFJlbGF1bmNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC53ZWJQcm9jZXNz
RGlkUmVsYXVuY2godG9BUEkodmlldyksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lk
IFdlYlZpZXdDbGllbnQ6OmRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24oV2ViVmlldyogdmlldywg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQotewotICAgIGlmICghbV9jbGllbnQuZGlk
Q2hhbmdlQ29udGVudHNQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQu
ZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbih0b0FQSSh2aWV3KSwgdG9BUEkocG9pbnQpLCBtX2Ns
aWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRSZW5kZXJGcmFt
ZShXZWJWaWV3KiB2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZFJlbmRl
ckZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSh0
b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSksIHRvQVBJKGNvdmVyZWRSZWN0KSwgbV9jbGllbnQuY2xp
ZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ29tcGxldGVQYWdlVHJhbnNp
dGlvbihXZWJWaWV3KiB2aWV3KQotewotICAgIGlmICghbV9jbGllbnQuZGlkQ29tcGxldGVQYWdl
VHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQuZGlkQ29tcGxldGVQ
YWdlVHJhbnNpdGlvbih0b0FQSSh2aWV3KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZv
aWQgV2ViVmlld0NsaWVudDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYlZpZXcqIHZp
ZXcsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cmlidXRlcykKLXsKLSAgICBpZiAoIW1f
Y2xpZW50LmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV0tSZXRhaW5QdHI8V0tWaWV3cG9ydEF0dHJpYnV0ZXNSZWY+IHdrQXR0cmlidXRlcyA9IGFk
b3B0V0sodG9BUEkoV2ViVmlld3BvcnRBdHRyaWJ1dGVzOjpjcmVhdGUoYXR0cmlidXRlcykubGVh
a1JlZigpKSk7Ci0gICAgbV9jbGllbnQuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRvQVBJ
KHZpZXcpLCB3a0F0dHJpYnV0ZXMuZ2V0KCksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12
b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENoYW5nZVRvb2x0aXAoV2ViVmlldyogdmlldywgY29uc3Qg
U3RyaW5nJiB0b29sdGlwKQotewotICAgIGlmICghbV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCh0b0FQSSh2
aWV3KSwgYWRvcHRXSyh0b0NvcGllZEFQSSh0b29sdGlwKSkuZ2V0KCksIG1fY2xpZW50LmNsaWVu
dEluZm8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFmMTg2ZGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJW
aWV3Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFdlYlZpZXdDbGllbnRfaAotI2RlZmluZSBXZWJWaWV3Q2xpZW50X2gK
LQotI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIldLVmlldy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRQ
b2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgVmlld3BvcnRBdHRy
aWJ1dGVzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViVmlldzsKLQotY2xh
c3MgV2ViVmlld0NsaWVudDogcHVibGljIEFQSUNsaWVudDxXS1ZpZXdDbGllbnQsIGtXS1ZpZXdD
bGllbnRDdXJyZW50VmVyc2lvbj4gewotcHVibGljOgotICAgIHZvaWQgdmlld05lZWRzRGlzcGxh
eShXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgZGlkQ2hhbmdl
Q29udGVudHNTaXplKFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9p
ZCB3ZWJQcm9jZXNzQ3Jhc2hlZChXZWJWaWV3KiwgY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZv
aWQgd2ViUHJvY2Vzc0RpZFJlbGF1bmNoKFdlYlZpZXcqKTsKLSAgICB2b2lkIGRpZENoYW5nZUNv
bnRlbnRzUG9zaXRpb24oV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAg
dm9pZCBkaWRSZW5kZXJGcmFtZShXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRp
b24oV2ViVmlldyopOwotICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYlZp
ZXcqLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKLSAgICB2b2lkIGRpZENo
YW5nZVRvb2x0aXAoV2ViVmlldyosIGNvbnN0IFN0cmluZyYgdG9vbHRpcCk7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYlZpZXdDbGllbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjkyNTM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdFZmwuaCIK
KworI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlckVmbC5oIgorI2luY2x1ZGUgIkV3a1ZpZXcuaCIK
KyNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0
TWVudVByb3h5RWZsLmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51TGlzdGVuZXJFZmwuaCIKKwor
I2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwor
dXNpbmcgbmFtZXNwYWNlIEV3a1ZpZXdDYWxsYmFja3M7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViVmlldz4gV2ViVmlldzo6
Y3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlld0VmbChjb250ZXh0LCBwYWdlR3JvdXApKTsK
K30KKworV2ViVmlld0VmbDo6V2ViVmlld0VmbChXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdl
R3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IFdlYlZpZXcoY29udGV4dCwgcGFnZUdyb3VwKQorICAg
ICwgbV9ld2tWaWV3KDApCit7Cit9CisKK3ZvaWQgV2ViVmlld0VmbDo6c2V0RXdrVmlldyhFd2tW
aWV3KiBld2tWaWV3KQoreworICAgIG1fZXdrVmlldyA9IGV3a1ZpZXc7CisKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisgICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJW
aWV3KGV3a1ZpZXctPmV2YXNPYmplY3QoKSk7CisjZW5kaWYKK30KKworUGFzc1JlZlB0cjxXZWJQ
b3B1cE1lbnVQcm94eT4gV2ViVmlld0VmbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVBy
b3h5KiBwYWdlKQoreworICAgIHJldHVybiBXZWJQb3B1cE1lbnVMaXN0ZW5lckVmbDo6Y3JlYXRl
KHBhZ2UpOworfQorCitQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFdlYlZpZXdFZmw6
OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIHJldHVy
biBXZWJDb250ZXh0TWVudVByb3h5RWZsOjpjcmVhdGUobV9ld2tWaWV3LCBwYWdlKTsKK30KKwor
dm9pZCBXZWJWaWV3RWZsOjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAg
QVNTRVJUKG1fZXdrVmlldyk7CisgICAgbV9ld2tWaWV3LT5zZXRDdXJzb3IoY3Vyc29yKTsKK30K
Kwordm9pZCBXZWJWaWV3RWZsOjp1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpCit7CisgICAgSW5wdXRN
ZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBtX2V3a1ZpZXctPmlucHV0TWV0
aG9kQ29udGV4dCgpOworICAgIGlmIChpbnB1dE1ldGhvZENvbnRleHQpCisgICAgICAgIGlucHV0
TWV0aG9kQ29udGV4dC0+dXBkYXRlVGV4dElucHV0U3RhdGUoKTsKK30KKwordm9pZCBXZWJWaWV3
RWZsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCit7Cisg
ICAgRXdrQ29udGV4dCogY29udGV4dCA9IG1fZXdrVmlldy0+ZXdrQ29udGV4dCgpOworICAgIGNv
bnRleHQtPmRvd25sb2FkTWFuYWdlcigpLT5yZWdpc3RlckRvd25sb2FkSm9iKHRvQVBJKGRvd25s
b2FkKSwgbV9ld2tWaWV3KTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDdlMGQxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViVmlld0VmbF9oCisjZGVmaW5lIFdlYlZpZXdFZmxfaAorCisjaW5j
bHVkZSAiV2ViVmlldy5oIgorCitjbGFzcyBFd2tWaWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViVmlld0VmbCA6IHB1YmxpYyBXZWJWaWV3IHsKK3B1YmxpYzoKKyAgICB2b2lk
IHNldEV3a1ZpZXcoRXdrVmlldyopOworICAgIEV3a1ZpZXcqIGV3a1ZpZXcoKSB7IHJldHVybiBt
X2V3a1ZpZXc7IH0KKworcHJpdmF0ZToKKyAgICBXZWJWaWV3RWZsKFdlYkNvbnRleHQqLCBXZWJQ
YWdlR3JvdXAqKTsKKworICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYp
IE9WRVJSSURFOworICAgIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVw
TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOworICAgIFBhc3NSZWZQdHI8V2ViQ29u
dGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVS
UklERTsKKyAgICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgT1ZFUlJJREU7CisgICAgdm9p
ZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopIE9WRVJSSURFOworCitwcml2
YXRlOgorICAgIEV3a1ZpZXcqIG1fZXdrVmlldzsKKworICAgIGZyaWVuZCBjbGFzcyBXZWJWaWV3
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJWaWV3RWZsX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkYzc3
YTU5Li41MTY4MmJjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDQtMTkgIE1pa2hhaWwgUG96ZG55YWtvdiAg
PG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAgICAgICAgW1dLMl0gTWFrZSBFRkwg
V0tWaWV3IEFQSSBzaGFyZWFibGUgYmV0d2VlbiBwb3J0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0NzM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5j
cHA6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgcHJvamVjdCBmaWxlcyBhY2NvcmRpbmdseSB0byB1
cGRhdGVkIFdLVmlldyBBUEkgZmlsZXMKKyAgICAgICAgICAgIHN0cnVjdHVyZS4KKwogMjAxMy0w
NC0xOCAgWHVlZmVpIFJlbiAgPHhyZW5AYmxhY2tiZXJyeS5jb20+CiAKICAgICAgICAgcmVtb3Zl
IGJ1aWxkIHdhcm5pbmcodW51c2VkIHBhcmFtZXRlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IGI0OGIwMDQuLjViNWM1MzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtMTEsNiArMTEsNyBAQCBhZGRfY3VzdG9tX3RhcmdldChmb3J3YXJk
aW5nLWhlYWRlcnNTb3VwRm9yVGVzdFdlYktpdEFQSQogc2V0KEZvcndhcmRpbmdOZXR3b3JrSGVh
ZGVyc0ZvclRlc3RXZWJLaXRBUElfTkFNRSBmb3J3YXJkaW5nLWhlYWRlcnNTb3VwRm9yVGVzdFdl
YktpdEFQSSkKIAogaW5jbHVkZV9kaXJlY3RvcmllcygKKyAgICAke1dFQktJVDJfRElSfS9VSVBy
b2Nlc3MvQVBJL0MvQ29vcmRpbmF0ZWRHcmFwaGljcwogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvQy9zb3VwCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2VmbAog
ICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAppbmRleCBhNGViMDdhLi4xYmY2
NTc5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZp
ZXdFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmll
d0VmbC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZUNh
aXJvLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1ZpZXdFZmwuaD4KICNpbmNsdWRlIDxjYWlyby5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198824</attachid>
            <date>2013-04-19 01:27:15 -0700</date>
            <delta_ts>2013-04-21 10:19:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug114734</filename>
            <type>text/plain</type>
            <size>101338</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGU1MTYwNjNmNjY3ZmMxZDE5MGMwNzNmN2ZhZmE3Y2E3YTkwMzM0YTMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VGh1IEFwciAxOCAxNDo0MjozNCAyMDEzICswMzAwCgogICAgYnVnMTE0NzM0CgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGNhZTlkZTIuLjMwZjg4ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjcgQEAKKzIwMTMt
MDQtMTkgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW1dLMl0gTWFrZSBFRkwgV0tWaWV3IEFQSSBzaGFyZWFibGUgYmV0d2VlbiBw
b3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0
NzM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRUZM
LWluZGVwZW5kZW50IHBhcnQgb2YgV0tWaWV3IEFQSSAoYW5kIGl0cyBpbXBsZW1lbnRhdGlvbikg
aXMgbm93CisgICAgICAgIHNoYXJlYWJsZSBiZXR3ZWVuIHBvcnRzIHRoYXQgdXNlIENvb3JkaW5h
dGVkIEdyYXBoaWNzIGFuZCBwdXQgdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljcyBmb2xk
ZXJzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcC4KKyAgICAgICAgKFdLVmll
d0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dl
dFNpemUpOgorICAgICAgICAoV0tWaWV3U2V0U2l6ZSk6CisgICAgICAgIChXS1ZpZXdTZXRWaWV3
Q2xpZW50KToKKyAgICAgICAgKFdLVmlld0lzRm9jdXNlZCk6CisgICAgICAgIChXS1ZpZXdTZXRJ
c0ZvY3VzZWQpOgorICAgICAgICAoV0tWaWV3SXNWaXNpYmxlKToKKyAgICAgICAgKFdLVmlld1Nl
dElzVmlzaWJsZSk6CisgICAgICAgIChXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IpOgorICAg
ICAgICAoV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdLVmlld0dldENv
bnRlbnRQb3NpdGlvbik6CisgICAgICAgIChXS1ZpZXdTZXRDb250ZW50UG9zaXRpb24pOgorICAg
ICAgICAoV0tWaWV3U2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24pOgorICAgICAgICAoV0tWaWV3
VXNlclZpZXdwb3J0VG9Db250ZW50cyk6CisgICAgICAgIChXS1ZpZXdQYWludFRvQ3VycmVudEdM
Q29udGV4dCk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAgICAgICAgKFdLVmlld1NldERy
YXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQpOgorICAg
ICAgICAoV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV0tW
aWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV0tWaWV3U2V0VGhl
bWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyk6CisgICAgICAgIChXS1ZpZXdTZXRTaG93c0FzU291cmNlKToKKyAgICAgICAgKFdLVmlld0dl
dFNob3dzQXNTb3VyY2UpOgorICAgICAgICAoV0tWaWV3RXhpdEZ1bGxTY3JlZW4pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V0tWaWV3UGFpbnRUb0NhaXJvU3VyZmFjZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hv
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXdFZmwuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3
OjpFd2tWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpzZXRGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFVzZXJWaWV3cG9ydFRy
YW5zbGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dXNlclZpZXdwb3J0VG9Db250
ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFpbnRUb0NhaXJvU3VyZmFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFRoZW1lUGF0aCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnNldERyYXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRy
YXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldERyYXdzVHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZHJhd3NUcmFuc3Bh
cmVudEJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpyZXN1
bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OnNldFNob3dzQXNTb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzaG93c0Fz
U291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZXhpdEZ1bGxTY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppbml0aWFsaXplQ2xpZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHJh
bnNmb3JtVG9TY2VuZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnVwZGF0ZVZpZXdwb3J0U2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpcFNpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6c2V0Vmlld05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRp
c3BsYXlWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2Nyb2xsVmlldyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnZpZXdTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6aXNWaWV3V2luZG93QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aXNWaWV3
Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmlzVmlld1Zpc2libGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdJbldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRp
ZFJlbGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VDbG9zZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0b29sVGlwQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNl
dEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnJlZ2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjbGVhckFs
bEVkaXRDb21tYW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNhblVuZG9SZWRvKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZXhlY3V0ZVVuZG9SZWRvKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c2NyZWVuVG9XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Ojp3aW5kb3dUb1NjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRvbmVXaXRoS2V5
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpkb25lV2l0aFRvdWNoRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpjcmVhdGVDb2xvckNob29zZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnNldEZpbmRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpl
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZh
Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRl
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2Vu
dGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y291bnRTdHJpbmdNYXRjaGVzSW5D
dXN0b21SZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnVwZGF0ZVRl
eHRJbnB1dFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvRGV2aWNlU3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb252ZXJ0VG9Vc2VyU3BhY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXcuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzaXplKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6aXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q29udGVu
dFNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udGVudFNjYWxlRmFj
dG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q29udGVudFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udGVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50
LmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6
OnZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpkaWRD
aGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Ojp3ZWJQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6OndlYlByb2Nl
c3NEaWRSZWxhdW5jaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6OmRpZENoYW5n
ZUNvbnRlbnRzUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpkaWRS
ZW5kZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6OmRpZENvbXBsZXRl
UGFnZVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpkaWRDaGFu
Z2VWaWV3cG9ydEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Ojpk
aWRDaGFuZ2VUb29sdGlwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XZWJWaWV3Q2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXdDbGllbnQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdFZmw6OldlYlZpZXdFZmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3RWZsOjpzZXRFd2tWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6Y3JlYXRl
UG9wdXBNZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3RWZsOjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6c2V0Q3Vyc29yKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6dXBkYXRlVGV4dElucHV0U3RhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3RWZsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJWaWV3RWZsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6ZXdr
Vmlldyk6CisKIDIwMTMtMDQtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUERGUGx1Z2luOiBVcGRhdGUgUERGTGF5ZXJDb250cm9sbGVyJ3Mgc2Nh
bGUgZmFjdG9ycyBlYXJsaWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDAxYzVmNjEu
LmI5YjJiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00NiwxMCArNDYsMTIgQEAg
bGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvY2Fpcm8v
V0tJY29uRGF0YWJhc2VDYWlyby5jcHAKIAorICAgIFVJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dLVmlldy5jcHAKKwogICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tQYWdlRWZs
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tQb3B1cEl0ZW0uY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9DL2VmbC9XS1BvcHVwTWVudUxpc3RlbmVyLmNwcAotICAgIFVJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcAog
CiAgICAgVUlQcm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5jcHAKIApAQCAt
OTQsNiArOTYsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFVJUHJvY2Vz
cy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYlZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViVmlld0NsaWVudC5jcHAKKwogICAgIFVJUHJvY2Vzcy9lZmwvQmF0dGVyeVByb3ZpZGVyLmNw
cAogICAgIFVJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCiAgICAgVUlQ
cm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVudEVmbC5jcHAKQEAgLTExMSw2ICsxMTYsNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2Vy
RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmNwcAogICAgIFVJ
UHJvY2Vzcy9lZmwvVmlld0NsaWVudEVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1dlYlZpZXdF
ZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcAogICAgIFVJUHJvY2Vz
cy9lZmwvV2ViQ29udGV4dE1lbnVQcm94eUVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCkBAIC0xMjEsOCArMTI3LDYgQEAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcmVmZXJlbmNlc0VmbC5j
cHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQcm94eUVmbC5jcHAKICAgICBVSVByb2Nl
c3MvZWZsL1dlYlVJUG9wdXBNZW51Q2xpZW50LmNwcAotICAgIFVJUHJvY2Vzcy9lZmwvV2ViVmll
dy5jcHAKLSAgICBVSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwCiAKICAgICBVSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL2VmbC9XZWJJbnNwZWN0b3JTZXJ2ZXJFZmwuY3BwCiAgICAgVUlQ
cm9jZXNzL0luc3BlY3RvclNlcnZlci9zb3VwL1dlYlNvY2tldFNlcnZlclNvdXAuY3BwCkBAIC0x
ODQsNiArMTg4LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJl
ZC9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCisgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzIgogICAg
ICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJfRElS
fS9VSVByb2Nlc3MvQVBJL0Mvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQ
SS9jcHAvZWZsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzkxYmIwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKQEAgLTAsMCAr
MSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
CisjaW5jbHVkZSAiV0tWaWV3LmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1dLVmlld1JlZiBXS1Zp
ZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZikKK3sKKyAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSh0
b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICByZXR1cm4gdG9B
UEkod2ViVmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KKwordm9pZCBXS1ZpZXdJbml0aWFs
aXplKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6
ZSgpOworfQorCitXS1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAg
ICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5zaXplKCkpOworfQorCit2b2lkIFdLVmll
d1NldFNpemUoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU2l6ZSBzaXplKQoreworICAgIHRvSW1wbCh2
aWV3UmVmKS0+c2V0U2l6ZSh0b0ludFNpemUoc2l6ZSkpOworfQorCit2b2lkIFdLVmlld1NldFZp
ZXdDbGllbnQoV0tWaWV3UmVmIHZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50KQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZUNsaWVudChjbGllbnQpOworfQorCiti
b29sIFdLVmlld0lzRm9jdXNlZChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9J
bXBsKHZpZXdSZWYpLT5pc0ZvY3VzZWQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXRJc0ZvY3VzZWQo
V0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgaXNGb2N1c2VkKQoreworICAgIHRvSW1wbCh2aWV3UmVm
KS0+c2V0Rm9jdXNlZChpc0ZvY3VzZWQpOworfQorCitib29sIFdLVmlld0lzVmlzaWJsZShXS1Zp
ZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5pc1Zpc2libGUo
KTsKK30KKwordm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wg
aXNWaXNpYmxlKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VmlzaWJsZShpc1Zpc2libGUp
OworfQorCitmbG9hdCBXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVmIHZpZXdS
ZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFNjYWxlRmFjdG9yKCk7
Cit9CisKK3ZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiB2aWV3UmVm
LCBmbG9hdCBzY2FsZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRTY2FsZUZh
Y3RvcihzY2FsZSk7Cit9CisKK1dLUG9pbnQgV0tWaWV3R2V0Q29udGVudFBvc2l0aW9uKFdLVmll
d1JlZiB2aWV3UmVmKQoreworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHJlc3VsdCA9
IHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFdLUG9pbnRN
YWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOworfQorCit2b2lkIFdLVmlld1NldENvbnRlbnRQ
b3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgV0tQb2ludCBwb3NpdGlvbikKK3sKKyAgICB0b0lt
cGwodmlld1JlZiktPnNldENvbnRlbnRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KHBvc2l0
aW9uLngsIHBvc2l0aW9uLnkpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRUcmFu
c2xhdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAg
dG9JbXBsKHZpZXdSZWYpLT5zZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbih0eCwgdHkpOworfQor
CitXS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmIHZpZXdSZWYs
IFdLUG9pbnQgcG9pbnQpCit7CisgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHJlc3VsdCA9
IHRvSW1wbCh2aWV3UmVmKS0+dXNlclZpZXdwb3J0VG9Db250ZW50cyh0b0ludFBvaW50KHBvaW50
KSk7CisgICAgcmV0dXJuIFdLUG9pbnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOworfQor
Cit2b2lkIFdLVmlld1BhaW50VG9DdXJyZW50R0xDb250ZXh0KFdLVmlld1JlZiB2aWV3UmVmKQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKK30KKwor
V0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJu
IHRvSW1wbCh2aWV3UmVmKS0+cGFnZVJlZigpOworfQorCit2b2lkIFdLVmlld1NldERyYXdzQmFj
a2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2aWV3
UmVmKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZsYWcpOworfQorCitib29sIFdLVmlld0dldERyYXdz
QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdS
ZWYpLT5kcmF3c0JhY2tncm91bmQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXREcmF3c1RyYW5zcGFy
ZW50QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1w
bCh2aWV3UmVmKS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoZmxhZyk7Cit9CisKK2Jv
b2wgV0tWaWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmIHZpZXdSZWYp
Cit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91
bmQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYsIFdL
U3RyaW5nUmVmIHRoZW1lKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRoKHRv
SW1wbCh0aGVtZSktPnN0cmluZygpKTsKK30KKwordm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZp
ZXdSZWYpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9p
ZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmll
d1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYg
dmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0U2hvd3NBc1Nv
dXJjZShmbGFnKTsKK30KKworYm9vbCBXS1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1JlZiB2
aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPnNob3dzQXNTb3VyY2UoKTsK
K30KKwordm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdG9JbXBsKHZpZXdSZWYpLT5leGl0RnVsbFNj
cmVlbigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlld1JlZik7CisjZW5kaWYKK30KKwor
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5ZDdhOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNz
L1dLVmlldy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXS1ZpZXdfaAorI2RlZmluZSBXS1ZpZXdf
aAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLR2Vv
bWV0cnkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0
eXBlZGVmIHZvaWQgKCpXS1ZpZXdDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tWaWV3Vmlld05lZWRzRGlzcGxheUNhbGxi
YWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IGFyZWEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OwordHlwZWRlZiB2b2lkICgqV0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNr
KShXS1ZpZXdSZWYgdmlldywgV0tTaXplIHNpemUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
dHlwZWRlZiB2b2lkICgqV0tWaWV3V2ViUHJvY2Vzc0NyYXNoZWRDYWxsYmFjaykoV0tWaWV3UmVm
IHZpZXcsIFdLVVJMUmVmIHVybCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZv
aWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNhbGxiYWNrKShXS1ZpZXdS
ZWYgdmlldywgV0tQb2ludCBwb3NpdGlvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkUmVuZGVyRnJhbWVDYWxsYmFjaykoV0tWaWV3UmVmIHZp
ZXcsIFdLU2l6ZSBjb250ZW50c1NpemUsIFdLUmVjdCBjb3ZlcmVkUmVjdCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlVmlld3BvcnRB
dHRyaWJ1dGVzQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1ZpZXdwb3J0QXR0cmlidXRlc1Jl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlk
Q2hhbmdlVG9vbHRpcENhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTdHJpbmdSZWYgbmV3VG9v
bHRpcCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3N0cnVjdCBXS1ZpZXdDbGllbnQgewor
ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJz
aW9uOworICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGllbnRJbmZvOworCisgICAgLy8gVmVyc2lvbiAwCisgICAgV0tWaWV3Vmlld05lZWRzRGlz
cGxheUNhbGxiYWNrICAgICAgICAgICAgICAgICAgIHZpZXdOZWVkc0Rpc3BsYXk7CisgICAgV0tW
aWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNrICAgICAgICAgIGRpZENoYW5nZUNv
bnRlbnRzU2l6ZTsKKyAgICBXS1ZpZXdXZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrICAgICAgICAg
ICAgICAgICAgd2ViUHJvY2Vzc0NyYXNoZWQ7CisgICAgV0tWaWV3Q2FsbGJhY2sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdlYlByb2Nlc3NEaWRSZWxhdW5jaDsKKyAgICBXS1Zp
ZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNhbGxiYWNrICAgICAgZGlkQ2hhbmdlQ29u
dGVudHNQb3NpdGlvbjsKKyAgICBXS1ZpZXdQYWdlRGlkUmVuZGVyRnJhbWVDYWxsYmFjayAgICAg
ICAgICAgICAgICAgZGlkUmVuZGVyRnJhbWU7CisgICAgV0tWaWV3Q2FsbGJhY2sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb247CisgICAg
V0tWaWV3UGFnZURpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlc0NhbGxiYWNrICAgIGRpZENoYW5n
ZVZpZXdwb3J0QXR0cmlidXRlczsKKyAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxi
YWNrICAgICAgICAgICAgICAgZGlkQ2hhbmdlVG9vbHRpcDsKK307Cit0eXBlZGVmIHN0cnVjdCBX
S1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OworCitlbnVtIHsga1dLVmlld0NsaWVudEN1cnJlbnRW
ZXJzaW9uID0gMCB9OworCitXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRl
eHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKKworV0tfRVhQT1JUIHZv
aWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgV0tTaXplIFdLVmll
d0dldFNpemUoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFNpemUoV0tWaWV3
UmVmLCBXS1NpemUgc2l6ZSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFZpZXdDbGllbnQo
V0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKKworV0tfRVhQT1JUIGJvb2wgV0tWaWV3
SXNGb2N1c2VkKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc0ZvY3VzZWQo
V0tWaWV3UmVmLCBib29sKTsKKworV0tfRVhQT1JUIGJvb2wgV0tWaWV3SXNWaXNpYmxlKFdLVmll
d1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmLCBib29s
KTsKKworV0tfRVhQT1JUIGZsb2F0IFdLVmlld0dldENvbnRlbnRTY2FsZUZhY3RvcihXS1ZpZXdS
ZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1Jl
ZiwgZmxvYXQpOworCitXS19FWFBPUlQgV0tQb2ludCBXS1ZpZXdHZXRDb250ZW50UG9zaXRpb24o
V0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldENvbnRlbnRQb3NpdGlvbihXS1Zp
ZXdSZWYsIFdLUG9pbnQpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRU
cmFuc2xhdGlvbihXS1ZpZXdSZWYsIGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKK1dLX0VYUE9SVCBX
S1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmLCBXS1BvaW50KTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFpbnRUb0N1cnJlbnRHTENvbnRleHQoV0tWaWV3UmVm
KTsKKworV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7CisKK1dL
X0VYUE9SVCB2b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiwgYm9v
bCk7CitXS19FWFBPUlQgYm9vbCBXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQoV0tWaWV3UmVmKTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tW
aWV3UmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdLVmlld0dldERyYXdzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kKFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tW
aWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKKworV0tf
RVhQT1JUIHZvaWQgV0tWaWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYsIGJvb2wpOworV0tf
RVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOworCitXS19FWFBP
UlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOworCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjg2NzQxMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXS1ZpZXcuaCIKLQotI2luY2x1ZGUgIkV3a1ZpZXcuaCIK
LSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgi
Ci0jaW5jbHVkZSAiZXdrX3BhZ2VfZ3JvdXBfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYktpdDIv
V0tJbWFnZUNhaXJvLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLVdLVmlld1JlZiBX
S1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKLXsKLSAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0
ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKLSAgICByZXR1cm4g
dG9BUEkod2ViVmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKLX0KLQotdm9pZCBXS1ZpZXdJbml0
aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlh
bGl6ZSgpOwotfQotCi1XS1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYgdmlld1JlZikKLXsK
LSAgICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5zaXplKCkpOwotfQotCi12b2lkIFdL
Vmlld1NldFNpemUoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU2l6ZSBzaXplKQotewotICAgIHRvSW1w
bCh2aWV3UmVmKS0+c2V0U2l6ZSh0b0ludFNpemUoc2l6ZSkpOwotfQotCi12b2lkIFdLVmlld1Nl
dFZpZXdDbGllbnQoV0tWaWV3UmVmIHZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50
KQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZUNsaWVudChjbGllbnQpOwotfQot
Ci1ib29sIFdLVmlld0lzRm9jdXNlZChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4g
dG9JbXBsKHZpZXdSZWYpLT5pc0ZvY3VzZWQoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRJc0ZvY3Vz
ZWQoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgaXNGb2N1c2VkKQotewotICAgIHRvSW1wbCh2aWV3
UmVmKS0+c2V0Rm9jdXNlZChpc0ZvY3VzZWQpOwotfQotCi1ib29sIFdLVmlld0lzVmlzaWJsZShX
S1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5pc1Zpc2li
bGUoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmIHZpZXdSZWYsIGJv
b2wgaXNWaXNpYmxlKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VmlzaWJsZShpc1Zpc2li
bGUpOwotfQotCi1mbG9hdCBXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVmIHZp
ZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFNjYWxlRmFjdG9y
KCk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiB2aWV3
UmVmLCBmbG9hdCBzY2FsZSkKLXsKLSAgICB0b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRTY2Fs
ZUZhY3RvcihzY2FsZSk7Ci19Ci0KLVdLUG9pbnQgV0tWaWV3R2V0Q29udGVudFBvc2l0aW9uKFdL
Vmlld1JlZiB2aWV3UmVmKQotewotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHJlc3Vs
dCA9IHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFdLUG9p
bnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOwotfQotCi12b2lkIFdLVmlld1NldENvbnRl
bnRQb3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgV0tQb2ludCBwb3NpdGlvbikKLXsKLSAgICB0
b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KHBv
c2l0aW9uLngsIHBvc2l0aW9uLnkpKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRU
cmFuc2xhdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0g
ICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbih0eCwgdHkpOwot
fQotCi1XS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmIHZpZXdS
ZWYsIFdLUG9pbnQgcG9pbnQpCi17Ci0gICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHJlc3Vs
dCA9IHRvSW1wbCh2aWV3UmVmKS0+dXNlclZpZXdwb3J0VG9Db250ZW50cyh0b0ludFBvaW50KHBv
aW50KSk7Ci0gICAgcmV0dXJuIFdLUG9pbnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOwot
fQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBXS1ZpZXdQYWludFRv
Q3VycmVudEdMQ29udGV4dChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICB0b0ltcGwodmlld1Jl
ZiktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXS1ZpZXdQ
YWludFRvQ2Fpcm9TdXJmYWNlKFdLVmlld1JlZiB2aWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5wYWludFRvQ2Fpcm9TdXJmYWNlKHN1cmZh
Y2UpOwotfQotCi1XS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikKLXsK
LSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5wYWdlUmVmKCk7Ci19Ci0KLXZvaWQgV0tWaWV3
U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17Ci0gICAg
dG9JbXBsKHZpZXdSZWYpLT5zZXREcmF3c0JhY2tncm91bmQoZmxhZyk7Ci19Ci0KLWJvb2wgV0tW
aWV3R2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0
b0ltcGwodmlld1JlZiktPmRyYXdzQmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdLVmlld1NldERy
YXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17
Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChmbGFn
KTsKLX0KLQotYm9vbCBXS1ZpZXdHZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChXS1ZpZXdS
ZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5kcmF3c1RyYW5zcGFy
ZW50QmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYg
dmlld1JlZiwgV0tTdHJpbmdSZWYgdGhlbWUpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRU
aGVtZVBhdGgodG9JbXBsKHRoZW1lKS0+c3RyaW5nKCkpOwotfQotCi12b2lkIFdLVmlld1N1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAg
ICB0b0ltcGwodmlld1JlZiktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygp
OwotfQotCi12b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdL
Vmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRTaG93c0FzU291cmNl
KFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5z
ZXRTaG93c0FzU291cmNlKGZsYWcpOwotfQotCi1ib29sIFdLVmlld0dldFNob3dzQXNTb3VyY2Uo
V0tWaWV3UmVmIHZpZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+c2hvd3NB
c1NvdXJjZSgpOwotfQotCi12b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3
UmVmKQotewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB0b0ltcGwodmlld1JlZikt
PmV4aXRGdWxsU2NyZWVuKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2aWV3UmVmKTsKLSNl
bmRpZgotfQotCi1XS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3
UmVmKQotewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSB0b0V3a1ZpZXcodG9JbXBsKHZpZXdSZWYp
LT5ldmFzT2JqZWN0KCkpOwotICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFj
ZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwYWM5ZDMzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgV0tWaWV3X2gKLSNkZWZpbmUgV0tWaWV3X2gKLQotI2luY2x1ZGUgPFdlYktpdDIvV0tC
YXNlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS0dlb21ldHJ5Lmg+Ci0KLXR5cGVkZWYgc3RydWN0
IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1l
eHRlcm4gIkMiIHsKLSNlbmRpZgotCi10eXBlZGVmIHZvaWQgKCpXS1ZpZXdDYWxsYmFjaykoV0tW
aWV3UmVmIHZpZXcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tW
aWV3Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IGFyZWEs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tWaWV3UGFnZURpZENo
YW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTaXplIHNpemUsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tWaWV3V2ViUHJvY2Vzc0Ny
YXNoZWRDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLVVJMUmVmIHVybCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQ
b3NpdGlvbkNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tQb2ludCBwb3NpdGlvbiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkUmVuZGVyRnJh
bWVDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLU2l6ZSBjb250ZW50c1NpemUsIFdLUmVjdCBj
b3ZlcmVkUmVjdCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1Zp
ZXdQYWdlRGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3
LCBXS1ZpZXdwb3J0QXR0cmlidXRlc1JlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10eXBl
ZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxiYWNrKShXS1ZpZXdSZWYg
dmlldywgV0tTdHJpbmdSZWYgbmV3VG9vbHRpcCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0K
LXN0cnVjdCBXS1ZpZXdDbGllbnQgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOwotICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOwotCi0gICAgLy8gVmVyc2lvbiAw
Ci0gICAgV0tWaWV3Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrICAgICAgICAgICAgICAgICAgIHZp
ZXdOZWVkc0Rpc3BsYXk7Ci0gICAgV0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxi
YWNrICAgICAgICAgIGRpZENoYW5nZUNvbnRlbnRzU2l6ZTsKLSAgICBXS1ZpZXdXZWJQcm9jZXNz
Q3Jhc2hlZENhbGxiYWNrICAgICAgICAgICAgICAgICAgd2ViUHJvY2Vzc0NyYXNoZWQ7Ci0gICAg
V0tWaWV3Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYlByb2Nl
c3NEaWRSZWxhdW5jaDsKLSAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNh
bGxiYWNrICAgICAgZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbjsKLSAgICBXS1ZpZXdQYWdlRGlk
UmVuZGVyRnJhbWVDYWxsYmFjayAgICAgICAgICAgICAgICAgZGlkUmVuZGVyRnJhbWU7Ci0gICAg
V0tWaWV3Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZENvbXBs
ZXRlUGFnZVRyYW5zaXRpb247Ci0gICAgV0tWaWV3UGFnZURpZENoYW5nZVZpZXdwb3J0QXR0cmli
dXRlc0NhbGxiYWNrICAgIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlczsKLSAgICBXS1ZpZXdQ
YWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxiYWNrICAgICAgICAgICAgICAgZGlkQ2hhbmdlVG9vbHRp
cDsKLX07Ci10eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwotCi1lbnVt
IHsga1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwotCi1XS19FWFBPUlQgV0tWaWV3
UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwot
Ci1XS19FWFBPUlQgV0tTaXplIFdLVmlld0dldFNpemUoV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2
b2lkIFdLVmlld1NldFNpemUoV0tWaWV3UmVmLCBXS1NpemUgc2l6ZSk7Ci0KLVdLX0VYUE9SVCB2
b2lkIFdLVmlld1NldFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsK
LQotV0tfRVhQT1JUIGJvb2wgV0tWaWV3SXNGb2N1c2VkKFdLVmlld1JlZik7Ci1XS19FWFBPUlQg
dm9pZCBXS1ZpZXdTZXRJc0ZvY3VzZWQoV0tWaWV3UmVmLCBib29sKTsKLQotV0tfRVhQT1JUIGJv
b2wgV0tWaWV3SXNWaXNpYmxlKFdLVmlld1JlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJ
c1Zpc2libGUoV0tWaWV3UmVmLCBib29sKTsKLQotV0tfRVhQT1JUIGZsb2F0IFdLVmlld0dldENv
bnRlbnRTY2FsZUZhY3RvcihXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Q29u
dGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiwgZmxvYXQpOwotCi1XS19FWFBPUlQgV0tQb2ludCBX
S1ZpZXdHZXRDb250ZW50UG9zaXRpb24oV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmll
d1NldENvbnRlbnRQb3NpdGlvbihXS1ZpZXdSZWYsIFdLUG9pbnQpOwotCi1XS19FWFBPUlQgdm9p
ZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihXS1ZpZXdSZWYsIGRvdWJsZSB0eCwg
ZG91YmxlIHR5KTsKLVdLX0VYUE9SVCBXS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVu
dHMoV0tWaWV3UmVmLCBXS1BvaW50KTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmlld1BhaW50VG9D
YWlyb1N1cmZhY2UoV0tWaWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqKTsKLQotV0tfRVhQT1JUIFdL
UGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVmll
d1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsKLQotV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiwgYm9vbCk7Ci1XS19FWFBPUlQgYm9v
bCBXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQoV0tWaWV3UmVmKTsKLQotV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmLCBib29sKTsKLVdL
X0VYUE9SVCBib29sIFdLVmlld0dldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmlld1Jl
Zik7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucyhXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3UmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3
U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYsIGJvb2wpOwotV0tfRVhQT1JUIGJvb2wgV0tWaWV3
R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0
RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVh
dGVTbmFwc2hvdChXS1ZpZXdSZWYpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgot
Ci0jZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tWaWV3RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wNWMxMTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXdFZmwuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS1ZpZXdFZmwuaCIKKworI2luY2x1
ZGUgIkV3a1ZpZXcuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJWaWV3
RWZsLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKwordm9pZCBXS1ZpZXdQYWludFRvQ2Fpcm9TdXJmYWNlKFdLVmlld1JlZiB2
aWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgc3RhdGljX2Nhc3Q8V2Vi
Vmlld0VmbCo+KHRvSW1wbCh2aWV3UmVmKSktPnBhaW50VG9DYWlyb1N1cmZhY2Uoc3VyZmFjZSk7
Cit9CisKK1dLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYp
Cit7CisgICAgRXdrVmlldyogZXdrVmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdFZmwqPih0b0lt
cGwodmlld1JlZikpLT5ld2tWaWV3KCk7CisgICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fp
cm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8p
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXdFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZDJlYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmgKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS1ZpZXdFZmxfaAor
I2RlZmluZSBXS1ZpZXdFZmxfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwordHlw
ZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OworCisjaWZkZWYgX19j
cGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1Bh
aW50VG9DYWlyb1N1cmZhY2UoV0tWaWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqKTsKKworV0tfRVhQ
T1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmKTsKKworI2lmZGVm
IF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLVmlld0VmbF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDg4YTE1MWYu
LjcxYzMyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcu
Y3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV0tQb3B1cEl0ZW0uaCIKICNpbmNsdWRl
ICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldLVmlldy5oIgorI2luY2x1ZGUgIldLVmlld0VmbC5o
IgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgpAQCAtMjgyLDcgKzI4Myw3IEBAIEV3a1ZpZXc6OkV3a1ZpZXco
V0tWaWV3UmVmIHZpZXcsIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQogICAgIEFTU0VSVChtX2Nv
bnRleHQpOwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgotICAgIHdlYlZp
ZXcoKS0+c2V0RXdrVmlldyh0aGlzKTsKKyAgICBzdGF0aWNfY2FzdDxXZWJWaWV3RWZsKj4od2Vi
VmlldygpKS0+c2V0RXdrVmlldyh0aGlzKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzX29iamVjdF9ldmFz
X2dldChtX2V2YXNPYmplY3QpKSk7CiAgICAgaWYgKG1fZXZhc0dMKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGQzMTE4MzUuLmIwZjNkM2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTI5LDcgKzI5LDcg
QEAKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5
LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5j
bHVkZSAiV2ViVmlld0VmbC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgi
CiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9X
ZWJWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Y4YTI5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViVmlldy5jcHAKQEAgLTAsMCArMSw0OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuaD4KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJX
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRl
eHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAgIDogbV9wYWdlKGNvbnRl
eHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFnZUdyb3VwKSkKKyAgICAsIG1fZm9jdXNlZChmYWxz
ZSkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fY29udGVudFNjYWxlRmFjdG9yKDEu
MCkKK3sKKyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKKyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKworICAgIGNoYXIq
IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01QT1NJVElO
R19ERUJVR19WSVNVQUxTIik7CisgICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdWaXN1
YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEiKTsK
KyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ0Jv
cmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOworICAgIG1fcGFnZS0+cGFnZUdyb3VwKCkt
PnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShzaG93
RGVidWdWaXN1YWxzKTsKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworICAgIGlmIChtX3Bh
Z2UtPmlzQ2xvc2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y2xvc2UoKTsK
K30KKwordm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKCkKK3sKKyAgICBtX3BhZ2UtPmluaXRpYWxp
emVXZWJQYWdlKCk7CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBj
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSkKKyAgICAgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVl
KTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNp
emUpCit7CisgICAgbV9zaXplID0gc2l6ZTsKKworICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwor
fQorCit2b2lkIFdlYlZpZXc6OnNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKQoreworICAgIGlmICht
X2ZvY3VzZWQgPT0gZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mb2N1c2VkID0g
Zm9jdXNlZDsKKyAgICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZp
ZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgaWYgKG1fdmlzaWJs
ZSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxl
OworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzVmlz
aWJsZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91
YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0gPSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSh0eCwgdHkpOworfQorCitJbnRQb2ludCBXZWJW
aWV3Ojp1c2VyVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwor
fQorCit2b2lkIFdlYlZpZXc6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKK3sKKyAgICBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0gY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7
CisgICAgaWYgKCFzY2VuZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gY2xlYW4gdXAgdGhpcyBjb2RlIGFzIGl0IGlzIHNwbGl0IG92ZXIgQ29vcmRHZnggYW5k
IFBhZ2UuCisgICAgc2NlbmUtPnNldERyYXdzQmFja2dyb3VuZChtX3BhZ2UtPmRyYXdzQmFja2dy
b3VuZCgpKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0ID0gbV91c2VyVmlld3BvcnRU
cmFuc2Zvcm0ubWFwUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkpOworCisgICAgc2Nl
bmUtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybVRvU2NlbmUoKS50b1RyYW5zZm9y
bWF0aW9uTWF0cml4KCksIC8qIG9wYWNpdHkgKi8gMSwgdmlld3BvcnQpOworfQorCit2b2lkIFdl
YlZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmIHRoZW1lKQoreworICAgIG1fcGFnZS0+
c2V0VGhlbWVQYXRoKHRoZW1lKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXREcmF3c0JhY2tncm91
bmQoYm9vbCBkcmF3c0JhY2tncm91bmQpCit7CisgICAgbV9wYWdlLT5zZXREcmF3c0JhY2tncm91
bmQoZHJhd3NCYWNrZ3JvdW5kKTsKK30KKworYm9vbCBXZWJWaWV3OjpkcmF3c0JhY2tncm91bmQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPmRyYXdzQmFja2dyb3VuZCgpOworfQorCit2
b2lkIFdlYlZpZXc6OnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKQoreworICAgIG1fcGFnZS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91
bmQodHJhbnNwYXJlbnRCYWNrZ3JvdW5kKTsKK30KKworYm9vbCBXZWJWaWV3OjpkcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+ZHJhd3NUcmFu
c3BhcmVudEJhY2tncm91bmQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKQoreworICAgIG1fcGFnZS0+c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKQoreworICAgIG1fcGFnZS0+cmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRTaG93c0FzU291cmNl
KGJvb2wgc2hvd3NBc1NvdXJjZSkKK3sKKyAgICBtX3BhZ2UtPnNldE1haW5GcmFtZUluVmlld1Nv
dXJjZU1vZGUoc2hvd3NBc1NvdXJjZSk7Cit9CisKK2Jvb2wgV2ViVmlldzo6c2hvd3NBc1NvdXJj
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lSW5WaWV3U291cmNlTW9k
ZSgpOworfQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQordm9pZCBXZWJWaWV3OjpleGl0
RnVsbFNjcmVlbigpCit7CisgICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5yZXF1ZXN0
RXhpdEZ1bGxTY3JlZW4oKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYlZpZXc6OmluaXRpYWxpemVD
bGllbnQoY29uc3QgV0tWaWV3Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQuaW5pdGlh
bGl6ZShjbGllbnQpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIG1fY2xpZW50LmRpZENoYW5nZUNv
bnRlbnRzU2l6ZSh0aGlzLCBzaXplKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIFdlYlZpZXc6OnRy
YW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRyYW5zZm9ybVRvU2NlbmUo
KS5pbnZlcnNlKCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBXZWJWaWV3Ojp0cmFuc2Zvcm1Ub1Nj
ZW5lKCkgY29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX3Vz
ZXJWaWV3cG9ydFRyYW5zZm9ybTsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uID0g
Y29udGVudFBvc2l0aW9uKCk7CisgICAgdHJhbnNmb3JtLnNjYWxlKG1fcGFnZS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtcG9zaXRpb24ueCgpLCAtcG9z
aXRpb24ueSgpKTsKKyAgICB0cmFuc2Zvcm0uc2NhbGUoY29udGVudFNjYWxlRmFjdG9yKCkpOwor
CisgICAgcmV0dXJuIHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpOworfQorCitDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUqIFdlYlZpZXc6OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpCit7
CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdBcmVh
KCk7CisgICAgaWYgKCFkcmF3aW5nQXJlYSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkgPSBk
cmF3aW5nQXJlYS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICBpZiAoIWxh
eWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbGF5ZXJU
cmVlSG9zdFByb3h5LT5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKK30KKwordm9pZCBXZWJW
aWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUoKQoreworICAgIGlmIChEcmF3aW5nQXJlYVByb3h5KiBk
cmF3aW5nQXJlYSA9IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkgeworICAgICAgICAvLyBXZWIgUHJv
Y2VzcyBleHBlY3RzIHNpemVzIGluIFVJIHVuaXRzLCBhbmQgbm90IHJhdyBkZXZpY2UgdW5pdHMu
CisgICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKGRpcFNpemUoKSks
IEludFNpemUoKSwgSW50U2l6ZSgpKTsKKyAgICAgICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVD
b250ZW50c1JlY3QoRmxvYXRSZWN0KGNvbnRlbnRQb3NpdGlvbigpLCBkaXBTaXplKCkpLCBGbG9h
dFBvaW50KCkpOworICAgIH0KK30KKworaW5saW5lIFdlYkNvcmU6OkZsb2F0U2l6ZSBXZWJWaWV3
OjpkaXBTaXplKCkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgZGlwU2l6ZShzaXplKCkpOworICAg
IGRpcFNpemUuc2NhbGUoMSAvIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAgICBy
ZXR1cm4gZGlwU2l6ZTsKK30KKworLy8gUGFnZSBDbGllbnQKKworUGFzc093blB0cjxEcmF3aW5n
QXJlYVByb3h5PiBXZWJWaWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKK3sKKyAgICBPd25Q
dHI8RHJhd2luZ0FyZWFQcm94eT4gZHJhd2luZ0FyZWEgPSBEcmF3aW5nQXJlYVByb3h5SW1wbDo6
Y3JlYXRlKHBhZ2UoKSk7CisgICAgcmV0dXJuIGRyYXdpbmdBcmVhLnJlbGVhc2UoKTsKK30KKwor
dm9pZCBXZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGFyZWEpCit7CisgICAgbV9jbGllbnQudmlld05lZWRzRGlzcGxheSh0aGlzLCBhcmVhKTsKK30K
Kwordm9pZCBXZWJWaWV3OjpkaXNwbGF5VmlldygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBXZWJWaWV3OjpzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQoreworICAgIHNldFZpZXdOZWVkc0Rp
c3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgV2ViVmlldzo6dmlld1Np
emUoKQoreworICAgIHJldHVybiByb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpOworfQorCitib29s
IFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1c2VkKCkKK3sK
KyAgICByZXR1cm4gaXNGb2N1c2VkKCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNWaWV3VmlzaWJs
ZSgpCit7CisgICAgcmV0dXJuIGlzVmlzaWJsZSgpOworfQorCitib29sIFdlYlZpZXc6OmlzVmll
d0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFdlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgpCit7CisgICAgbV9jbGllbnQud2Vi
UHJvY2Vzc0NyYXNoZWQodGhpcywgbV9wYWdlLT51cmxBdFByb2Nlc3NFeGl0KCkpOworfQorCit2
b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2VzcygpCit7CisgICAgbV9jbGllbnQud2ViUHJv
Y2Vzc0RpZFJlbGF1bmNoKHRoaXMpOworfQorCit2b2lkIFdlYlZpZXc6OnBhZ2VDbG9zZWQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dG9vbFRpcENoYW5n
ZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKQoreworICAgIG1fY2xp
ZW50LmRpZENoYW5nZVRvb2x0aXAodGhpcywgbmV3VG9vbFRpcCk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMo
Ym9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnJlZ2lz
dGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kLCBX
ZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAgICBtX3VuZG9Db250cm9s
bGVyLnJlZ2lzdGVyRWRpdENvbW1hbmQoY29tbWFuZCwgdW5kb09yUmVkbyk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQoreworICAgIG1fdW5kb0NvbnRyb2xsZXIu
Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKK30KKworYm9vbCBXZWJWaWV3OjpjYW5VbmRvUmVkbyhX
ZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAgICByZXR1cm4gbV91bmRv
Q29udHJvbGxlci5jYW5VbmRvUmVkbyh1bmRvT3JSZWRvKTsKK30KKwordm9pZCBXZWJWaWV3Ojpl
eGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7Cisg
ICAgbV91bmRvQ29udHJvbGxlci5leGVjdXRlVW5kb1JlZG8odW5kb09yUmVkbyk7Cit9CisKK0lu
dFBvaW50IFdlYlZpZXc6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBwb2ludDsKK30KKworSW50UmVjdCBX
ZWJWaWV3Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZG9uZVdp
dGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQgV2Vi
Vmlldzo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29s
IC8qd2FzRXZlbnRIYW5kbGVkKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRp
ZgorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1cE1l
bnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBXZWJWaWV3
OjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCisjaWYgRU5BQkxFKElOUFVUX1RZUEVf
Q09MT1IpCitQYXNzUmVmUHRyPFdlYkNvbG9yQ2hvb3NlclByb3h5PiBXZWJWaWV3OjpjcmVhdGVD
b2xvckNob29zZXJQcm94eShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NS
ZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBXZWJWaWV3OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNv
bnN0IExheWVyVHJlZUNvbnRleHQmKQoreworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIHNjZW5lID0gY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkpCisgICAgICAgIHNjZW5lLT5z
ZXRBY3RpdmUodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9
IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpKQorICAgICAgICBzY2VuZS0+c2V0QWN0aXZlKGZh
bHNlKTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZEZpbmlzaExvYWRpbmdEYXRh
Rm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgQ29yZUlQQzo6RGF0
YVJlZmVyZW5jZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworZG91YmxlIFdlYlZp
ZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXN0b21SZXByZXNl
bnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRS
ZWN0PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpmaW5k
U3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywg
dW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojpj
b3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYlZpZXc6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYlZpZXc6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJlY3QgV2ViVmlldzo6Y29u
dmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB1c2VyUmVjdCkKK3sKKyAgICBpZiAo
bV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCByZXN1bHQgPSB1
c2VyUmVjdDsKKyAgICAgICAgcmVzdWx0LnNjYWxlKG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIC8vIExlZ2FjeSBtb2RlLgor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHVzZXJSZWN0OworfQorCitGbG9hdFJl
Y3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGV2aWNlUmVj
dCkKK3sKKyAgICBpZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7CisgICAgICAgIEZsb2F0
UmVjdCByZXN1bHQgPSBkZXZpY2VSZWN0OworICAgICAgICByZXN1bHQuc2NhbGUoMSAvIG1fcGFn
ZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIC8vIExlZ2FjeSBtb2RlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGRl
dmljZVJlY3Q7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVz
KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cikKK3sKKyAgICBtX2NsaWVu
dC5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXModGhpcywgYXR0cik7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6cGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQorewor
ICAgIEZsb2F0UG9pbnQgdWlQb3NpdGlvbihwb3NpdGlvbik7CisgICAgdWlQb3NpdGlvbi5zY2Fs
ZShjb250ZW50U2NhbGVGYWN0b3IoKSwgY29udGVudFNjYWxlRmFjdG9yKCkpOworICAgIHNldENv
bnRlbnRQb3NpdGlvbih1aVBvc2l0aW9uKTsKKworICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRl
bnRzUG9zaXRpb24odGhpcywgcG9zaXRpb24pOworfQorCit2b2lkIFdlYlZpZXc6OmRpZFJlbmRl
ckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCit7CisgICAgbV9jbGllbnQuZGlkUmVuZGVyRnJhbWUo
dGhpcywgY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFn
ZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkKK3sKKyAgICBtX2NsaWVudC5kaWRDb21wbGV0ZVBh
Z2VUcmFuc2l0aW9uKHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTdiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmgKQEAgLTAsMCAr
MSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJv
bmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld19oCisj
ZGVmaW5lIFdlYlZpZXdfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5j
bHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiRGVmYXVsdFVuZG9Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAiV2Vi
Vmlld0NsaWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBUeXBlZEFQ
SU9iamVjdDxBUElPYmplY3Q6OlR5cGVWaWV3PiwgcHVibGljIFBhZ2VDbGllbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZp
ZXc+IGNyZWF0ZShXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisKKyAgICB2b2lkIGluaXRp
YWxpemUoKTsKKworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Cisg
ICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorCisgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2ZvY3VzZWQ7IH0KKyAg
ICB2b2lkIHNldEZvY3VzZWQoYm9vbCk7CisKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlzaWJsZTsgfQorICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKworICAgIHZv
aWQgc2V0Q29udGVudFNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1fY29udGVudFNj
YWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KKyAgICBmbG9hdCBjb250ZW50U2NhbGVGYWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTY2FsZUZhY3RvcjsgfQorCisgICAgdm9pZCBzZXRD
b250ZW50UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9j
b250ZW50UG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIGNvbnRlbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFBvc2l0aW9uOyB9
CisKKyAgICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJsZSB0eCwgZG91Ymxl
IHR5KTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB1c2VyVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xD
b250ZXh0KCk7CisKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJ
KG1fcGFnZS5nZXQoKSk7IH0KKworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wpOwor
ICAgIGJvb2wgZHJhd3NCYWNrZ3JvdW5kKCkgY29uc3Q7CisgICAgdm9pZCBzZXREcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZChib29sKTsKKyAgICBib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKKwor
ICAgIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgdm9p
ZCByZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworCisgICAgdm9pZCBzZXRT
aG93c0FzU291cmNlKGJvb2wpOworICAgIGJvb2wgc2hvd3NBc1NvdXJjZSgpIGNvbnN0OworCisj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKKyNl
bmRpZgorCisgICAgLy8gVmlldyBjbGllbnQuCisgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNv
bnN0IFdLVmlld0NsaWVudCopOworCisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4g
bV9wYWdlLmdldCgpOyB9CisKKyAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJik7CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIGJlY29tZSBwcml2YXRl
IHdoZW4gV2ViIEV2ZW50cyBjcmVhdGlvbiBpcyBtb3ZlZCB0byBXZWJWaWV3LgorICAgIFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdDsKKyAgICBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisgICAgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsK
KworICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CisgICAgV2ViQ29yZTo6RmxvYXRTaXpl
IGRpcFNpemUoKSBjb25zdDsKKyAgICAvLyBQYWdlQ2xpZW50CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5VmlldygpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBib29sIGNhblNjcm9sbFZpZXcoKSBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9v
bCBpc1ZpZXdXaW5kb3dBY3RpdmUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3
Rm9jdXNlZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCkgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWdl
Q2xvc2VkKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
Y29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3Im
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1v
dmVzKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0
UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRp
dENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIGNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8p
IE9WRVJSSURFOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2
aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVu
VG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkqKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKSBPVkVSUklERTsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3Qg
TmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBPVkVSUklERTsKKyNl
bmRpZgorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQ
b3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdl
UHJveHkqKSBPVkVSUklERTsKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IGNyZWF0ZUNvbG9yQ2hvb3NlclBy
b3h5KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2
b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCwgYm9v
bCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVD
b250ZXh0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1h
aW5GcmFtZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
Z0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBjdXN0b21S
ZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkgT1ZFUlJJREU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpJbnRSZWN0PiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBmaW5kU3RyaW5nSW5DdXN0
b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJl
c2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkgT1ZFUlJJREU7
CisKK3Byb3RlY3RlZDoKKyAgICBXZWJWaWV3Q2xpZW50IG1fY2xpZW50OworICAgIFJlZlB0cjxX
ZWJQYWdlUHJveHk+IG1fcGFnZTsKKyAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29u
dHJvbGxlcjsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3VzZXJWaWV3cG9y
dFRyYW5zZm9ybTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsgLy8gU2l6ZSBpbiBkZXZp
Y2UgdW5pdHMuCisgICAgYm9vbCBtX2ZvY3VzZWQ7CisgICAgYm9vbCBtX3Zpc2libGU7CisgICAg
ZmxvYXQgbV9jb250ZW50U2NhbGVGYWN0b3I7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2Nv
bnRlbnRQb3NpdGlvbjsgLy8gUG9zaXRpb24gaW4gVUkgdW5pdHMuCit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2Vu
ZGlmIC8vIFdlYlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M0MzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVudC5jcHAK
QEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVj
dHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIldlYlZpZXdD
bGllbnQuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQmFzZS5oIgor
I2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2ViVmlld3BvcnRBdHRyaWJ1dGVz
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dm9pZCBXZWJWaWV3Q2xpZW50Ojp2aWV3TmVlZHNEaXNwbGF5KFdlYlZpZXcqIHZpZXcsIGNvbnN0
IEludFJlY3QmIGFyZWEpCit7CisgICAgaWYgKCFtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5KHRvQVBJKHZp
ZXcpLCB0b0FQSShhcmVhKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmll
d0NsaWVudDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYlZpZXcqIHZpZXcsIGNvbnN0IEludFNp
emUmIHNpemUpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSh0b0FQ
SSh2aWV3KSwgdG9BUEkoc2l6ZSksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdl
YlZpZXdDbGllbnQ6OndlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFN0cmlu
ZyYgdXJsKQoreworICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY2xpZW50LndlYlByb2Nlc3NDcmFzaGVkKHRvQVBJKHZpZXcpLCBh
ZG9wdFdLKHRvQ29waWVkVVJMQVBJKHVybCkpLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsK
K30KKwordm9pZCBXZWJWaWV3Q2xpZW50Ojp3ZWJQcm9jZXNzRGlkUmVsYXVuY2goV2ViVmlldyog
dmlldykKK3sKKyAgICBpZiAoIW1fY2xpZW50LndlYlByb2Nlc3NEaWRSZWxhdW5jaCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKHRvQVBJKHZp
ZXcpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRD
aGFuZ2VDb250ZW50c1Bvc2l0aW9uKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwb2ludCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzUG9zaXRp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzUG9z
aXRpb24odG9BUEkodmlldyksIHRvQVBJKHBvaW50KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9
CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6ZGlkUmVuZGVyRnJhbWUoV2ViVmlldyogdmlldywgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJl
ZFJlY3QpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jbGllbnQuZGlkUmVuZGVyRnJhbWUodG9BUEkodmlldyksIHRvQVBJKHNp
emUpLCB0b0FQSShjb3ZlcmVkUmVjdCksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lk
IFdlYlZpZXdDbGllbnQ6OmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oV2ViVmlldyogdmlldykK
K3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24odG9BUEko
dmlldyksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnQ6OmRp
ZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJWaWV3KiB2aWV3LCBjb25zdCBWaWV3cG9ydEF0
dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VWaWV3
cG9ydEF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFdLUmV0YWluUHRyPFdLVmll
d3BvcnRBdHRyaWJ1dGVzUmVmPiB3a0F0dHJpYnV0ZXMgPSBhZG9wdFdLKHRvQVBJKFdlYlZpZXdw
b3J0QXR0cmlidXRlczo6Y3JlYXRlKGF0dHJpYnV0ZXMpLmxlYWtSZWYoKSkpOworICAgIG1fY2xp
ZW50LmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyh0b0FQSSh2aWV3KSwgd2tBdHRyaWJ1dGVz
LmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50Ojpk
aWRDaGFuZ2VUb29sdGlwKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFN0cmluZyYgdG9vbHRpcCkKK3sK
KyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXApCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXAodG9BUEkodmlldyksIGFkb3B0V0sodG9Db3Bp
ZWRBUEkodG9vbHRpcCkpLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9X
ZWJWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJWaWV3Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDRiZjRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdDbGllbnRfaAorI2RlZmluZSBXZWJWaWV3Q2xp
ZW50X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkFQSUNs
aWVudC5oIgorI2luY2x1ZGUgIldLVmlldy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIEludFJl
Y3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgVmlld3BvcnRBdHRyaWJ1dGVzOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldzsKKworY2xhc3MgV2ViVmlld0NsaWVudDog
cHVibGljIEFQSUNsaWVudDxXS1ZpZXdDbGllbnQsIGtXS1ZpZXdDbGllbnRDdXJyZW50VmVyc2lv
bj4geworcHVibGljOgorICAgIHZvaWQgdmlld05lZWRzRGlzcGxheShXZWJWaWV3KiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYlZp
ZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9pZCB3ZWJQcm9jZXNzQ3Jhc2hl
ZChXZWJWaWV3KiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgd2ViUHJvY2Vzc0RpZFJl
bGF1bmNoKFdlYlZpZXcqKTsKKyAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24oV2Vi
VmlldyosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBkaWRSZW5kZXJGcmFt
ZShXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oV2ViVmlldyopOworICAg
IHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYlZpZXcqLCBjb25zdCBXZWJDb3Jl
OjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKyAgICB2b2lkIGRpZENoYW5nZVRvb2x0aXAoV2ViVmll
dyosIGNvbnN0IFN0cmluZyYgdG9vbHRpcCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIFdlYlZp
ZXdDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZTI2YWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViVmlldy5oIgotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaCIKLSNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXJFZmwuaCIKLSNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5SW1wbC5oIgotI2luY2x1ZGUgIkV3a1ZpZXcuaCIKLSNpbmNsdWRlICJJbnB1
dE1ldGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50RWZsLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUVmbC5oIgot
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVudUxpc3RlbmVy
RWZsLmgiCi0jaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bUNvbnRleHRDYWlyby5oPgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotI2luY2x1ZGUg
IldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ug
RXdrVmlld0NhbGxiYWNrczsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdl
R3JvdXAqIHBhZ2VHcm91cCkKLSAgICA6IG1fZXdrVmlldygwKQotICAgICwgbV9wYWdlKGNvbnRl
eHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFnZUdyb3VwKSkKLSAgICAsIG1fZm9jdXNlZChmYWxz
ZSkKLSAgICAsIG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fY29udGVudFNjYWxlRmFjdG9yKDEu
MCkKLXsKLSAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKLSAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKLQotICAgIGNoYXIq
IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01QT1NJVElO
R19ERUJVR19WSVNVQUxTIik7Ci0gICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdWaXN1
YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEiKTsK
LSAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ0Jv
cmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotICAgIG1fcGFnZS0+cGFnZUdyb3VwKCkt
PnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShzaG93
RGVidWdWaXN1YWxzKTsKLX0KLQotV2ViVmlldzo6fldlYlZpZXcoKQotewotICAgIGlmIChtX3Bh
Z2UtPmlzQ2xvc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y2xvc2UoKTsK
LX0KLQotUGFzc1JlZlB0cjxXZWJWaWV3PiBXZWJWaWV3OjpjcmVhdGUoV2ViQ29udGV4dCogY29u
dGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJWaWV3KGNvbnRleHQsIHBhZ2VHcm91cCkpOwotfQotCi0vLyBGSVhNRTogUmVtb3ZlIHdo
ZW4gcG9zc2libGUuCi12b2lkIFdlYlZpZXc6OnNldEV3a1ZpZXcoRXdrVmlldyogZXdrVmlldykK
LXsKLSAgICBtX2V3a1ZpZXcgPSBld2tWaWV3OwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQotICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhld2tWaWV3LT5l
dmFzT2JqZWN0KCkpOwotI2VuZGlmCi0KLX0KLQotdm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKCkK
LXsKLSAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7Ci0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0gY29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkpCi0gICAgICAgIHNjZW5lLT5zZXRBY3RpdmUodHJ1ZSk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNpemUpCi17Ci0gICAgbV9zaXplID0gc2l6ZTsKLQotICAgIHVwZGF0ZVZpZXdwb3J0U2l6
ZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKQotewotICAg
IGlmIChtX2ZvY3VzZWQgPT0gZm9jdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mb2N1
c2VkID0gZm9jdXNlZDsKLSAgICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJv
eHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKG1f
dmlzaWJsZSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Zpc2libGUgPSB2
aXNpYmxlOwotICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmll
d0lzVmlzaWJsZSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0VXNlclZpZXdwb3J0VHJhbnNsYXRp
b24oZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0gICAgbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0g
PSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSh0eCwgdHkpOwotfQotCi1JbnRQb2lu
dCBXZWJWaWV3Ojp1c2VyVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9p
bnQpOwotfQotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBXZWJWaWV3Ojpw
YWludFRvQ3VycmVudEdMQ29udGV4dCgpCi17Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOwotICAgIGlmICghc2NlbmUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGNsZWFuIHVwIHRoaXMg
Y29kZSBhcyBpdCBpcyBzcGxpdCBvdmVyIENvb3JkR2Z4IGFuZCBQYWdlLgotICAgIHNjZW5lLT5z
ZXREcmF3c0JhY2tncm91bmQobV9wYWdlLT5kcmF3c0JhY2tncm91bmQoKSk7Ci0gICAgY29uc3Qg
RmxvYXRSZWN0JiB2aWV3cG9ydCA9IG1fdXNlclZpZXdwb3J0VHJhbnNmb3JtLm1hcFJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpKTsKLQotICAgIHNjZW5lLT5wYWludFRvQ3VycmVudEdM
Q29udGV4dCh0cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAvKiBv
cGFjaXR5ICovIDEsIHZpZXdwb3J0KTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlZpZXc6OnBhaW50
VG9DYWlyb1N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0g
Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci0gICAgaWYgKCFzY2VuZSkKLSAgICAgICAgcmV0
dXJuOwotI2VuZGlmCi0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gY29udGV4dChjYWlyb19jcmVh
dGUoc3VyZmFjZSkpOwotCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24gPSBjb250ZW50
UG9zaXRpb24oKTsKLSAgICBkb3VibGUgZWZmZWN0aXZlU2NhbGUgPSBtX3BhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCkgKiBjb250ZW50U2NhbGVGYWN0b3IoKTsKLQotICAgIGNhaXJvX21hdHJpeF90
IHRyYW5zZm9ybSA9IHsgZWZmZWN0aXZlU2NhbGUsIDAsIDAsIGVmZmVjdGl2ZVNjYWxlLCAtIHBv
c2l0aW9uLngoKSAqIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgLSBwb3NpdGlvbi55KCkg
KiBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkgfTsKLSAgICBjYWlyb19zZXRfbWF0cml4KGNv
bnRleHQuY3IoKSwgJnRyYW5zZm9ybSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
ICAgIHNjZW5lLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KCZjb250ZXh0KTsKLSNlbmRpZgotfQot
Ci1FdmFzX09iamVjdCogV2ViVmlldzo6ZXZhc09iamVjdCgpCi17Ci0gICAgcmV0dXJuIG1fZXdr
Vmlldy0+ZXZhc09iamVjdCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFRoZW1lUGF0aChjb25z
dCBTdHJpbmcmIHRoZW1lKQotewotICAgIG1fcGFnZS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpzZXREcmF3c0JhY2tncm91bmQoYm9vbCBkcmF3c0JhY2tncm91bmQp
Ci17Ci0gICAgbV9wYWdlLT5zZXREcmF3c0JhY2tncm91bmQoZHJhd3NCYWNrZ3JvdW5kKTsKLX0K
LQotYm9vbCBXZWJWaWV3OjpkcmF3c0JhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBt
X3BhZ2UtPmRyYXdzQmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldERyYXdzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kKQotewotICAgIG1f
cGFnZS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQodHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KTsKLX0KLQotYm9vbCBXZWJWaWV3OjpkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQot
ewotICAgIG1fcGFnZS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQot
ewotICAgIG1fcGFnZS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpzZXRTaG93c0FzU291cmNlKGJvb2wgc2hvd3NBc1NvdXJjZSkKLXsK
LSAgICBtX3BhZ2UtPnNldE1haW5GcmFtZUluVmlld1NvdXJjZU1vZGUoc2hvd3NBc1NvdXJjZSk7
Ci19Ci0KLWJvb2wgV2ViVmlldzo6c2hvd3NBc1NvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcGFnZS0+bWFpbkZyYW1lSW5WaWV3U291cmNlTW9kZSgpOwotfQotCi0jaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotdm9pZCBXZWJWaWV3OjpleGl0RnVsbFNjcmVlbigpCi17Ci0gICAgbV9w
YWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKLX0KLSNl
bmRpZgotCi12b2lkIFdlYlZpZXc6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tWaWV3Q2xpZW50
KiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwotfQotCi12b2lk
IFdlYlZpZXc6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplKQotewotICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSh0aGlzLCBzaXplKTsK
LX0KLQotQWZmaW5lVHJhbnNmb3JtIFdlYlZpZXc6OnRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHRyYW5zZm9ybVRvU2NlbmUoKS5pbnZlcnNlKCk7Ci19Ci0KLUFmZmlu
ZVRyYW5zZm9ybSBXZWJWaWV3Ojp0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3QKLXsKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKLQot
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uID0gY29udGVudFBvc2l0aW9uKCk7Ci0gICAg
dHJhbnNmb3JtLnNjYWxlKG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZSgtcG9zaXRpb24ueCgpLCAtcG9zaXRpb24ueSgpKTsKLSAgICB0cmFuc2Zv
cm0uc2NhbGUoY29udGVudFNjYWxlRmFjdG9yKCkpOwotCi0gICAgcmV0dXJuIHRyYW5zZm9ybS50
b0FmZmluZVRyYW5zZm9ybSgpOwotfQotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBXZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUoKQotewotICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3
aW5nQXJlYSgpOwotICAgIGlmICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFBy
b3h5ID0gZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAg
aWYgKCFsYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IGxheWVyVHJlZUhvc3RQcm94eS0+Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci19Ci0jZW5k
aWYKLQotdm9pZCBXZWJWaWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUoKQotewotICAgIGlmIChEcmF3
aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkgewotICAg
ICAgICAvLyBXZWIgUHJvY2VzcyBleHBlY3RzIHNpemVzIGluIFVJIHVuaXRzLCBhbmQgbm90IHJh
dyBkZXZpY2UgdW5pdHMuCi0gICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKHJvdW5kZWRJbnRT
aXplKGRpcFNpemUoKSksIEludFNpemUoKSwgSW50U2l6ZSgpKTsKLSAgICAgICAgZHJhd2luZ0Fy
ZWEtPnNldFZpc2libGVDb250ZW50c1JlY3QoRmxvYXRSZWN0KGNvbnRlbnRQb3NpdGlvbigpLCBk
aXBTaXplKCkpLCBGbG9hdFBvaW50KCkpOwotICAgIH0KLX0KLQotaW5saW5lIFdlYkNvcmU6OkZs
b2F0U2l6ZSBXZWJWaWV3OjpkaXBTaXplKCkgY29uc3QKLXsKLSAgICBGbG9hdFNpemUgZGlwU2l6
ZShzaXplKCkpOwotICAgIGRpcFNpemUuc2NhbGUoMSAvIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSk7Ci0KLSAgICByZXR1cm4gZGlwU2l6ZTsKLX0KLQotLy8gUGFnZSBDbGllbnQKLQotUGFz
c093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBXZWJWaWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KCkKLXsKLSAgICBPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gZHJhd2luZ0FyZWEgPSBEcmF3aW5n
QXJlYVByb3h5SW1wbDo6Y3JlYXRlKHBhZ2UoKSk7Ci0gICAgcmV0dXJuIGRyYXdpbmdBcmVhLnJl
bGVhc2UoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGFyZWEpCi17Ci0gICAgbV9jbGllbnQudmlld05lZWRzRGlzcGxheSh0
aGlzLCBhcmVhKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaXNwbGF5VmlldygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzY3JvbGxWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQotewotICAg
IHNldFZpZXdOZWVkc0Rpc3BsYXkoc2Nyb2xsUmVjdCk7Ci19Ci0KLVdlYkNvcmU6OkludFNpemUg
V2ViVmlldzo6dmlld1NpemUoKQotewotICAgIHJldHVybiByb3VuZGVkSW50U2l6ZShkaXBTaXpl
KCkpOwotfQotCi1ib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1Zp
ZXdGb2N1c2VkKCkKLXsKLSAgICByZXR1cm4gaXNGb2N1c2VkKCk7Ci19Ci0KLWJvb2wgV2ViVmll
dzo6aXNWaWV3VmlzaWJsZSgpCi17Ci0gICAgcmV0dXJuIGlzVmlzaWJsZSgpOwotfQotCi1ib29s
IFdlYlZpZXc6OmlzVmlld0luV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgpCi17Ci0g
ICAgbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQodGhpcywgbV9wYWdlLT51cmxBdFByb2Nlc3NF
eGl0KCkpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAg
bV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKHRoaXMpOwotfQotCi12b2lkIFdlYlZpZXc6
OnBhZ2VDbG9zZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlw
KQotewotICAgIG1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXAodGhpcywgbmV3VG9vbFRpcCk7Ci19
Ci0KLXZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQotewotICAg
IG1fZXdrVmlldy0+c2V0Q3Vyc29yKGN1cnNvcik7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Q3Vy
c29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRp
dENvbW1hbmRQcm94eT4gY29tbWFuZCwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJl
ZG8pCi17Ci0gICAgbV91bmRvQ29udHJvbGxlci5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmQs
IHVuZG9PclJlZG8pOwotfQotCi12b2lkIFdlYlZpZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkK
LXsKLSAgICBtX3VuZG9Db250cm9sbGVyLmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci19Ci0KLWJv
b2wgV2ViVmlldzo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJl
ZG8pCi17Ci0gICAgcmV0dXJuIG1fdW5kb0NvbnRyb2xsZXIuY2FuVW5kb1JlZG8odW5kb09yUmVk
byk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5k
b09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIG1fdW5kb0NvbnRyb2xsZXIuZXhlY3V0ZVVuZG9S
ZWRvKHVuZG9PclJlZG8pOwotfQotCi1JbnRQb2ludCBXZWJWaWV3OjpzY3JlZW5Ub1dpbmRvdyhj
b25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gcG9pbnQ7Ci19Ci0KLUludFJlY3QgV2ViVmlldzo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50
UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50UmVjdCgpOwot
fQotCi12b2lkIFdlYlZpZXc6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCi12b2lkIFdlYlZpZXc6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBO
YXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCAvKndhc0V2ZW50SGFuZGxlZCovKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94
eT4gV2ViVmlldzo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQotewot
ICAgIHJldHVybiBXZWJQb3B1cE1lbnVMaXN0ZW5lckVmbDo6Y3JlYXRlKHBhZ2UpOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZUNvbnRleHRNZW51
UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQotewotICAgIHJldHVybiBXZWJDb250ZXh0TWVudVBy
b3h5RWZsOjpjcmVhdGUobV9ld2tWaWV3LCBwYWdlKTsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9U
WVBFX0NPTE9SKQotUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gV2ViVmlldzo6Y3Jl
YXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQ
YXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIFdlYlZpZXc6
OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYp
Ci17Ci0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUoKSkKLSAgICAgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKLX0KLQot
dm9pZCBXZWJWaWV3OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAgIGlm
IChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0gY29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKCkpCi0gICAgICAgIHNjZW5lLT5zZXRBY3RpdmUoZmFsc2UpOwotfQotI2VuZGlmCi0KLXZv
aWQgV2ViVmlldzo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3
OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJl
c2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWRvdWJsZSBXZWJWaWV3OjpjdXN0b21SZXBy
ZXNlbnRhdGlvblpvb21GYWN0b3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFj
dG9yKGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6
OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZmluZFN0cmluZ0luQ3VzdG9t
UmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y291bnRTdHJpbmdNYXRj
aGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5z
aWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojp1cGRh
dGVUZXh0SW5wdXRTdGF0ZSgpCi17Ci0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1l
dGhvZENvbnRleHQgPSBtX2V3a1ZpZXctPmlucHV0TWV0aG9kQ29udGV4dCgpOwotICAgIGlmIChp
bnB1dE1ldGhvZENvbnRleHQpCi0gICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+dXBkYXRlVGV4
dElucHV0U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVlc3Qo
RG93bmxvYWRQcm94eSogZG93bmxvYWQpCi17Ci0gICAgRXdrQ29udGV4dCogY29udGV4dCA9IG1f
ZXdrVmlldy0+ZXdrQ29udGV4dCgpOwotICAgIGNvbnRleHQtPmRvd25sb2FkTWFuYWdlcigpLT5y
ZWdpc3RlckRvd25sb2FkSm9iKHRvQVBJKGRvd25sb2FkKSwgbV9ld2tWaWV3KTsKLX0KLQotRmxv
YXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNl
clJlY3QpCi17Ci0gICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICBG
bG9hdFJlY3QgcmVzdWx0ID0gdXNlclJlY3Q7Ci0gICAgICAgIHJlc3VsdC5zY2FsZShtX3BhZ2Ut
PmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAvLyBMZWdhY3kgbW9kZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB1c2Vy
UmVjdDsKLX0KLQotRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBG
bG9hdFJlY3QmIGRldmljZVJlY3QpCi17Ci0gICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQo
KSkgewotICAgICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gZGV2aWNlUmVjdDsKLSAgICAgICAgcmVz
dWx0LnNjYWxlKDEgLyBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICAvLyBMZWdhY3kgbW9kZS4KLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBkZXZpY2VSZWN0OwotfQotCi12b2lkIFdlYlZpZXc6OmRpZENoYW5n
ZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0
dHIpCi17Ci0gICAgbV9jbGllbnQuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRoaXMsIGF0
dHIpOwotfQotCi12b2lkIFdlYlZpZXc6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbikKLXsKLSAgICBGbG9hdFBvaW50IHVpUG9zaXRpb24ocG9zaXRpb24pOwot
ICAgIHVpUG9zaXRpb24uc2NhbGUoY29udGVudFNjYWxlRmFjdG9yKCksIGNvbnRlbnRTY2FsZUZh
Y3RvcigpKTsKLSAgICBzZXRDb250ZW50UG9zaXRpb24odWlQb3NpdGlvbik7Ci0KLSAgICBtX2Ns
aWVudC5kaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKTsKLX0KLQotdm9p
ZCBXZWJWaWV3OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQotewotICAgIG1fY2xp
ZW50LmRpZFJlbmRlckZyYW1lKHRoaXMsIGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwotfQot
Ci12b2lkIFdlYlZpZXc6OnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpCi17Ci0gICAgbV9j
bGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbih0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyNTM3ZTZkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVmlld19oCi0jZGVmaW5lIFdl
YlZpZXdfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiRGVmYXVsdFVuZG9D
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkNvbnRl
eHQuaCIKLSNpbmNsdWRlICJXZWJHZW9tZXRyeS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5o
IgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgi
Ci0jaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3Jt
YXRpb25NYXRyaXguaD4KLQotY2xhc3MgRXdrVmlldzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBUeXBlZEFQSU9iamVjdDxBUElPYmplY3Q6OlR5cGVW
aWV3PiwgcHVibGljIFBhZ2VDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZXco
KTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNyZWF0ZShXZWJDb250ZXh0Kiwg
V2ViUGFnZUdyb3VwKik7Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCi0g
ICAgdm9pZCBzZXRFd2tWaWV3KEV3a1ZpZXcqKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwot
Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBi
b29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQotICAgIHZvaWQgc2V0
Rm9jdXNlZChib29sKTsKLQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92
aXNpYmxlOyB9Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotCi0gICAgdm9pZCBzZXRDb250
ZW50U2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpIHsgbV9jb250ZW50U2NhbGVGYWN0b3Ig
PSBzY2FsZUZhY3RvcjsgfQotICAgIGZsb2F0IGNvbnRlbnRTY2FsZUZhY3RvcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudFNjYWxlRmFjdG9yOyB9Ci0KLSAgICB2b2lkIHNldENvbnRlbnRQb3Np
dGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX2NvbnRlbnRQb3Np
dGlvbiA9IHBvc2l0aW9uOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgY29udGVu
dFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UG9zaXRpb247IH0KLQotICAgIHZv
aWQgc2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpOwotICAg
IFdlYkNvcmU6OkludFBvaW50IHVzZXJWaWV3cG9ydFRvQ29udGVudHMoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKSBjb25zdDsKLQotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsK
LSAgICB2b2lkIHBhaW50VG9DYWlyb1N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90Kik7Ci0KLSAgICBX
S1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fcGFnZS5nZXQoKSk7IH0K
LQotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wpOwotICAgIGJvb2wgZHJhd3NCYWNr
Z3JvdW5kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChi
b29sKTsKLSAgICBib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgc3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0gICAgdm9pZCByZXN1bWVBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpOwotCi0gICAgdm9pZCBzZXRTaG93c0FzU291cmNlKGJvb2wp
OwotICAgIGJvb2wgc2hvd3NBc1NvdXJjZSgpIGNvbnN0OwotCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKLSNlbmRpZgotCi0gICAgLy8gVmll
dyBjbGllbnQuCi0gICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLVmlld0NsaWVudCop
OwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgotICAgIEV2YXNfT2JqZWN0
KiBldmFzT2JqZWN0KCk7Ci0gICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdl
LmdldCgpOyB9Ci0KLSAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJik7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIGJlY29tZSBwcml2YXRlIHdoZW4g
V2ViIEV2ZW50cyBjcmVhdGlvbiBpcyBtb3ZlZCB0byBXZWJWaWV3LgotICAgIFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOwotICAgIFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci0KLSAgICB2
b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBkaXBTaXpl
KCkgY29uc3Q7Ci0gICAgLy8gUGFnZUNsaWVudAotICAgIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQ
cm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIE9WRVJSSURFOwotCi0gICAgdm9pZCBzZXRW
aWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKLQotICAg
IHZvaWQgZGlzcGxheVZpZXcoKSBPVkVSUklERTsKLQotICAgIGJvb2wgY2FuU2Nyb2xsVmlldygp
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREU7Ci0KLSAg
ICBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCkgT1ZFUlJJREU7Ci0KLSAgICBib29sIGlzVmll
d1dpbmRvd0FjdGl2ZSgpIE9WRVJSSURFOwotICAgIGJvb2wgaXNWaWV3Rm9jdXNlZCgpIE9WRVJS
SURFOwotICAgIGJvb2wgaXNWaWV3VmlzaWJsZSgpIE9WRVJSSURFOwotICAgIGJvb2wgaXNWaWV3
SW5XaW5kb3coKSBPVkVSUklERTsKLQotICAgIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCkgT1ZFUlJJ
REU7Ci0gICAgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKSBPVkVSUklERTsKLSAgICB2b2lkIHBh
Z2VDbG9zZWQoKSBPVkVSUklERTsKLQotICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIHBhZ2VEaWRSZXF1ZXN0
U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7Ci0gICAgdm9pZCBkaWRS
ZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSBPVkVSUklERTsKLSAgICB2b2lkIHBhZ2VUcmFu
c2l0aW9uVmlld3BvcnRSZWFkeSgpIE9WRVJSSURFOwotCi0gICAgdm9pZCBzZXRDdXJzb3IoY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJikgT1ZFUlJJREU7Ci0gICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXMoYm9vbCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGRpZENoYW5nZVZpZXdw
b3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBPVkVSUklE
RTsKLQotICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21t
YW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIE9WRVJSSURFOwotICAgIHZvaWQg
Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBPVkVSUklERTsKLSAgICBib29sIGNhblVuZG9SZWRvKFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7Ci0gICAgdm9pZCBleGVjdXRlVW5kb1Jl
ZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVSUklERTsKLQotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBP
VkVSUklERTsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIFdlYkNvcmU6OkludFBvaW50IHNj
cmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7Ci0gICAgV2Vi
Q29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZF
UlJJREU7Ci0KLSAgICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgT1ZFUlJJREU7Ci0KLSAg
ICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgT1ZFUlJJREU7Ci0K
LSAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYs
IGJvb2wpIE9WRVJSSURFOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdm9pZCBkb25l
V2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRI
YW5kbGVkKSBPVkVSUklERTsKLSNlbmRpZgotCi0gICAgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQ
cm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJREU7Ci0gICAg
UGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdl
YlBhZ2VQcm94eSopIE9WRVJSSURFOwotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAg
IFBhc3NSZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IGNyZWF0ZUNvbG9yQ2hvb3NlclByb3h5
KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRGaW5k
SW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpIE9WRVJSSURF
OwotCi0gICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVy
VHJlZUNvbnRleHQmKSBPVkVSUklERTsKLSAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpIE9WRVJSSURFOwotICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIE9WRVJSSURFOwotCi0gICAgdm9pZCBkaWRD
b21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wpIE9WRVJSSURFOwotICAgIHZvaWQgZGlkRmluaXNo
TG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgT1ZFUlJJREU7Ci0KLSAgICBkb3VibGUgY3VzdG9tUmVw
cmVzZW50YXRpb25ab29tRmFjdG9yKCkgT1ZFUlJJREU7Ci0gICAgdm9pZCBzZXRDdXN0b21SZXBy
ZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKSBPVkVSUklERTsKLQotICAgIHZvaWQgZmxhc2hC
YWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYpIE9WRVJS
SURFOwotICAgIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3Ry
aW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKSBPVkVSUklERTsKLSAgICB2b2lkIGNvdW50U3Ry
aW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlv
bnMsIHVuc2lnbmVkKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3Q2xpZW50IG1f
Y2xpZW50OwotICAgIEV3a1ZpZXcqIG1fZXdrVmlldzsKLSAgICBSZWZQdHI8V2ViUGFnZVByb3h5
PiBtX3BhZ2U7Ci0gICAgRGVmYXVsdFVuZG9Db250cm9sbGVyIG1fdW5kb0NvbnRyb2xsZXI7Ci0g
ICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbV91c2VyVmlld3BvcnRUcmFuc2Zvcm07
Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7IC8vIFNpemUgaW4gZGV2aWNlIHVuaXRzLgot
ICAgIGJvb2wgbV9mb2N1c2VkOwotICAgIGJvb2wgbV92aXNpYmxlOwotICAgIGZsb2F0IG1fY29u
dGVudFNjYWxlRmFjdG9yOwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9jb250ZW50UG9zaXRp
b247IC8vIFBvc2l0aW9uIGluIFVJIHVuaXRzLgotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwZmQxZGM1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYlZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJWaWV3cG9ydEF0dHJpYnV0ZXMuaCIKLQot
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldLQmFzZS5oIgotI2luY2x1ZGUgIldL
UmV0YWluUHRyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotdm9pZCBXZWJWaWV3Q2xpZW50Ojp2aWV3TmVlZHNEaXNwbGF5KFdlYlZpZXcqIHZp
ZXcsIGNvbnN0IEludFJlY3QmIGFyZWEpCi17Ci0gICAgaWYgKCFtX2NsaWVudC52aWV3TmVlZHNE
aXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5
KHRvQVBJKHZpZXcpLCB0b0FQSShhcmVhKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZv
aWQgV2ViVmlld0NsaWVudDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYlZpZXcqIHZpZXcsIGNv
bnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VDb250ZW50
c1NpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRz
U2l6ZSh0b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQot
Ci12b2lkIFdlYlZpZXdDbGllbnQ6OndlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqIHZpZXcsIGNv
bnN0IFN0cmluZyYgdXJsKQotewotICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LndlYlByb2Nlc3NDcmFzaGVkKHRvQVBJ
KHZpZXcpLCBhZG9wdFdLKHRvQ29waWVkVVJMQVBJKHVybCkpLmdldCgpLCBtX2NsaWVudC5jbGll
bnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xpZW50Ojp3ZWJQcm9jZXNzRGlkUmVsYXVuY2go
V2ViVmlldyogdmlldykKLXsKLSAgICBpZiAoIW1fY2xpZW50LndlYlByb2Nlc3NEaWRSZWxhdW5j
aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNo
KHRvQVBJKHZpZXcpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xp
ZW50OjpkaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZUNvbnRl
bnRzUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENoYW5nZUNv
bnRlbnRzUG9zaXRpb24odG9BUEkodmlldyksIHRvQVBJKHBvaW50KSwgbV9jbGllbnQuY2xpZW50
SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVmlld0NsaWVudDo6ZGlkUmVuZGVyRnJhbWUoV2ViVmlldyog
dmlldywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY292ZXJlZFJlY3QpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQuZGlkUmVuZGVyRnJhbWUodG9BUEkodmlldyks
IHRvQVBJKHNpemUpLCB0b0FQSShjb3ZlcmVkUmVjdCksIG1fY2xpZW50LmNsaWVudEluZm8pOwot
fQotCi12b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oV2ViVmll
dyogdmlldykKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRp
b24odG9BUEkodmlldyksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlZpZXdD
bGllbnQ6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJWaWV3KiB2aWV3LCBjb25zdCBW
aWV3cG9ydEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRD
aGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLUmV0YWlu
UHRyPFdLVmlld3BvcnRBdHRyaWJ1dGVzUmVmPiB3a0F0dHJpYnV0ZXMgPSBhZG9wdFdLKHRvQVBJ
KFdlYlZpZXdwb3J0QXR0cmlidXRlczo6Y3JlYXRlKGF0dHJpYnV0ZXMpLmxlYWtSZWYoKSkpOwot
ICAgIG1fY2xpZW50LmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyh0b0FQSSh2aWV3KSwgd2tB
dHRyaWJ1dGVzLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3
Q2xpZW50OjpkaWRDaGFuZ2VUb29sdGlwKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFN0cmluZyYgdG9v
bHRpcCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXAodG9BUEkodmlldyksIGFkb3B0
V0sodG9Db3BpZWRBUEkodG9vbHRpcCkpLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViVmlld0NsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjE4NmRmLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBXZWJWaWV3Q2xpZW50X2gKLSNkZWZpbmUgV2ViVmlld0NsaWVudF9oCi0KLSNpbmNsdWRl
ICJBUElDbGllbnQuaCIKLSNpbmNsdWRlICJXS1ZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UG9pbnQ7Ci1jbGFz
cyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFZpZXdwb3J0QXR0cmlidXRlczsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlZpZXc7Ci0KLWNsYXNzIFdlYlZpZXdD
bGllbnQ6IHB1YmxpYyBBUElDbGllbnQ8V0tWaWV3Q2xpZW50LCBrV0tWaWV3Q2xpZW50Q3VycmVu
dFZlcnNpb24+IHsKLXB1YmxpYzoKLSAgICB2b2lkIHZpZXdOZWVkc0Rpc3BsYXkoV2ViVmlldyos
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6
ZShXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgd2ViUHJvY2Vz
c0NyYXNoZWQoV2ViVmlldyosIGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHdlYlByb2Nl
c3NEaWRSZWxhdW5jaChXZWJWaWV3Kik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1Bvc2l0
aW9uKFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZvaWQgZGlkUmVu
ZGVyRnJhbWUoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBkaWRDb21wbGV0ZVBhZ2VUcmFuc2l0aW9uKFdlYlZpZXcq
KTsKLSAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJWaWV3KiwgY29uc3Qg
V2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VUb29sdGlw
KFdlYlZpZXcqLCBjb25zdCBTdHJpbmcmIHRvb2x0aXApOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJWaWV3Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjczN2Q2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXdFZmwuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld0VmbC5oIgorCisjaW5jbHVk
ZSAiRG93bmxvYWRNYW5hZ2VyRWZsLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgorI2luY2x1ZGUg
IklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlF
ZmwuaCIKKyNpbmNsdWRlICJXZWJQb3B1cE1lbnVMaXN0ZW5lckVmbC5oIgorI2luY2x1ZGUgImV3
a19jb250ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KKwor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEV3a1ZpZXdDYWxsYmFja3M7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQ
dHI8V2ViVmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VH
cm91cCogcGFnZUdyb3VwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlld0VmbChj
b250ZXh0LCBwYWdlR3JvdXApKTsKK30KKworV2ViVmlld0VmbDo6V2ViVmlld0VmbChXZWJDb250
ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IFdlYlZpZXcoY29u
dGV4dCwgcGFnZUdyb3VwKQorICAgICwgbV9ld2tWaWV3KDApCit7Cit9CisKK3ZvaWQgV2ViVmll
d0VmbDo6c2V0RXdrVmlldyhFd2tWaWV3KiBld2tWaWV3KQoreworICAgIG1fZXdrVmlldyA9IGV3
a1ZpZXc7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV9wYWdlLT5mdWxsU2Ny
ZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3a1ZpZXctPmV2YXNPYmplY3QoKSk7CisjZW5kaWYK
K30KKwordm9pZCBXZWJWaWV3RWZsOjpwYWludFRvQ2Fpcm9TdXJmYWNlKGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSkKK3sKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0gY29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CisgICAgaWYgKCFzY2VuZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gY29udGV4dChjYWlyb19jcmVhdGUoc3VyZmFj
ZSkpOworCisgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24gPSBjb250ZW50UG9zaXRpb24o
KTsKKyAgICBkb3VibGUgZWZmZWN0aXZlU2NhbGUgPSBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9y
KCkgKiBjb250ZW50U2NhbGVGYWN0b3IoKTsKKworICAgIGNhaXJvX21hdHJpeF90IHRyYW5zZm9y
bSA9IHsgZWZmZWN0aXZlU2NhbGUsIDAsIDAsIGVmZmVjdGl2ZVNjYWxlLCAtIHBvc2l0aW9uLngo
KSAqIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgLSBwb3NpdGlvbi55KCkgKiBtX3BhZ2Ut
PmRldmljZVNjYWxlRmFjdG9yKCkgfTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQuY3Io
KSwgJnRyYW5zZm9ybSk7CisgICAgc2NlbmUtPnBhaW50VG9HcmFwaGljc0NvbnRleHQoJmNvbnRl
eHQpOworfQorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBXZWJWaWV3RWZsOjpjcmVh
dGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgcmV0dXJuIFdlYlBv
cHVwTWVudUxpc3RlbmVyRWZsOjpjcmVhdGUocGFnZSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29u
dGV4dE1lbnVQcm94eT4gV2ViVmlld0VmbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdl
UHJveHkqIHBhZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlFZmw6OmNyZWF0
ZShtX2V3a1ZpZXcsIHBhZ2UpOworfQorCit2b2lkIFdlYlZpZXdFZmw6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBBU1NFUlQobV9ld2tWaWV3KTsKKyAgICBtX2V3a1Zp
ZXctPnNldEN1cnNvcihjdXJzb3IpOworfQorCit2b2lkIFdlYlZpZXdFZmw6OnVwZGF0ZVRleHRJ
bnB1dFN0YXRlKCkKK3sKKyAgICBJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29u
dGV4dCA9IG1fZXdrVmlldy0+aW5wdXRNZXRob2RDb250ZXh0KCk7CisgICAgaWYgKGlucHV0TWV0
aG9kQ29udGV4dCkKKyAgICAgICAgaW5wdXRNZXRob2RDb250ZXh0LT51cGRhdGVUZXh0SW5wdXRT
dGF0ZSgpOworfQorCit2b2lkIFdlYlZpZXdFZmw6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3du
bG9hZFByb3h5KiBkb3dubG9hZCkKK3sKKyAgICBFd2tDb250ZXh0KiBjb250ZXh0ID0gbV9ld2tW
aWV3LT5ld2tDb250ZXh0KCk7CisgICAgY29udGV4dC0+ZG93bmxvYWRNYW5hZ2VyKCktPnJlZ2lz
dGVyRG93bmxvYWRKb2IodG9BUEkoZG93bmxvYWQpLCBtX2V3a1ZpZXcpOworfQorCisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmU3ZWYzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmgKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3RWZsX2gKKyNk
ZWZpbmUgV2ViVmlld0VmbF9oCisKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKK2NsYXNzIEV3a1Zp
ZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJWaWV3RWZsIDogcHVibGljIFdl
YlZpZXcgeworcHVibGljOgorICAgIHZvaWQgc2V0RXdrVmlldyhFd2tWaWV3Kik7CisgICAgRXdr
VmlldyogZXdrVmlldygpIHsgcmV0dXJuIG1fZXdrVmlldzsgfQorCisgICAgdm9pZCBwYWludFRv
Q2Fpcm9TdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCopOworCitwcml2YXRlOgorICAgIFdlYlZpZXdF
ZmwoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOworCisgICAgdm9pZCBzZXRDdXJzb3IoY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJikgT1ZFUlJJREU7CisgICAgUGFzc1JlZlB0cjxXZWJQb3B1cE1l
bnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJREU7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5
KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOworICAgIHZvaWQgdXBkYXRlVGV4dElucHV0U3RhdGUo
KSBPVkVSUklERTsKKyAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5
KikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgRXdrVmlldyogbV9ld2tWaWV3OworCisgICAg
ZnJpZW5kIGNsYXNzIFdlYlZpZXc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFdlYlZpZXdFZmxfaApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGRjNzdhNTkuLjUxNjgyYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wNC0xOSAg
TWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAg
ICAgICBbV0syXSBNYWtlIEVGTCBXS1ZpZXcgQVBJIHNoYXJlYWJsZSBiZXR3ZWVuIHBvcnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3MzQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwv
UGxhdGZvcm1XZWJWaWV3RWZsLmNwcDoKKworICAgICAgICAgICAgVXBkYXRlZCBwcm9qZWN0IGZp
bGVzIGFjY29yZGluZ2x5IHRvIHVwZGF0ZWQgV0tWaWV3IEFQSSBmaWxlcworICAgICAgICAgICAg
c3RydWN0dXJlLgorCiAyMDEzLTA0LTE4ICBYdWVmZWkgUmVuICA8eHJlbkBibGFja2JlcnJ5LmNv
bT4KIAogICAgICAgICByZW1vdmUgYnVpbGQgd2FybmluZyh1bnVzZWQgcGFyYW1ldGVyKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYjQ4YjAwNC4uNWI1YzUzNyAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xMSw2ICsxMSw3IEBAIGFkZF9j
dXN0b21fdGFyZ2V0KGZvcndhcmRpbmctaGVhZGVyc1NvdXBGb3JUZXN0V2ViS2l0QVBJCiBzZXQo
Rm9yd2FyZGluZ05ldHdvcmtIZWFkZXJzRm9yVGVzdFdlYktpdEFQSV9OQU1FIGZvcndhcmRpbmct
aGVhZGVyc1NvdXBGb3JUZXN0V2ViS2l0QVBJKQogCiBpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAg
ICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzCiAgICAg
JHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL3NvdXAKICAgICAke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJL0MvZWZsCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0Vm
bC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3Bw
CmluZGV4IGE0ZWIwN2EuLjFiZjY1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
PEVjb3JlX0V2YXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLVmlld0VmbC5o
PgogI2luY2x1ZGUgPGNhaXJvLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198967</attachid>
            <date>2013-04-21 10:19:02 -0700</date>
            <delta_ts>2013-04-23 07:44:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug114734</filename>
            <type>text/plain</type>
            <size>101292</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGFjMGVlZjc2OWUyMjY5NWIzNjM3NmRlMjRkNjY1ZmUxY2Y2MmFjYmIKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VGh1IEFwciAxOCAxNDo0MjozNCAyMDEzICswMzAwCgogICAgYnVnMTE0NzM0CgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGNhZTlkZTIuLmM1YmMzMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjcgQEAKKzIwMTMt
MDQtMjEgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CisKKyAgICAgICAgW1dLMl0gTWFrZSBFRkwgV0tWaWV3IEFQSSBzaGFyZWFibGUgYmV0d2VlbiBw
b3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0
NzM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRUZM
LWluZGVwZW5kZW50IHBhcnQgb2YgV0tWaWV3IEFQSSAoYW5kIGl0cyBpbXBsZW1lbnRhdGlvbikg
aXMgbm93CisgICAgICAgIHNoYXJlYWJsZSBiZXR3ZWVuIHBvcnRzIHRoYXQgdXNlIENvb3JkaW5h
dGVkIEdyYXBoaWNzIGFuZCBwdXQgdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljcyBmb2xk
ZXJzLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcC4KKyAgICAgICAgKFdLVmll
d0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dl
dFNpemUpOgorICAgICAgICAoV0tWaWV3U2V0U2l6ZSk6CisgICAgICAgIChXS1ZpZXdTZXRWaWV3
Q2xpZW50KToKKyAgICAgICAgKFdLVmlld0lzRm9jdXNlZCk6CisgICAgICAgIChXS1ZpZXdTZXRJ
c0ZvY3VzZWQpOgorICAgICAgICAoV0tWaWV3SXNWaXNpYmxlKToKKyAgICAgICAgKFdLVmlld1Nl
dElzVmlzaWJsZSk6CisgICAgICAgIChXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IpOgorICAg
ICAgICAoV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdLVmlld0dldENv
bnRlbnRQb3NpdGlvbik6CisgICAgICAgIChXS1ZpZXdTZXRDb250ZW50UG9zaXRpb24pOgorICAg
ICAgICAoV0tWaWV3U2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24pOgorICAgICAgICAoV0tWaWV3
VXNlclZpZXdwb3J0VG9Db250ZW50cyk6CisgICAgICAgIChXS1ZpZXdQYWludFRvQ3VycmVudEdM
Q29udGV4dCk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAgICAgICAgKFdLVmlld1NldERy
YXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQpOgorICAg
ICAgICAoV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV0tW
aWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV0tWaWV3U2V0VGhl
bWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyk6CisgICAgICAgIChXS1ZpZXdTZXRTaG93c0FzU291cmNlKToKKyAgICAgICAgKFdLVmlld0dl
dFNob3dzQXNTb3VyY2UpOgorICAgICAgICAoV0tWaWV3RXhpdEZ1bGxTY3JlZW4pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlld0VmbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V0tWaWV3UGFpbnRUb0NhaXJvU3VyZmFjZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hv
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXdFZmwuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3
OjpFd2tWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpzZXRGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFVzZXJWaWV3cG9ydFRy
YW5zbGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dXNlclZpZXdwb3J0VG9Db250
ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6ZHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RHJh
d3NUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpkcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6c2V0U2hvd3NBc1NvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnNob3dzQXNTb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpleGl0RnVsbFNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmluaXRpYWxpemVDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3Ojp0cmFuc2Zvcm1Gcm9tU2NlbmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp0cmFuc2Zvcm1Ub1NjZW5lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dXBkYXRlVmll
d3BvcnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlwU2l6ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6ZGlzcGxheVZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzY3JvbGxWaWV3
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dmlld1NpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Ojppc1ZpZXdGb2N1c2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aXNWaWV3VmlzaWJs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmlzVmlld0luV2luZG93KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6ZGlkUmVsYXVuY2hQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFn
ZUNsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnRvb2xUaXBDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmNsZWFyQWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y2FuVW5k
b1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpleGVjdXRlVW5kb1JlZG8pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzY3JlZW5Ub1dpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OndpbmRvd1RvU2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZG9u
ZVdpdGhLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRvbmVXaXRoVG91Y2hF
dmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZUNvbG9yQ2hvb3NlclByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6c2V0RmluZEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29t
RmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q3VzdG9tUmVwcmVzZW50YXRp
b25ab29tRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Zmxhc2hCYWNraW5nU3Rv
cmVVcGRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZmluZFN0cmluZ0luQ3VzdG9t
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb3VudFN0cmluZ01h
dGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
dXBkYXRlVGV4dElucHV0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpoYW5kbGVE
b3dubG9hZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb252ZXJ0VG9EZXZp
Y2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkUmVuZGVyRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3OjpwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc0ZvY3VzZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3Ojppc1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpz
ZXRDb250ZW50U2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb250ZW50
U2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRDb250ZW50UG9zaXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb250ZW50UG9zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlUmVmKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0Ns
aWVudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXdDbGllbnQuY3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0NsaWVudDo6dmlld05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGll
bnQ6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGll
bnQ6OndlYlByb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0NsaWVudDo6
d2ViUHJvY2Vzc0RpZFJlbGF1bmNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0NsaWVudDo6
ZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGll
bnQ6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0NsaWVudDo6ZGlk
Q29tcGxldGVQYWdlVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6
OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdD
bGllbnQ6OmRpZENoYW5nZVRvb2x0aXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6V2ViVmlld0VmbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdFZmw6OnNldEV3a1ZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3RWZs
OjpwYWludFRvQ2Fpcm9TdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6Y3Jl
YXRlUG9wdXBNZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3RWZsOjpjcmVhdGVD
b250ZXh0TWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6c2V0Q3Vyc29y
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6dXBkYXRlVGV4dElucHV0U3RhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3RWZsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJWaWV3RWZsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0VmbDo6
ZXdrVmlldyk6CisKIDIwMTMtMDQtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUERGUGx1Z2luOiBVcGRhdGUgUERGTGF5ZXJDb250cm9sbGVyJ3Mg
c2NhbGUgZmFjdG9ycyBlYXJsaWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDAxYzVm
NjEuLmI5YjJiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00NiwxMCArNDYsMTIg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvY2Fp
cm8vV0tJY29uRGF0YWJhc2VDYWlyby5jcHAKIAorICAgIFVJUHJvY2Vzcy9BUEkvQy9Db29yZGlu
YXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKKwogICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tQYWdl
RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tQb3B1cEl0ZW0uY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1BvcHVwTWVudUxpc3RlbmVyLmNwcAotICAgIFVJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tWaWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNw
cAogCiAgICAgVUlQcm9jZXNzL0FQSS9jcHAvZWZsL1dLRWluYVNoYXJlZFN0cmluZy5jcHAKIApA
QCAtOTQsNiArOTYsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFVJUHJv
Y2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKIAorICAgIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCisgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViVmlld0NsaWVudC5jcHAKKwogICAgIFVJUHJvY2Vzcy9lZmwvQmF0dGVyeVByb3ZpZGVy
LmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvQ29udGV4dEhpc3RvcnlDbGllbnRFZmwuY3BwCiAgICAg
VUlQcm9jZXNzL2VmbC9Db250ZXh0TWVudUNsaWVudEVmbC5jcHAKQEAgLTExMSw2ICsxMTYsNyBA
QCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVmlicmF0aW9uQ2xpZW50RWZsLmNwcAogICAg
IFVJUHJvY2Vzcy9lZmwvVmlld0NsaWVudEVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1dlYlZp
ZXdFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcAogICAgIFVJUHJv
Y2Vzcy9lZmwvV2ViQ29udGV4dE1lbnVQcm94eUVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlFZmwuY3BwCkBAIC0xMjEsOCArMTI3LDYgQEAgbGlzdChB
UFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcmVmZXJlbmNlc0Vm
bC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQcm94eUVmbC5jcHAKICAgICBVSVBy
b2Nlc3MvZWZsL1dlYlVJUG9wdXBNZW51Q2xpZW50LmNwcAotICAgIFVJUHJvY2Vzcy9lZmwvV2Vi
Vmlldy5jcHAKLSAgICBVSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwCiAKICAgICBVSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL2VmbC9XZWJJbnNwZWN0b3JTZXJ2ZXJFZmwuY3BwCiAgICAg
VUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9zb3VwL1dlYlNvY2tldFNlcnZlclNvdXAuY3BwCkBA
IC0xODQsNiArMTg4LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1No
YXJlZC9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCisg
ICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzIgog
ICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsIgogICAgICIke1dFQktJVDJf
RElSfS9VSVByb2Nlc3MvQVBJL0Mvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNz
L0FQSS9jcHAvZWZsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzkxYmIwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKQEAgLTAs
MCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorCisjaW5jbHVkZSAiV0tWaWV3LmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNs
dWRlICJXZWJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1dLVmlld1JlZiBX
S1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKK3sKKyAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0
ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICByZXR1cm4g
dG9BUEkod2ViVmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KKwordm9pZCBXS1ZpZXdJbml0
aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlh
bGl6ZSgpOworfQorCitXS1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYgdmlld1JlZikKK3sK
KyAgICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5zaXplKCkpOworfQorCit2b2lkIFdL
Vmlld1NldFNpemUoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU2l6ZSBzaXplKQoreworICAgIHRvSW1w
bCh2aWV3UmVmKS0+c2V0U2l6ZSh0b0ludFNpemUoc2l6ZSkpOworfQorCit2b2lkIFdLVmlld1Nl
dFZpZXdDbGllbnQoV0tWaWV3UmVmIHZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCogY2xpZW50
KQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZUNsaWVudChjbGllbnQpOworfQor
Citib29sIFdLVmlld0lzRm9jdXNlZChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4g
dG9JbXBsKHZpZXdSZWYpLT5pc0ZvY3VzZWQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXRJc0ZvY3Vz
ZWQoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgaXNGb2N1c2VkKQoreworICAgIHRvSW1wbCh2aWV3
UmVmKS0+c2V0Rm9jdXNlZChpc0ZvY3VzZWQpOworfQorCitib29sIFdLVmlld0lzVmlzaWJsZShX
S1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5pc1Zpc2li
bGUoKTsKK30KKwordm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmIHZpZXdSZWYsIGJv
b2wgaXNWaXNpYmxlKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VmlzaWJsZShpc1Zpc2li
bGUpOworfQorCitmbG9hdCBXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVmIHZp
ZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFNjYWxlRmFjdG9y
KCk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiB2aWV3
UmVmLCBmbG9hdCBzY2FsZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRTY2Fs
ZUZhY3RvcihzY2FsZSk7Cit9CisKK1dLUG9pbnQgV0tWaWV3R2V0Q29udGVudFBvc2l0aW9uKFdL
Vmlld1JlZiB2aWV3UmVmKQoreworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHJlc3Vs
dCA9IHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFdLUG9p
bnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOworfQorCit2b2lkIFdLVmlld1NldENvbnRl
bnRQb3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgV0tQb2ludCBwb3NpdGlvbikKK3sKKyAgICB0
b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KHBv
c2l0aW9uLngsIHBvc2l0aW9uLnkpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRU
cmFuc2xhdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgZG91YmxlIHR4LCBkb3VibGUgdHkpCit7Cisg
ICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbih0eCwgdHkpOwor
fQorCitXS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmIHZpZXdS
ZWYsIFdLUG9pbnQgcG9pbnQpCit7CisgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHJlc3Vs
dCA9IHRvSW1wbCh2aWV3UmVmKS0+dXNlclZpZXdwb3J0VG9Db250ZW50cyh0b0ludFBvaW50KHBv
aW50KSk7CisgICAgcmV0dXJuIFdLUG9pbnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOwor
fQorCit2b2lkIFdLVmlld1BhaW50VG9DdXJyZW50R0xDb250ZXh0KFdLVmlld1JlZiB2aWV3UmVm
KQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKK30K
KworV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0
dXJuIHRvSW1wbCh2aWV3UmVmKS0+cGFnZVJlZigpOworfQorCit2b2lkIFdLVmlld1NldERyYXdz
QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2
aWV3UmVmKS0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZsYWcpOworfQorCitib29sIFdLVmlld0dldERy
YXdzQmFja2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZp
ZXdSZWYpLT5kcmF3c0JhY2tncm91bmQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXREcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZChXS1ZpZXdSZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRv
SW1wbCh2aWV3UmVmKS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoZmxhZyk7Cit9CisK
K2Jvb2wgV0tWaWV3R2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmIHZpZXdS
ZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmQoKTsKK30KKwordm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYs
IFdLU3RyaW5nUmVmIHRoZW1lKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRo
KHRvSW1wbCh0aGVtZSktPnN0cmluZygpKTsKK30KKwordm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBs
KHZpZXdSZWYpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwor
dm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYg
dmlld1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdS
ZWYgdmlld1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0U2hvd3NB
c1NvdXJjZShmbGFnKTsKK30KKworYm9vbCBXS1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1Jl
ZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPnNob3dzQXNTb3VyY2Uo
KTsKK30KKwordm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlld1JlZikKK3sK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdG9JbXBsKHZpZXdSZWYpLT5leGl0RnVs
bFNjcmVlbigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlld1JlZik7CisjZW5kaWYKK30K
KworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tWaWV3
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5ZDdhOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9Db29yZGluYXRlZEdyYXBo
aWNzL1dLVmlldy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXS1ZpZXdfaAorI2RlZmluZSBXS1Zp
ZXdfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dL
R2VvbWV0cnkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgor
Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tWaWV3Vmlld05lZWRzRGlzcGxheUNh
bGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IGFyZWEsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwordHlwZWRlZiB2b2lkICgqV0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxi
YWNrKShXS1ZpZXdSZWYgdmlldywgV0tTaXplIHNpemUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OwordHlwZWRlZiB2b2lkICgqV0tWaWV3V2ViUHJvY2Vzc0NyYXNoZWRDYWxsYmFjaykoV0tWaWV3
UmVmIHZpZXcsIFdLVVJMUmVmIHVybCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVm
IHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNhbGxiYWNrKShXS1Zp
ZXdSZWYgdmlldywgV0tQb2ludCBwb3NpdGlvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0
eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkUmVuZGVyRnJhbWVDYWxsYmFjaykoV0tWaWV3UmVm
IHZpZXcsIFdLU2l6ZSBjb250ZW50c1NpemUsIFdLUmVjdCBjb3ZlcmVkUmVjdCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlVmlld3Bv
cnRBdHRyaWJ1dGVzQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBXS1ZpZXdwb3J0QXR0cmlidXRl
c1JlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdl
RGlkQ2hhbmdlVG9vbHRpcENhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTdHJpbmdSZWYgbmV3
VG9vbHRpcCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3N0cnVjdCBXS1ZpZXdDbGllbnQg
eworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
ZXJzaW9uOworICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGllbnRJbmZvOworCisgICAgLy8gVmVyc2lvbiAwCisgICAgV0tWaWV3Vmlld05lZWRz
RGlzcGxheUNhbGxiYWNrICAgICAgICAgICAgICAgICAgIHZpZXdOZWVkc0Rpc3BsYXk7CisgICAg
V0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNrICAgICAgICAgIGRpZENoYW5n
ZUNvbnRlbnRzU2l6ZTsKKyAgICBXS1ZpZXdXZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrICAgICAg
ICAgICAgICAgICAgd2ViUHJvY2Vzc0NyYXNoZWQ7CisgICAgV0tWaWV3Q2FsbGJhY2sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYlByb2Nlc3NEaWRSZWxhdW5jaDsKKyAgICBX
S1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbkNhbGxiYWNrICAgICAgZGlkQ2hhbmdl
Q29udGVudHNQb3NpdGlvbjsKKyAgICBXS1ZpZXdQYWdlRGlkUmVuZGVyRnJhbWVDYWxsYmFjayAg
ICAgICAgICAgICAgICAgZGlkUmVuZGVyRnJhbWU7CisgICAgV0tWaWV3Q2FsbGJhY2sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb247Cisg
ICAgV0tWaWV3UGFnZURpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlc0NhbGxiYWNrICAgIGRpZENo
YW5nZVZpZXdwb3J0QXR0cmlidXRlczsKKyAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlVG9vbHRpcENh
bGxiYWNrICAgICAgICAgICAgICAgZGlkQ2hhbmdlVG9vbHRpcDsKK307Cit0eXBlZGVmIHN0cnVj
dCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OworCitlbnVtIHsga1dLVmlld0NsaWVudEN1cnJl
bnRWZXJzaW9uID0gMCB9OworCitXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKKworV0tfRVhQT1JU
IHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgV0tTaXplIFdL
Vmlld0dldFNpemUoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFNpemUoV0tW
aWV3UmVmLCBXS1NpemUgc2l6ZSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFZpZXdDbGll
bnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKKworV0tfRVhQT1JUIGJvb2wgV0tW
aWV3SXNGb2N1c2VkKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc0ZvY3Vz
ZWQoV0tWaWV3UmVmLCBib29sKTsKKworV0tfRVhQT1JUIGJvb2wgV0tWaWV3SXNWaXNpYmxlKFdL
Vmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmLCBi
b29sKTsKKworV0tfRVhQT1JUIGZsb2F0IFdLVmlld0dldENvbnRlbnRTY2FsZUZhY3RvcihXS1Zp
ZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmll
d1JlZiwgZmxvYXQpOworCitXS19FWFBPUlQgV0tQb2ludCBXS1ZpZXdHZXRDb250ZW50UG9zaXRp
b24oV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldENvbnRlbnRQb3NpdGlvbihX
S1ZpZXdSZWYsIFdLUG9pbnQpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRVc2VyVmlld3Bv
cnRUcmFuc2xhdGlvbihXS1ZpZXdSZWYsIGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKK1dLX0VYUE9S
VCBXS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmLCBXS1BvaW50
KTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFpbnRUb0N1cnJlbnRHTENvbnRleHQoV0tWaWV3
UmVmKTsKKworV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7CisK
K1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVm
KTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiwg
Ym9vbCk7CitXS19FWFBPUlQgYm9vbCBXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQoV0tWaWV3UmVm
KTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQo
V0tWaWV3UmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdLVmlld0dldERyYXdzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQg
V0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKKwor
V0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYsIGJvb2wpOwor
V0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOworCitXS19F
WFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOworCisjaWZkZWYgX19j
cGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjg2NzQxMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXS1ZpZXcuaCIKLQotI2luY2x1ZGUgIkV3a1ZpZXcu
aCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRl
LmgiCi0jaW5jbHVkZSAiZXdrX3BhZ2VfZ3JvdXBfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYktp
dDIvV0tJbWFnZUNhaXJvLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLVdLVmlld1Jl
ZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZikKLXsKLSAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9IFdlYlZpZXc6OmNy
ZWF0ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKLSAgICByZXR1
cm4gdG9BUEkod2ViVmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKLX0KLQotdm9pZCBXS1ZpZXdJ
bml0aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5p
dGlhbGl6ZSgpOwotfQotCi1XS1NpemUgV0tWaWV3R2V0U2l6ZShXS1ZpZXdSZWYgdmlld1JlZikK
LXsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5zaXplKCkpOwotfQotCi12b2lk
IFdLVmlld1NldFNpemUoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU2l6ZSBzaXplKQotewotICAgIHRv
SW1wbCh2aWV3UmVmKS0+c2V0U2l6ZSh0b0ludFNpemUoc2l6ZSkpOwotfQotCi12b2lkIFdLVmll
d1NldFZpZXdDbGllbnQoV0tWaWV3UmVmIHZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCogY2xp
ZW50KQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZUNsaWVudChjbGllbnQpOwot
fQotCi1ib29sIFdLVmlld0lzRm9jdXNlZChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1
cm4gdG9JbXBsKHZpZXdSZWYpLT5pc0ZvY3VzZWQoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRJc0Zv
Y3VzZWQoV0tWaWV3UmVmIHZpZXdSZWYsIGJvb2wgaXNGb2N1c2VkKQotewotICAgIHRvSW1wbCh2
aWV3UmVmKS0+c2V0Rm9jdXNlZChpc0ZvY3VzZWQpOwotfQotCi1ib29sIFdLVmlld0lzVmlzaWJs
ZShXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5pc1Zp
c2libGUoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRJc1Zpc2libGUoV0tWaWV3UmVmIHZpZXdSZWYs
IGJvb2wgaXNWaXNpYmxlKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VmlzaWJsZShpc1Zp
c2libGUpOwotfQotCi1mbG9hdCBXS1ZpZXdHZXRDb250ZW50U2NhbGVGYWN0b3IoV0tWaWV3UmVm
IHZpZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFNjYWxlRmFj
dG9yKCk7Ci19Ci0KLXZvaWQgV0tWaWV3U2V0Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiB2
aWV3UmVmLCBmbG9hdCBzY2FsZSkKLXsKLSAgICB0b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRT
Y2FsZUZhY3RvcihzY2FsZSk7Ci19Ci0KLVdLUG9pbnQgV0tWaWV3R2V0Q29udGVudFBvc2l0aW9u
KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHJl
c3VsdCA9IHRvSW1wbCh2aWV3UmVmKS0+Y29udGVudFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFdL
UG9pbnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkpOwotfQotCi12b2lkIFdLVmlld1NldENv
bnRlbnRQb3NpdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgV0tQb2ludCBwb3NpdGlvbikKLXsKLSAg
ICB0b0ltcGwodmlld1JlZiktPnNldENvbnRlbnRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50
KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRVc2VyVmlld3Bv
cnRUcmFuc2xhdGlvbihXS1ZpZXdSZWYgdmlld1JlZiwgZG91YmxlIHR4LCBkb3VibGUgdHkpCi17
Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbih0eCwgdHkp
OwotfQotCi1XS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29udGVudHMoV0tWaWV3UmVmIHZp
ZXdSZWYsIFdLUG9pbnQgcG9pbnQpCi17Ci0gICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHJl
c3VsdCA9IHRvSW1wbCh2aWV3UmVmKS0+dXNlclZpZXdwb3J0VG9Db250ZW50cyh0b0ludFBvaW50
KHBvaW50KSk7Ci0gICAgcmV0dXJuIFdLUG9pbnRNYWtlKHJlc3VsdC54KCksIHJlc3VsdC55KCkp
OwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBXS1ZpZXdQYWlu
dFRvQ3VycmVudEdMQ29udGV4dChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICB0b0ltcGwodmll
d1JlZiktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXS1Zp
ZXdQYWludFRvQ2Fpcm9TdXJmYWNlKFdLVmlld1JlZiB2aWV3UmVmLCBjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5wYWludFRvQ2Fpcm9TdXJmYWNlKHN1
cmZhY2UpOwotfQotCi1XS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikK
LXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5wYWdlUmVmKCk7Ci19Ci0KLXZvaWQgV0tW
aWV3U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17Ci0g
ICAgdG9JbXBsKHZpZXdSZWYpLT5zZXREcmF3c0JhY2tncm91bmQoZmxhZyk7Ci19Ci0KLWJvb2wg
V0tWaWV3R2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVy
biB0b0ltcGwodmlld1JlZiktPmRyYXdzQmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdLVmlld1Nl
dERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcp
Ci17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChm
bGFnKTsKLX0KLQotYm9vbCBXS1ZpZXdHZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZChXS1Zp
ZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5kcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdS
ZWYgdmlld1JlZiwgV0tTdHJpbmdSZWYgdGhlbWUpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYpLT5z
ZXRUaGVtZVBhdGgodG9JbXBsKHRoZW1lKS0+c3RyaW5nKCkpOwotfQotCi12b2lkIFdLVmlld1N1
c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKLXsK
LSAgICB0b0ltcGwodmlld1JlZiktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOwotfQotCi12b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25z
KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBXS1ZpZXdTZXRTaG93c0FzU291
cmNlKFdLVmlld1JlZiB2aWV3UmVmLCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHZpZXdSZWYp
LT5zZXRTaG93c0FzU291cmNlKGZsYWcpOwotfQotCi1ib29sIFdLVmlld0dldFNob3dzQXNTb3Vy
Y2UoV0tWaWV3UmVmIHZpZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+c2hv
d3NBc1NvdXJjZSgpOwotfQotCi12b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2
aWV3UmVmKQotewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB0b0ltcGwodmlld1Jl
ZiktPmV4aXRGdWxsU2NyZWVuKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2aWV3UmVmKTsK
LSNlbmRpZgotfQotCi1XS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2
aWV3UmVmKQotewotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSB0b0V3a1ZpZXcodG9JbXBsKHZpZXdS
ZWYpLT5ldmFzT2JqZWN0KCkpOwotICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3Vy
ZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwYWM5ZDMzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpZm5kZWYgV0tWaWV3X2gKLSNkZWZpbmUgV0tWaWV3X2gKLQotI2luY2x1ZGUgPFdlYktpdDIv
V0tCYXNlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS0dlb21ldHJ5Lmg+Ci0KLXR5cGVkZWYgc3Ry
dWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi10eXBlZGVmIHZvaWQgKCpXS1ZpZXdDYWxsYmFjayko
V0tWaWV3UmVmIHZpZXcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgq
V0tWaWV3Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IGFy
ZWEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tWaWV3UGFnZURp
ZENoYW5nZUNvbnRlbnRzU2l6ZUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTaXplIHNpemUs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tWaWV3V2ViUHJvY2Vz
c0NyYXNoZWRDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLVVJMUmVmIHVybCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVu
dHNQb3NpdGlvbkNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tQb2ludCBwb3NpdGlvbiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkUmVuZGVy
RnJhbWVDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLU2l6ZSBjb250ZW50c1NpemUsIFdLUmVj
dCBjb3ZlcmVkUmVjdCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpX
S1ZpZXdQYWdlRGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzQ2FsbGJhY2spKFdLVmlld1JlZiB2
aWV3LCBXS1ZpZXdwb3J0QXR0cmlidXRlc1JlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci10
eXBlZGVmIHZvaWQgKCpXS1ZpZXdQYWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxiYWNrKShXS1ZpZXdS
ZWYgdmlldywgV0tTdHJpbmdSZWYgbmV3VG9vbHRpcCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
Ci0KLXN0cnVjdCBXS1ZpZXdDbGllbnQgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOwotICAgIGNvbnN0IHZvaWQqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOwotCi0gICAgLy8gVmVyc2lv
biAwCi0gICAgV0tWaWV3Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrICAgICAgICAgICAgICAgICAg
IHZpZXdOZWVkc0Rpc3BsYXk7Ci0gICAgV0tWaWV3UGFnZURpZENoYW5nZUNvbnRlbnRzU2l6ZUNh
bGxiYWNrICAgICAgICAgIGRpZENoYW5nZUNvbnRlbnRzU2l6ZTsKLSAgICBXS1ZpZXdXZWJQcm9j
ZXNzQ3Jhc2hlZENhbGxiYWNrICAgICAgICAgICAgICAgICAgd2ViUHJvY2Vzc0NyYXNoZWQ7Ci0g
ICAgV0tWaWV3Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYlBy
b2Nlc3NEaWRSZWxhdW5jaDsKLSAgICBXS1ZpZXdQYWdlRGlkQ2hhbmdlQ29udGVudHNQb3NpdGlv
bkNhbGxiYWNrICAgICAgZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbjsKLSAgICBXS1ZpZXdQYWdl
RGlkUmVuZGVyRnJhbWVDYWxsYmFjayAgICAgICAgICAgICAgICAgZGlkUmVuZGVyRnJhbWU7Ci0g
ICAgV0tWaWV3Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZENv
bXBsZXRlUGFnZVRyYW5zaXRpb247Ci0gICAgV0tWaWV3UGFnZURpZENoYW5nZVZpZXdwb3J0QXR0
cmlidXRlc0NhbGxiYWNrICAgIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlczsKLSAgICBXS1Zp
ZXdQYWdlRGlkQ2hhbmdlVG9vbHRpcENhbGxiYWNrICAgICAgICAgICAgICAgZGlkQ2hhbmdlVG9v
bHRpcDsKLX07Ci10eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwotCi1l
bnVtIHsga1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwotCi1XS19FWFBPUlQgV0tW
aWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYp
OwotCi1XS19FWFBPUlQgV0tTaXplIFdLVmlld0dldFNpemUoV0tWaWV3UmVmKTsKLVdLX0VYUE9S
VCB2b2lkIFdLVmlld1NldFNpemUoV0tWaWV3UmVmLCBXS1NpemUgc2l6ZSk7Ci0KLVdLX0VYUE9S
VCB2b2lkIFdLVmlld1NldFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQq
KTsKLQotV0tfRVhQT1JUIGJvb2wgV0tWaWV3SXNGb2N1c2VkKFdLVmlld1JlZik7Ci1XS19FWFBP
UlQgdm9pZCBXS1ZpZXdTZXRJc0ZvY3VzZWQoV0tWaWV3UmVmLCBib29sKTsKLQotV0tfRVhQT1JU
IGJvb2wgV0tWaWV3SXNWaXNpYmxlKFdLVmlld1JlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1ZpZXdT
ZXRJc1Zpc2libGUoV0tWaWV3UmVmLCBib29sKTsKLQotV0tfRVhQT1JUIGZsb2F0IFdLVmlld0dl
dENvbnRlbnRTY2FsZUZhY3RvcihXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0
Q29udGVudFNjYWxlRmFjdG9yKFdLVmlld1JlZiwgZmxvYXQpOwotCi1XS19FWFBPUlQgV0tQb2lu
dCBXS1ZpZXdHZXRDb250ZW50UG9zaXRpb24oV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdL
Vmlld1NldENvbnRlbnRQb3NpdGlvbihXS1ZpZXdSZWYsIFdLUG9pbnQpOwotCi1XS19FWFBPUlQg
dm9pZCBXS1ZpZXdTZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihXS1ZpZXdSZWYsIGRvdWJsZSB0
eCwgZG91YmxlIHR5KTsKLVdLX0VYUE9SVCBXS1BvaW50IFdLVmlld1VzZXJWaWV3cG9ydFRvQ29u
dGVudHMoV0tWaWV3UmVmLCBXS1BvaW50KTsKLQotV0tfRVhQT1JUIHZvaWQgV0tWaWV3UGFpbnRU
b0N1cnJlbnRHTENvbnRleHQoV0tWaWV3UmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLVmlld1BhaW50
VG9DYWlyb1N1cmZhY2UoV0tWaWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqKTsKLQotV0tfRVhQT1JU
IFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7Ci0KLVdLX0VYUE9SVCB2b2lkIFdL
Vmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsKLQotV0tfRVhQT1JUIHZv
aWQgV0tWaWV3U2V0RHJhd3NCYWNrZ3JvdW5kKFdLVmlld1JlZiwgYm9vbCk7Ci1XS19FWFBPUlQg
Ym9vbCBXS1ZpZXdHZXREcmF3c0JhY2tncm91bmQoV0tWaWV3UmVmKTsKLQotV0tfRVhQT1JUIHZv
aWQgV0tWaWV3U2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoV0tWaWV3UmVmLCBib29sKTsK
LVdLX0VYUE9SVCBib29sIFdLVmlld0dldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKFdLVmll
d1JlZik7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyhXS1ZpZXdSZWYpOwotV0tfRVhQT1JUIHZvaWQgV0tWaWV3UmVzdW1lQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tW
aWV3U2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYsIGJvb2wpOwotV0tfRVhQT1JUIGJvb2wgV0tW
aWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgdm9pZCBXS1ZpZXdF
eGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwotCi1XS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdD
cmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRp
ZgotCi0jZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wNWMxMTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXdFZmwuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS1ZpZXdFZmwuaCIKKworI2lu
Y2x1ZGUgIkV3a1ZpZXcuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJW
aWV3RWZsLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKwordm9pZCBXS1ZpZXdQYWludFRvQ2Fpcm9TdXJmYWNlKFdLVmlld1Jl
ZiB2aWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgc3RhdGljX2Nhc3Q8
V2ViVmlld0VmbCo+KHRvSW1wbCh2aWV3UmVmKSktPnBhaW50VG9DYWlyb1N1cmZhY2Uoc3VyZmFj
ZSk7Cit9CisKK1dLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdS
ZWYpCit7CisgICAgRXdrVmlldyogZXdrVmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdFZmwqPih0
b0ltcGwodmlld1JlZikpLT5ld2tWaWV3KCk7CisgICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9t
Q2Fpcm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMg
Ki8pOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXdFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZDJlYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3RWZsLmgK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS1ZpZXdFZmxf
aAorI2RlZmluZSBXS1ZpZXdFZmxfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwor
dHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OworCisjaWZkZWYg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dLX0VYUE9SVCB2b2lkIFdLVmll
d1BhaW50VG9DYWlyb1N1cmZhY2UoV0tWaWV3UmVmLCBjYWlyb19zdXJmYWNlX3QqKTsKKworV0tf
RVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmKTsKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLVmlld0VmbF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDg4YTE1
MWYuLjcxYzMyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV0tQb3B1cEl0ZW0uaCIKICNpbmNs
dWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldLVmlldy5oIgorI2luY2x1ZGUgIldLVmlld0Vm
bC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VHcm91cC5oIgpAQCAtMjgyLDcgKzI4Myw3IEBAIEV3a1ZpZXc6OkV3a1Zp
ZXcoV0tWaWV3UmVmIHZpZXcsIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQogICAgIEFTU0VSVCht
X2NvbnRleHQpOwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgotICAgIHdl
YlZpZXcoKS0+c2V0RXdrVmlldyh0aGlzKTsKKyAgICBzdGF0aWNfY2FzdDxXZWJWaWV3RWZsKj4o
d2ViVmlldygpKS0+c2V0RXdrVmlldyh0aGlzKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzX29iamVjdF9l
dmFzX2dldChtX2V2YXNPYmplY3QpKSk7CiAgICAgaWYgKG1fZXZhc0dMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGQzMTE4MzUuLmIwZjNkM2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTI5LDcgKzI5
LDcgQEAKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKICNpbmNsdWRlICJXS0dlb21l
dHJ5LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCisj
aW5jbHVkZSAiV2ViVmlld0VmbC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRl
LmgiCiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XZWJWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Y4YTI5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViVmlldy5jcHAKQEAgLTAsMCArMSw0OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuaD4KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRl
ICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNv
bnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAgIDogbV9wYWdlKGNv
bnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFnZUdyb3VwKSkKKyAgICAsIG1fZm9jdXNlZChm
YWxzZSkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fY29udGVudFNjYWxlRmFjdG9y
KDEuMCkKK3sKKyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKKyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKworICAgIGNo
YXIqIGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01QT1NJ
VElOR19ERUJVR19WSVNVQUxTIik7CisgICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdW
aXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEi
KTsKKyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGlu
Z0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOworICAgIG1fcGFnZS0+cGFnZUdyb3Vw
KCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShz
aG93RGVidWdWaXN1YWxzKTsKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworICAgIGlmICht
X3BhZ2UtPmlzQ2xvc2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y2xvc2Uo
KTsKK30KKwordm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKCkKK3sKKyAgICBtX3BhZ2UtPmluaXRp
YWxpemVXZWJQYWdlKCk7CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUg
PSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSkKKyAgICAgICAgc2NlbmUtPnNldEFjdGl2ZSh0
cnVlKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUpCit7CisgICAgbV9zaXplID0gc2l6ZTsKKworICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZSgp
OworfQorCit2b2lkIFdlYlZpZXc6OnNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKQoreworICAgIGlm
IChtX2ZvY3VzZWQgPT0gZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mb2N1c2Vk
ID0gZm9jdXNlZDsKKyAgICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6
OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgaWYgKG1fdmlz
aWJsZSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Zpc2libGUgPSB2aXNp
YmxlOworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lz
VmlzaWJsZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24o
ZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0gPSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSh0eCwgdHkpOworfQorCitJbnRQb2ludCBX
ZWJWaWV3Ojp1c2VyVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQp
OworfQorCit2b2lkIFdlYlZpZXc6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKK3sKKyAgICBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0gY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KCk7CisgICAgaWYgKCFzY2VuZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gY2xlYW4gdXAgdGhpcyBjb2RlIGFzIGl0IGlzIHNwbGl0IG92ZXIgQ29vcmRHZngg
YW5kIFBhZ2UuCisgICAgc2NlbmUtPnNldERyYXdzQmFja2dyb3VuZChtX3BhZ2UtPmRyYXdzQmFj
a2dyb3VuZCgpKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0ID0gbV91c2VyVmlld3Bv
cnRUcmFuc2Zvcm0ubWFwUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkpOworCisgICAg
c2NlbmUtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybVRvU2NlbmUoKS50b1RyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIC8qIG9wYWNpdHkgKi8gMSwgdmlld3BvcnQpOworfQorCit2b2lk
IFdlYlZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmIHRoZW1lKQoreworICAgIG1fcGFn
ZS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXREcmF3c0JhY2tn
cm91bmQoYm9vbCBkcmF3c0JhY2tncm91bmQpCit7CisgICAgbV9wYWdlLT5zZXREcmF3c0JhY2tn
cm91bmQoZHJhd3NCYWNrZ3JvdW5kKTsKK30KKworYm9vbCBXZWJWaWV3OjpkcmF3c0JhY2tncm91
bmQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPmRyYXdzQmFja2dyb3VuZCgpOworfQor
Cit2b2lkIFdlYlZpZXc6OnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKQoreworICAgIG1fcGFnZS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tn
cm91bmQodHJhbnNwYXJlbnRCYWNrZ3JvdW5kKTsKK30KKworYm9vbCBXZWJWaWV3OjpkcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+ZHJhd3NU
cmFuc3BhcmVudEJhY2tncm91bmQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQoreworICAgIG1fcGFnZS0+c3VzcGVuZEFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQoreworICAgIG1fcGFnZS0+cmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRTaG93c0FzU291
cmNlKGJvb2wgc2hvd3NBc1NvdXJjZSkKK3sKKyAgICBtX3BhZ2UtPnNldE1haW5GcmFtZUluVmll
d1NvdXJjZU1vZGUoc2hvd3NBc1NvdXJjZSk7Cit9CisKK2Jvb2wgV2ViVmlldzo6c2hvd3NBc1Nv
dXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lSW5WaWV3U291cmNl
TW9kZSgpOworfQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQordm9pZCBXZWJWaWV3Ojpl
eGl0RnVsbFNjcmVlbigpCit7CisgICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5yZXF1
ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYlZpZXc6OmluaXRpYWxp
emVDbGllbnQoY29uc3QgV0tWaWV3Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZENoYW5nZUNvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIG1fY2xpZW50LmRpZENoYW5n
ZUNvbnRlbnRzU2l6ZSh0aGlzLCBzaXplKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIFdlYlZpZXc6
OnRyYW5zZm9ybUZyb21TY2VuZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRyYW5zZm9ybVRvU2Nl
bmUoKS5pbnZlcnNlKCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBXZWJWaWV3Ojp0cmFuc2Zvcm1U
b1NjZW5lKCkgY29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBt
X3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
ID0gY29udGVudFBvc2l0aW9uKCk7CisgICAgdHJhbnNmb3JtLnNjYWxlKG1fcGFnZS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtcG9zaXRpb24ueCgpLCAt
cG9zaXRpb24ueSgpKTsKKyAgICB0cmFuc2Zvcm0uc2NhbGUoY29udGVudFNjYWxlRmFjdG9yKCkp
OworCisgICAgcmV0dXJuIHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpOworfQorCitDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqIFdlYlZpZXc6OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgp
Cit7CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdB
cmVhKCk7CisgICAgaWYgKCFkcmF3aW5nQXJlYSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkg
PSBkcmF3aW5nQXJlYS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICBpZiAo
IWxheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbGF5
ZXJUcmVlSG9zdFByb3h5LT5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKK30KKwordm9pZCBX
ZWJWaWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUoKQoreworICAgIGlmIChEcmF3aW5nQXJlYVByb3h5
KiBkcmF3aW5nQXJlYSA9IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkgeworICAgICAgICAvLyBXZWIg
UHJvY2VzcyBleHBlY3RzIHNpemVzIGluIFVJIHVuaXRzLCBhbmQgbm90IHJhdyBkZXZpY2UgdW5p
dHMuCisgICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKGRpcFNpemUo
KSksIEludFNpemUoKSwgSW50U2l6ZSgpKTsKKyAgICAgICAgZHJhd2luZ0FyZWEtPnNldFZpc2li
bGVDb250ZW50c1JlY3QoRmxvYXRSZWN0KGNvbnRlbnRQb3NpdGlvbigpLCBkaXBTaXplKCkpLCBG
bG9hdFBvaW50KCkpOworICAgIH0KK30KKworaW5saW5lIFdlYkNvcmU6OkZsb2F0U2l6ZSBXZWJW
aWV3OjpkaXBTaXplKCkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgZGlwU2l6ZShzaXplKCkpOwor
ICAgIGRpcFNpemUuc2NhbGUoMSAvIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAg
ICByZXR1cm4gZGlwU2l6ZTsKK30KKworLy8gUGFnZSBDbGllbnQKKworUGFzc093blB0cjxEcmF3
aW5nQXJlYVByb3h5PiBXZWJWaWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKK3sKKyAgICBP
d25QdHI8RHJhd2luZ0FyZWFQcm94eT4gZHJhd2luZ0FyZWEgPSBEcmF3aW5nQXJlYVByb3h5SW1w
bDo6Y3JlYXRlKHBhZ2UoKSk7CisgICAgcmV0dXJuIGRyYXdpbmdBcmVhLnJlbGVhc2UoKTsKK30K
Kwordm9pZCBXZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGFyZWEpCit7CisgICAgbV9jbGllbnQudmlld05lZWRzRGlzcGxheSh0aGlzLCBhcmVhKTsK
K30KKwordm9pZCBXZWJWaWV3OjpkaXNwbGF5VmlldygpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBXZWJWaWV3OjpzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQoreworICAgIHNldFZpZXdOZWVk
c0Rpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgV2ViVmlldzo6dmll
d1NpemUoKQoreworICAgIHJldHVybiByb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpOworfQorCiti
b29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1c2VkKCkK
K3sKKyAgICByZXR1cm4gaXNGb2N1c2VkKCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNWaWV3Vmlz
aWJsZSgpCit7CisgICAgcmV0dXJuIGlzVmlzaWJsZSgpOworfQorCitib29sIFdlYlZpZXc6Omlz
Vmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFdlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgpCit7CisgICAgbV9jbGllbnQu
d2ViUHJvY2Vzc0NyYXNoZWQodGhpcywgbV9wYWdlLT51cmxBdFByb2Nlc3NFeGl0KCkpOworfQor
Cit2b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2VzcygpCit7CisgICAgbV9jbGllbnQud2Vi
UHJvY2Vzc0RpZFJlbGF1bmNoKHRoaXMpOworfQorCit2b2lkIFdlYlZpZXc6OnBhZ2VDbG9zZWQo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dG9vbFRpcENo
YW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKQoreworICAgIG1f
Y2xpZW50LmRpZENoYW5nZVRvb2x0aXAodGhpcywgbmV3VG9vbFRpcCk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnJl
Z2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5k
LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAgICBtX3VuZG9Db250
cm9sbGVyLnJlZ2lzdGVyRWRpdENvbW1hbmQoY29tbWFuZCwgdW5kb09yUmVkbyk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQoreworICAgIG1fdW5kb0NvbnRyb2xs
ZXIuY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKK30KKworYm9vbCBXZWJWaWV3OjpjYW5VbmRvUmVk
byhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAgICByZXR1cm4gbV91
bmRvQ29udHJvbGxlci5jYW5VbmRvUmVkbyh1bmRvT3JSZWRvKTsKK30KKwordm9pZCBXZWJWaWV3
OjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7
CisgICAgbV91bmRvQ29udHJvbGxlci5leGVjdXRlVW5kb1JlZG8odW5kb09yUmVkbyk7Cit9CisK
K0ludFBvaW50IFdlYlZpZXc6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBwb2ludDsKK30KKworSW50UmVj
dCBXZWJWaWV3Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZG9u
ZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQg
V2ViVmlldzo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBi
b29sIC8qd2FzRXZlbnRIYW5kbGVkKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNl
bmRpZgorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1
cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBXZWJW
aWV3OjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCisjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfQ09MT1IpCitQYXNzUmVmUHRyPFdlYkNvbG9yQ2hvb3NlclByb3h5PiBXZWJWaWV3OjpjcmVh
dGVDb2xvckNob29zZXJQcm94eShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9yKFBh
c3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KGNvbnN0IExheWVyVHJlZUNvbnRleHQmKQoreworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUqIHNjZW5lID0gY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkpCisgICAgICAgIHNjZW5l
LT5zZXRBY3RpdmUodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2Vu
ZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpKQorICAgICAgICBzY2VuZS0+c2V0QWN0aXZl
KGZhbHNlKTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZEZpbmlzaExvYWRpbmdE
YXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworZG91YmxlIFdl
YlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXN0b21SZXBy
ZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojpm
aW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9u
cywgdW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3
Ojpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYs
IEZpbmRPcHRpb25zLCB1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYlZpZXc6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFBy
b3h5KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJlY3QgV2ViVmlldzo6
Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB1c2VyUmVjdCkKK3sKKyAgICBp
ZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCByZXN1bHQg
PSB1c2VyUmVjdDsKKyAgICAgICAgcmVzdWx0LnNjYWxlKG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIC8vIExlZ2FjeSBtb2Rl
LgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHVzZXJSZWN0OworfQorCitGbG9h
dFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgZGV2aWNl
UmVjdCkKK3sKKyAgICBpZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgpKSB7CisgICAgICAgIEZs
b2F0UmVjdCByZXN1bHQgPSBkZXZpY2VSZWN0OworICAgICAgICByZXN1bHQuc2NhbGUoMSAvIG1f
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIC8vIExlZ2FjeSBtb2RlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGRldmljZVJlY3Q7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0
aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cikKK3sKKyAgICBtX2Ns
aWVudC5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXModGhpcywgYXR0cik7Cit9CisKK3ZvaWQg
V2ViVmlldzo6cGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQor
eworICAgIEZsb2F0UG9pbnQgdWlQb3NpdGlvbihwb3NpdGlvbik7CisgICAgdWlQb3NpdGlvbi5z
Y2FsZShjb250ZW50U2NhbGVGYWN0b3IoKSwgY29udGVudFNjYWxlRmFjdG9yKCkpOworICAgIHNl
dENvbnRlbnRQb3NpdGlvbih1aVBvc2l0aW9uKTsKKworICAgIG1fY2xpZW50LmRpZENoYW5nZUNv
bnRlbnRzUG9zaXRpb24odGhpcywgcG9zaXRpb24pOworfQorCit2b2lkIFdlYlZpZXc6OmRpZFJl
bmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCit7CisgICAgbV9jbGllbnQuZGlkUmVuZGVyRnJh
bWUodGhpcywgY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkKK3sKKyAgICBtX2NsaWVudC5kaWRDb21wbGV0
ZVBhZ2VUcmFuc2l0aW9uKHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTdiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmgKQEAgLTAs
MCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVj
dHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld19o
CisjZGVmaW5lIFdlYlZpZXdfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiRGVmYXVsdFVuZG9Db250cm9sbGVyLmgi
CisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAi
V2ViVmlld0NsaWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXgu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBUeXBl
ZEFQSU9iamVjdDxBUElPYmplY3Q6OlR5cGVWaWV3PiwgcHVibGljIFBhZ2VDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YlZpZXc+IGNyZWF0ZShXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisKKyAgICB2b2lkIGlu
aXRpYWxpemUoKTsKKworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CisgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorCisgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2ZvY3VzZWQ7IH0K
KyAgICB2b2lkIHNldEZvY3VzZWQoYm9vbCk7CisKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQorICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKworICAg
IHZvaWQgc2V0Q29udGVudFNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1fY29udGVu
dFNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KKyAgICBmbG9hdCBjb250ZW50U2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTY2FsZUZhY3RvcjsgfQorCisgICAgdm9pZCBz
ZXRDb250ZW50UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pIHsg
bV9jb250ZW50UG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIGNvbnRlbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFBvc2l0aW9u
OyB9CisKKyAgICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJsZSB0eCwgZG91
YmxlIHR5KTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCB1c2VyVmlld3BvcnRUb0NvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50
R0xDb250ZXh0KCk7CisKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRv
QVBJKG1fcGFnZS5nZXQoKSk7IH0KKworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wp
OworICAgIGJvb2wgZHJhd3NCYWNrZ3JvdW5kKCkgY29uc3Q7CisgICAgdm9pZCBzZXREcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZChib29sKTsKKyAgICBib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsK
KworICAgIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAg
dm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworCisgICAgdm9pZCBz
ZXRTaG93c0FzU291cmNlKGJvb2wpOworICAgIGJvb2wgc2hvd3NBc1NvdXJjZSgpIGNvbnN0Owor
CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsK
KyNlbmRpZgorCisgICAgLy8gVmlldyBjbGllbnQuCisgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50
KGNvbnN0IFdLVmlld0NsaWVudCopOworCisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1
cm4gbV9wYWdlLmdldCgpOyB9CisKKyAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIGJlY29tZSBwcml2
YXRlIHdoZW4gV2ViIEV2ZW50cyBjcmVhdGlvbiBpcyBtb3ZlZCB0byBXZWJWaWV3LgorICAgIFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdDsKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0OworCitwcm90
ZWN0ZWQ6CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisgICAgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUo
KTsKKworICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CisgICAgV2ViQ29yZTo6RmxvYXRT
aXplIGRpcFNpemUoKSBjb25zdDsKKyAgICAvLyBQYWdlQ2xpZW50CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5VmlldygpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCBib29sIGNhblNjcm9sbFZpZXcoKSBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNW
aWV3Rm9jdXNlZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCkgT1ZFUlJJREU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBw
YWdlQ2xvc2VkKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJz
b3ImKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKGJvb2wpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdw
b3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2Vi
RWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIGNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJl
ZG8pIE9WRVJSSURFOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRv
RGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2Ny
ZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkg
T1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25s
b2FkUHJveHkqKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50
KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKSBPVkVSUklERTsKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29u
c3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBPVkVSUklERTsK
KyNlbmRpZgorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVh
dGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQ
YWdlUHJveHkqKSBPVkVSUklERTsKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IGNyZWF0ZUNvbG9yQ2hvb3Nl
clByb3h5KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3Is
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVh
bCB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCwg
Ym9vbCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRy
ZWVDb250ZXh0JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZv
ck1haW5GcmFtZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBjdXN0
b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBmaW5kU3RyaW5nSW5D
dXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkgT1ZFUlJJ
REU7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJWaWV3Q2xpZW50IG1fY2xpZW50OworICAgIFJlZlB0
cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKKyAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRv
Q29udHJvbGxlcjsKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3VzZXJWaWV3
cG9ydFRyYW5zZm9ybTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsgLy8gU2l6ZSBpbiBk
ZXZpY2UgdW5pdHMuCisgICAgYm9vbCBtX2ZvY3VzZWQ7CisgICAgYm9vbCBtX3Zpc2libGU7Cisg
ICAgZmxvYXQgbV9jb250ZW50U2NhbGVGYWN0b3I7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBt
X2NvbnRlbnRQb3NpdGlvbjsgLy8gUG9zaXRpb24gaW4gVUkgdW5pdHMuCit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKwor
I2VuZGlmIC8vIFdlYlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M0MzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVudC5j
cHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIldlYlZp
ZXdDbGllbnQuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQmFzZS5o
IgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2ViVmlld3BvcnRBdHRyaWJ1
dGVzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
Kwordm9pZCBXZWJWaWV3Q2xpZW50Ojp2aWV3TmVlZHNEaXNwbGF5KFdlYlZpZXcqIHZpZXcsIGNv
bnN0IEludFJlY3QmIGFyZWEpCit7CisgICAgaWYgKCFtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5KHRvQVBJ
KHZpZXcpLCB0b0FQSShhcmVhKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2Vi
Vmlld0NsaWVudDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYlZpZXcqIHZpZXcsIGNvbnN0IElu
dFNpemUmIHNpemUpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSh0
b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lk
IFdlYlZpZXdDbGllbnQ6OndlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFN0
cmluZyYgdXJsKQoreworICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LndlYlByb2Nlc3NDcmFzaGVkKHRvQVBJKHZpZXcp
LCBhZG9wdFdLKHRvQ29waWVkVVJMQVBJKHVybCkpLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZv
KTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50Ojp3ZWJQcm9jZXNzRGlkUmVsYXVuY2goV2ViVmll
dyogdmlldykKK3sKKyAgICBpZiAoIW1fY2xpZW50LndlYlByb2Nlc3NEaWRSZWxhdW5jaCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKHRvQVBJ
KHZpZXcpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50Ojpk
aWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzUG9z
aXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRz
UG9zaXRpb24odG9BUEkodmlldyksIHRvQVBJKHBvaW50KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7
Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6ZGlkUmVuZGVyRnJhbWUoV2ViVmlldyogdmlldywg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292
ZXJlZFJlY3QpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkUmVuZGVyRnJhbWUodG9BUEkodmlldyksIHRvQVBJ
KHNpemUpLCB0b0FQSShjb3ZlcmVkUmVjdCksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2
b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oV2ViVmlldyogdmll
dykKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24odG9B
UEkodmlldyksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnQ6
OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJWaWV3KiB2aWV3LCBjb25zdCBWaWV3cG9y
dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VW
aWV3cG9ydEF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFdLUmV0YWluUHRyPFdL
Vmlld3BvcnRBdHRyaWJ1dGVzUmVmPiB3a0F0dHJpYnV0ZXMgPSBhZG9wdFdLKHRvQVBJKFdlYlZp
ZXdwb3J0QXR0cmlidXRlczo6Y3JlYXRlKGF0dHJpYnV0ZXMpLmxlYWtSZWYoKSkpOworICAgIG1f
Y2xpZW50LmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyh0b0FQSSh2aWV3KSwgd2tBdHRyaWJ1
dGVzLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50
OjpkaWRDaGFuZ2VUb29sdGlwKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFN0cmluZyYgdG9vbHRpcCkK
K3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXApCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXAodG9BUEkodmlldyksIGFkb3B0V0sodG9D
b3BpZWRBUEkodG9vbHRpcCkpLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XZWJWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJWaWV3Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDRiZjRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuaApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdDbGllbnRfaAorI2RlZmluZSBXZWJWaWV3
Q2xpZW50X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkFQ
SUNsaWVudC5oIgorI2luY2x1ZGUgIldLVmlldy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIElu
dFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgVmlld3BvcnRBdHRyaWJ1dGVzOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldzsKKworY2xhc3MgV2ViVmlld0NsaWVu
dDogcHVibGljIEFQSUNsaWVudDxXS1ZpZXdDbGllbnQsIGtXS1ZpZXdDbGllbnRDdXJyZW50VmVy
c2lvbj4geworcHVibGljOgorICAgIHZvaWQgdmlld05lZWRzRGlzcGxheShXZWJWaWV3KiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKFdl
YlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9pZCB3ZWJQcm9jZXNzQ3Jh
c2hlZChXZWJWaWV3KiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgd2ViUHJvY2Vzc0Rp
ZFJlbGF1bmNoKFdlYlZpZXcqKTsKKyAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24o
V2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBkaWRSZW5kZXJG
cmFtZShXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oV2ViVmlldyopOwor
ICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYlZpZXcqLCBjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKyAgICB2b2lkIGRpZENoYW5nZVRvb2x0aXAoV2Vi
VmlldyosIGNvbnN0IFN0cmluZyYgdG9vbHRpcCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIFdl
YlZpZXdDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZTI2YWUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViVmlldy5oIgotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuaCIKLSNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXJFZmwuaCIKLSNpbmNsdWRlICJE
cmF3aW5nQXJlYVByb3h5SW1wbC5oIgotI2luY2x1ZGUgIkV3a1ZpZXcuaCIKLSNpbmNsdWRlICJJ
bnB1dE1ldGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUVmbC5o
IgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVudUxpc3Rl
bmVyRWZsLmgiCi0jaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUNvbnRleHRDYWlyby5oPgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotI2luY2x1
ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3Bh
Y2UgRXdrVmlld0NhbGxiYWNrczsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQ
YWdlR3JvdXAqIHBhZ2VHcm91cCkKLSAgICA6IG1fZXdrVmlldygwKQotICAgICwgbV9wYWdlKGNv
bnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFnZUdyb3VwKSkKLSAgICAsIG1fZm9jdXNlZChm
YWxzZSkKLSAgICAsIG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fY29udGVudFNjYWxlRmFjdG9y
KDEuMCkKLXsKLSAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKLSAgICBtX3BhZ2UtPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKLQotICAgIGNo
YXIqIGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01QT1NJ
VElOR19ERUJVR19WSVNVQUxTIik7Ci0gICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdW
aXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEi
KTsKLSAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGlu
Z0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotICAgIG1fcGFnZS0+cGFnZUdyb3Vw
KCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShz
aG93RGVidWdWaXN1YWxzKTsKLX0KLQotV2ViVmlldzo6fldlYlZpZXcoKQotewotICAgIGlmICht
X3BhZ2UtPmlzQ2xvc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y2xvc2Uo
KTsKLX0KLQotUGFzc1JlZlB0cjxXZWJWaWV3PiBXZWJWaWV3OjpjcmVhdGUoV2ViQ29udGV4dCog
Y29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJWaWV3KGNvbnRleHQsIHBhZ2VHcm91cCkpOwotfQotCi0vLyBGSVhNRTogUmVtb3Zl
IHdoZW4gcG9zc2libGUuCi12b2lkIFdlYlZpZXc6OnNldEV3a1ZpZXcoRXdrVmlldyogZXdrVmll
dykKLXsKLSAgICBtX2V3a1ZpZXcgPSBld2tWaWV3OwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQotICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhld2tWaWV3
LT5ldmFzT2JqZWN0KCkpOwotI2VuZGlmCi0KLX0KLQotdm9pZCBXZWJWaWV3Ojppbml0aWFsaXpl
KCkKLXsKLSAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7Ci0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0g
Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkpCi0gICAgICAgIHNjZW5lLT5zZXRBY3RpdmUodHJ1
ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCi17Ci0gICAgbV9zaXplID0gc2l6ZTsKLQotICAgIHVwZGF0ZVZpZXdwb3J0
U2l6ZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKQotewot
ICAgIGlmIChtX2ZvY3VzZWQgPT0gZm9jdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9m
b2N1c2VkID0gZm9jdXNlZDsKLSAgICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdl
UHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYg
KG1fdmlzaWJsZSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Zpc2libGUg
PSB2aXNpYmxlOwotICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6
Vmlld0lzVmlzaWJsZSk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0VXNlclZpZXdwb3J0VHJhbnNs
YXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0gICAgbV91c2VyVmlld3BvcnRUcmFuc2Zv
cm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSh0eCwgdHkpOwotfQotCi1JbnRQ
b2ludCBXZWJWaWV3Ojp1c2VyVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm0ubWFwUG9pbnQo
cG9pbnQpOwotfQotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBXZWJWaWV3
OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCi17Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOwotICAgIGlmICghc2NlbmUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGNsZWFuIHVwIHRo
aXMgY29kZSBhcyBpdCBpcyBzcGxpdCBvdmVyIENvb3JkR2Z4IGFuZCBQYWdlLgotICAgIHNjZW5l
LT5zZXREcmF3c0JhY2tncm91bmQobV9wYWdlLT5kcmF3c0JhY2tncm91bmQoKSk7Ci0gICAgY29u
c3QgRmxvYXRSZWN0JiB2aWV3cG9ydCA9IG1fdXNlclZpZXdwb3J0VHJhbnNmb3JtLm1hcFJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpKTsKLQotICAgIHNjZW5lLT5wYWludFRvQ3VycmVu
dEdMQ29udGV4dCh0cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAv
KiBvcGFjaXR5ICovIDEsIHZpZXdwb3J0KTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYlZpZXc6OnBh
aW50VG9DYWlyb1N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5l
ID0gY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci0gICAgaWYgKCFzY2VuZSkKLSAgICAgICAg
cmV0dXJuOwotI2VuZGlmCi0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gY29udGV4dChjYWlyb19j
cmVhdGUoc3VyZmFjZSkpOwotCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24gPSBjb250
ZW50UG9zaXRpb24oKTsKLSAgICBkb3VibGUgZWZmZWN0aXZlU2NhbGUgPSBtX3BhZ2UtPmRldmlj
ZVNjYWxlRmFjdG9yKCkgKiBjb250ZW50U2NhbGVGYWN0b3IoKTsKLQotICAgIGNhaXJvX21hdHJp
eF90IHRyYW5zZm9ybSA9IHsgZWZmZWN0aXZlU2NhbGUsIDAsIDAsIGVmZmVjdGl2ZVNjYWxlLCAt
IHBvc2l0aW9uLngoKSAqIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgLSBwb3NpdGlvbi55
KCkgKiBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkgfTsKLSAgICBjYWlyb19zZXRfbWF0cml4
KGNvbnRleHQuY3IoKSwgJnRyYW5zZm9ybSk7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotICAgIHNjZW5lLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KCZjb250ZXh0KTsKLSNlbmRpZgot
fQotCi1FdmFzX09iamVjdCogV2ViVmlldzo6ZXZhc09iamVjdCgpCi17Ci0gICAgcmV0dXJuIG1f
ZXdrVmlldy0+ZXZhc09iamVjdCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFRoZW1lUGF0aChj
b25zdCBTdHJpbmcmIHRoZW1lKQotewotICAgIG1fcGFnZS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpzZXREcmF3c0JhY2tncm91bmQoYm9vbCBkcmF3c0JhY2tncm91
bmQpCi17Ci0gICAgbV9wYWdlLT5zZXREcmF3c0JhY2tncm91bmQoZHJhd3NCYWNrZ3JvdW5kKTsK
LX0KLQotYm9vbCBXZWJWaWV3OjpkcmF3c0JhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVy
biBtX3BhZ2UtPmRyYXdzQmFja2dyb3VuZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldERyYXdz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kKQotewotICAg
IG1fcGFnZS0+c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQodHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKTsKLX0KLQotYm9vbCBXZWJWaWV3OjpkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KQotewotICAgIG1fcGFnZS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KQotewotICAgIG1fcGFnZS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsK
LX0KLQotdm9pZCBXZWJWaWV3OjpzZXRTaG93c0FzU291cmNlKGJvb2wgc2hvd3NBc1NvdXJjZSkK
LXsKLSAgICBtX3BhZ2UtPnNldE1haW5GcmFtZUluVmlld1NvdXJjZU1vZGUoc2hvd3NBc1NvdXJj
ZSk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6c2hvd3NBc1NvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcGFnZS0+bWFpbkZyYW1lSW5WaWV3U291cmNlTW9kZSgpOwotfQotCi0jaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotdm9pZCBXZWJWaWV3OjpleGl0RnVsbFNjcmVlbigpCi17Ci0gICAg
bV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKLX0K
LSNlbmRpZgotCi12b2lkIFdlYlZpZXc6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tWaWV3Q2xp
ZW50KiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwotfQotCi12
b2lkIFdlYlZpZXc6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplKQotewotICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSh0aGlzLCBzaXpl
KTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIFdlYlZpZXc6OnRyYW5zZm9ybUZyb21TY2VuZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHRyYW5zZm9ybVRvU2NlbmUoKS5pbnZlcnNlKCk7Ci19Ci0KLUFm
ZmluZVRyYW5zZm9ybSBXZWJWaWV3Ojp0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3QKLXsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsK
LQotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uID0gY29udGVudFBvc2l0aW9uKCk7Ci0g
ICAgdHJhbnNmb3JtLnNjYWxlKG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgtcG9zaXRpb24ueCgpLCAtcG9zaXRpb24ueSgpKTsKLSAgICB0cmFu
c2Zvcm0uc2NhbGUoY29udGVudFNjYWxlRmFjdG9yKCkpOwotCi0gICAgcmV0dXJuIHRyYW5zZm9y
bS50b0FmZmluZVRyYW5zZm9ybSgpOwotfQotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBXZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUoKQotewotICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5k
cmF3aW5nQXJlYSgpOwotICAgIGlmICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9z
dFByb3h5ID0gZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0g
ICAgaWYgKCFsYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIGxheWVyVHJlZUhvc3RQcm94eS0+Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBXZWJWaWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUoKQotewotICAgIGlmIChE
cmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkgewot
ICAgICAgICAvLyBXZWIgUHJvY2VzcyBleHBlY3RzIHNpemVzIGluIFVJIHVuaXRzLCBhbmQgbm90
IHJhdyBkZXZpY2UgdW5pdHMuCi0gICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKHJvdW5kZWRJ
bnRTaXplKGRpcFNpemUoKSksIEludFNpemUoKSwgSW50U2l6ZSgpKTsKLSAgICAgICAgZHJhd2lu
Z0FyZWEtPnNldFZpc2libGVDb250ZW50c1JlY3QoRmxvYXRSZWN0KGNvbnRlbnRQb3NpdGlvbigp
LCBkaXBTaXplKCkpLCBGbG9hdFBvaW50KCkpOwotICAgIH0KLX0KLQotaW5saW5lIFdlYkNvcmU6
OkZsb2F0U2l6ZSBXZWJWaWV3OjpkaXBTaXplKCkgY29uc3QKLXsKLSAgICBGbG9hdFNpemUgZGlw
U2l6ZShzaXplKCkpOwotICAgIGRpcFNpemUuc2NhbGUoMSAvIG1fcGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKSk7Ci0KLSAgICByZXR1cm4gZGlwU2l6ZTsKLX0KLQotLy8gUGFnZSBDbGllbnQKLQot
UGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBXZWJWaWV3OjpjcmVhdGVEcmF3aW5nQXJlYVBy
b3h5KCkKLXsKLSAgICBPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gZHJhd2luZ0FyZWEgPSBEcmF3
aW5nQXJlYVByb3h5SW1wbDo6Y3JlYXRlKHBhZ2UoKSk7Ci0gICAgcmV0dXJuIGRyYXdpbmdBcmVh
LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGFyZWEpCi17Ci0gICAgbV9jbGllbnQudmlld05lZWRzRGlzcGxh
eSh0aGlzLCBhcmVhKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaXNwbGF5VmlldygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzY3JvbGxWaWV3KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKQotewot
ICAgIHNldFZpZXdOZWVkc0Rpc3BsYXkoc2Nyb2xsUmVjdCk7Ci19Ci0KLVdlYkNvcmU6OkludFNp
emUgV2ViVmlldzo6dmlld1NpemUoKQotewotICAgIHJldHVybiByb3VuZGVkSW50U2l6ZShkaXBT
aXplKCkpOwotfQotCi1ib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3Ojpp
c1ZpZXdGb2N1c2VkKCkKLXsKLSAgICByZXR1cm4gaXNGb2N1c2VkKCk7Ci19Ci0KLWJvb2wgV2Vi
Vmlldzo6aXNWaWV3VmlzaWJsZSgpCi17Ci0gICAgcmV0dXJuIGlzVmlzaWJsZSgpOwotfQotCi1i
b29sIFdlYlZpZXc6OmlzVmlld0luV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgpCi17
Ci0gICAgbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQodGhpcywgbV9wYWdlLT51cmxBdFByb2Nl
c3NFeGl0KCkpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0g
ICAgbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKHRoaXMpOwotfQotCi12b2lkIFdlYlZp
ZXc6OnBhZ2VDbG9zZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
Vmlldzo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBuZXdUb29s
VGlwKQotewotICAgIG1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXAodGhpcywgbmV3VG9vbFRpcCk7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQotewot
ICAgIG1fZXdrVmlldy0+c2V0Q3Vyc29yKGN1cnNvcik7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0
Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2Vi
RWRpdENvbW1hbmRQcm94eT4gY29tbWFuZCwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9P
clJlZG8pCi17Ci0gICAgbV91bmRvQ29udHJvbGxlci5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1h
bmQsIHVuZG9PclJlZG8pOwotfQotCi12b2lkIFdlYlZpZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRz
KCkKLXsKLSAgICBtX3VuZG9Db250cm9sbGVyLmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci19Ci0K
LWJvb2wgV2ViVmlldzo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9P
clJlZG8pCi17Ci0gICAgcmV0dXJuIG1fdW5kb0NvbnRyb2xsZXIuY2FuVW5kb1JlZG8odW5kb09y
UmVkbyk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIG1fdW5kb0NvbnRyb2xsZXIuZXhlY3V0ZVVu
ZG9SZWRvKHVuZG9PclJlZG8pOwotfQotCi1JbnRQb2ludCBXZWJWaWV3OjpzY3JlZW5Ub1dpbmRv
dyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFJlY3QgV2ViVmlldzo6d2luZG93VG9TY3JlZW4oY29uc3Qg
SW50UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50UmVjdCgp
OwotfQotCi12b2lkIFdlYlZpZXc6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudCYsIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIFdlYlZpZXc6OmRvbmVXaXRoVG91Y2hFdmVudChjb25z
dCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCAvKndhc0V2ZW50SGFuZGxlZCovKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQ
cm94eT4gV2ViVmlldzo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQot
ewotICAgIHJldHVybiBXZWJQb3B1cE1lbnVMaXN0ZW5lckVmbDo6Y3JlYXRlKHBhZ2UpOwotfQot
Ci1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZUNvbnRleHRN
ZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQotewotICAgIHJldHVybiBXZWJDb250ZXh0TWVu
dVByb3h5RWZsOjpjcmVhdGUobV9ld2tWaWV3LCBwYWdlKTsKLX0KLQotI2lmIEVOQUJMRShJTlBV
VF9UWVBFX0NPTE9SKQotUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gV2ViVmlldzo6
Y3JlYXRlQ29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29s
b3ImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRv
cihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIFdlYlZp
ZXc6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYpCi17Ci0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUoKSkKLSAgICAgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAg
IGlmIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0gY29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKCkpCi0gICAgICAgIHNjZW5lLT5zZXRBY3RpdmUoZmFsc2UpOwotfQotI2VuZGlmCi0K
LXZvaWQgV2ViVmlldzo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJW
aWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2Um
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWRvdWJsZSBXZWJWaWV3OjpjdXN0b21S
ZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29t
RmFjdG9yKGRvdWJsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZp
ZXc6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8SW50UmVjdD4mKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZmluZFN0cmluZ0luQ3Vz
dG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6Y291bnRTdHJpbmdN
YXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywg
dW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojp1
cGRhdGVUZXh0SW5wdXRTdGF0ZSgpCi17Ci0gICAgSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1
dE1ldGhvZENvbnRleHQgPSBtX2V3a1ZpZXctPmlucHV0TWV0aG9kQ29udGV4dCgpOwotICAgIGlm
IChpbnB1dE1ldGhvZENvbnRleHQpCi0gICAgICAgIGlucHV0TWV0aG9kQ29udGV4dC0+dXBkYXRl
VGV4dElucHV0U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVl
c3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCi17Ci0gICAgRXdrQ29udGV4dCogY29udGV4dCA9
IG1fZXdrVmlldy0+ZXdrQ29udGV4dCgpOwotICAgIGNvbnRleHQtPmRvd25sb2FkTWFuYWdlcigp
LT5yZWdpc3RlckRvd25sb2FkSm9iKHRvQVBJKGRvd25sb2FkKSwgbV9ld2tWaWV3KTsKLX0KLQot
RmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYg
dXNlclJlY3QpCi17Ci0gICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAg
ICBGbG9hdFJlY3QgcmVzdWx0ID0gdXNlclJlY3Q7Ci0gICAgICAgIHJlc3VsdC5zY2FsZShtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICAvLyBMZWdhY3kgbW9kZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB1
c2VyUmVjdDsKLX0KLQotRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25z
dCBGbG9hdFJlY3QmIGRldmljZVJlY3QpCi17Ci0gICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlv
dXQoKSkgewotICAgICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gZGV2aWNlUmVjdDsKLSAgICAgICAg
cmVzdWx0LnNjYWxlKDEgLyBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAvLyBMZWdhY3kgbW9kZS4KLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBkZXZpY2VSZWN0OwotfQotCi12b2lkIFdlYlZpZXc6OmRpZENo
YW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMm
IGF0dHIpCi17Ci0gICAgbV9jbGllbnQuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRoaXMs
IGF0dHIpOwotfQotCi12b2lkIFdlYlZpZXc6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBGbG9hdFBvaW50IHVpUG9zaXRpb24ocG9zaXRpb24p
OwotICAgIHVpUG9zaXRpb24uc2NhbGUoY29udGVudFNjYWxlRmFjdG9yKCksIGNvbnRlbnRTY2Fs
ZUZhY3RvcigpKTsKLSAgICBzZXRDb250ZW50UG9zaXRpb24odWlQb3NpdGlvbik7Ci0KLSAgICBt
X2NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKTsKLX0KLQot
dm9pZCBXZWJWaWV3OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250
ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQotewotICAgIG1f
Y2xpZW50LmRpZFJlbmRlckZyYW1lKHRoaXMsIGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwot
fQotCi12b2lkIFdlYlZpZXc6OnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpCi17Ci0gICAg
bV9jbGllbnQuZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbih0aGlzKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
YlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTM3ZTZkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVmlld19oCi0jZGVmaW5l
IFdlYlZpZXdfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiRGVmYXVsdFVu
ZG9Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkNv
bnRleHQuaCIKLSNpbmNsdWRlICJXZWJHZW9tZXRyeS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2Vz
LmgiCi0jaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KLQotY2xhc3MgRXdrVmlldzsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBUeXBlZEFQSU9iamVjdDxBUElPYmplY3Q6OlR5
cGVWaWV3PiwgcHVibGljIFBhZ2VDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZp
ZXcoKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNyZWF0ZShXZWJDb250ZXh0
KiwgV2ViUGFnZUdyb3VwKik7Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUu
Ci0gICAgdm9pZCBzZXRFd2tWaWV3KEV3a1ZpZXcqKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZSgp
OwotCi0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAg
ICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQotICAgIHZvaWQg
c2V0Rm9jdXNlZChib29sKTsKLQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
bV92aXNpYmxlOyB9Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotCi0gICAgdm9pZCBzZXRD
b250ZW50U2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpIHsgbV9jb250ZW50U2NhbGVGYWN0
b3IgPSBzY2FsZUZhY3RvcjsgfQotICAgIGZsb2F0IGNvbnRlbnRTY2FsZUZhY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudFNjYWxlRmFjdG9yOyB9Ci0KLSAgICB2b2lkIHNldENvbnRlbnRQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX2NvbnRlbnRQ
b3NpdGlvbiA9IHBvc2l0aW9uOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgY29u
dGVudFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UG9zaXRpb247IH0KLQotICAg
IHZvaWQgc2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpOwot
ICAgIFdlYkNvcmU6OkludFBvaW50IHVzZXJWaWV3cG9ydFRvQ29udGVudHMoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKSBjb25zdDsKLQotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQo
KTsKLSAgICB2b2lkIHBhaW50VG9DYWlyb1N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90Kik7Ci0KLSAg
ICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fcGFnZS5nZXQoKSk7
IH0KLQotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wpOwotICAgIGJvb2wgZHJhd3NC
YWNrZ3JvdW5kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3Vu
ZChib29sKTsKLSAgICBib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgc3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0gICAgdm9pZCByZXN1bWVBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwotCi0gICAgdm9pZCBzZXRTaG93c0FzU291cmNlKGJv
b2wpOwotICAgIGJvb2wgc2hvd3NBc1NvdXJjZSgpIGNvbnN0OwotCi0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQotICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKLSNlbmRpZgotCi0gICAgLy8g
VmlldyBjbGllbnQuCi0gICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLVmlld0NsaWVu
dCopOwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgotICAgIEV2YXNfT2Jq
ZWN0KiBldmFzT2JqZWN0KCk7Ci0gICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9w
YWdlLmdldCgpOyB9Ci0KLSAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJik7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIGJlY29tZSBwcml2YXRlIHdo
ZW4gV2ViIEV2ZW50cyBjcmVhdGlvbiBpcyBtb3ZlZCB0byBXZWJWaWV3LgotICAgIFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdDsKLSAgICBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOwotICAgIFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7Ci0KLSAg
ICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBkaXBT
aXplKCkgY29uc3Q7Ci0gICAgLy8gUGFnZUNsaWVudAotICAgIFBhc3NPd25QdHI8RHJhd2luZ0Fy
ZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIE9WRVJSSURFOwotCi0gICAgdm9pZCBz
ZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKLQot
ICAgIHZvaWQgZGlzcGxheVZpZXcoKSBPVkVSUklERTsKLQotICAgIGJvb2wgY2FuU2Nyb2xsVmll
dygpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzY3JvbGxWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgT1ZFUlJJREU7Ci0K
LSAgICBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCkgT1ZFUlJJREU7Ci0KLSAgICBib29sIGlz
Vmlld1dpbmRvd0FjdGl2ZSgpIE9WRVJSSURFOwotICAgIGJvb2wgaXNWaWV3Rm9jdXNlZCgpIE9W
RVJSSURFOwotICAgIGJvb2wgaXNWaWV3VmlzaWJsZSgpIE9WRVJSSURFOwotICAgIGJvb2wgaXNW
aWV3SW5XaW5kb3coKSBPVkVSUklERTsKLQotICAgIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCkgT1ZF
UlJJREU7Ci0gICAgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKSBPVkVSUklERTsKLSAgICB2b2lk
IHBhZ2VDbG9zZWQoKSBPVkVSUklERTsKLQotICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIHBhZ2VEaWRSZXF1
ZXN0U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7Ci0gICAgdm9pZCBk
aWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KSBPVkVSUklERTsKLSAgICB2b2lkIHBhZ2VU
cmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpIE9WRVJSSURFOwotCi0gICAgdm9pZCBzZXRDdXJzb3Io
Y29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgT1ZFUlJJREU7Ci0gICAgdm9pZCBzZXRDdXJzb3JIaWRk
ZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGRpZENoYW5nZVZp
ZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBPVkVS
UklERTsKLQotICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRD
b21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIE9WRVJSSURFOwotICAgIHZv
aWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBPVkVSUklERTsKLSAgICBib29sIGNhblVuZG9SZWRv
KFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7Ci0gICAgdm9pZCBleGVjdXRlVW5k
b1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVSUklERTsKLQotICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBPVkVSUklERTsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIFdlYkNvcmU6OkludFBvaW50
IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7Ci0gICAg
V2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
T1ZFUlJJREU7Ci0KLSAgICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgT1ZFUlJJREU7Ci0K
LSAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgT1ZFUlJJREU7
Ci0KLSAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYsIGJvb2wpIE9WRVJSSURFOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdm9pZCBk
b25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZl
bnRIYW5kbGVkKSBPVkVSUklERTsKLSNlbmRpZgotCi0gICAgUGFzc1JlZlB0cjxXZWJQb3B1cE1l
bnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJREU7Ci0g
ICAgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5
KFdlYlBhZ2VQcm94eSopIE9WRVJSSURFOwotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQot
ICAgIFBhc3NSZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IGNyZWF0ZUNvbG9yQ2hvb3NlclBy
b3h5KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRG
aW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpIE9WRVJS
SURFOwotCi0gICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmKSBPVkVSUklERTsKLSAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpIE9WRVJSSURFOwotICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIE9WRVJSSURFOwotCi0gICAgdm9pZCBk
aWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wpIE9WRVJSSURFOwotICAgIHZvaWQgZGlkRmlu
aXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25z
dCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgT1ZFUlJJREU7Ci0KLSAgICBkb3VibGUgY3VzdG9t
UmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCkgT1ZFUlJJREU7Ci0gICAgdm9pZCBzZXRDdXN0b21S
ZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKSBPVkVSUklERTsKLQotICAgIHZvaWQgZmxh
c2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYpIE9W
RVJSSURFOwotICAgIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKSBPVkVSUklERTsKLSAgICB2b2lkIGNvdW50
U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9w
dGlvbnMsIHVuc2lnbmVkKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3Q2xpZW50
IG1fY2xpZW50OwotICAgIEV3a1ZpZXcqIG1fZXdrVmlldzsKLSAgICBSZWZQdHI8V2ViUGFnZVBy
b3h5PiBtX3BhZ2U7Ci0gICAgRGVmYXVsdFVuZG9Db250cm9sbGVyIG1fdW5kb0NvbnRyb2xsZXI7
Ci0gICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbV91c2VyVmlld3BvcnRUcmFuc2Zv
cm07Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7IC8vIFNpemUgaW4gZGV2aWNlIHVuaXRz
LgotICAgIGJvb2wgbV9mb2N1c2VkOwotICAgIGJvb2wgbV92aXNpYmxlOwotICAgIGZsb2F0IG1f
Y29udGVudFNjYWxlRmFjdG9yOwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9jb250ZW50UG9z
aXRpb247IC8vIFBvc2l0aW9uIGluIFVJIHVuaXRzLgotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwZmQxZGM1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldlYlZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJWaWV3cG9ydEF0dHJpYnV0ZXMuaCIK
LQotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldLQmFzZS5oIgotI2luY2x1ZGUg
IldLUmV0YWluUHRyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotdm9pZCBXZWJWaWV3Q2xpZW50Ojp2aWV3TmVlZHNEaXNwbGF5KFdlYlZpZXcq
IHZpZXcsIGNvbnN0IEludFJlY3QmIGFyZWEpCi17Ci0gICAgaWYgKCFtX2NsaWVudC52aWV3TmVl
ZHNEaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC52aWV3TmVlZHNEaXNw
bGF5KHRvQVBJKHZpZXcpLCB0b0FQSShhcmVhKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0K
LXZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYlZpZXcqIHZpZXcs
IGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VDb250
ZW50c1NpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRl
bnRzU2l6ZSh0b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSksIG1fY2xpZW50LmNsaWVudEluZm8pOwot
fQotCi12b2lkIFdlYlZpZXdDbGllbnQ6OndlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqIHZpZXcs
IGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNo
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LndlYlByb2Nlc3NDcmFzaGVkKHRv
QVBJKHZpZXcpLCBhZG9wdFdLKHRvQ29waWVkVVJMQVBJKHVybCkpLmdldCgpLCBtX2NsaWVudC5j
bGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xpZW50Ojp3ZWJQcm9jZXNzRGlkUmVsYXVu
Y2goV2ViVmlldyogdmlldykKLXsKLSAgICBpZiAoIW1fY2xpZW50LndlYlByb2Nlc3NEaWRSZWxh
dW5jaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1
bmNoKHRvQVBJKHZpZXcpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3
Q2xpZW50OjpkaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZUNv
bnRlbnRzUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENoYW5n
ZUNvbnRlbnRzUG9zaXRpb24odG9BUEkodmlldyksIHRvQVBJKHBvaW50KSwgbV9jbGllbnQuY2xp
ZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVmlld0NsaWVudDo6ZGlkUmVuZGVyRnJhbWUoV2ViVmll
dyogdmlldywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY292ZXJlZFJlY3QpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQuZGlkUmVuZGVyRnJhbWUodG9BUEkodmll
dyksIHRvQVBJKHNpemUpLCB0b0FQSShjb3ZlcmVkUmVjdCksIG1fY2xpZW50LmNsaWVudEluZm8p
OwotfQotCi12b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oV2Vi
VmlldyogdmlldykKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRp
b24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5z
aXRpb24odG9BUEkodmlldyksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlZp
ZXdDbGllbnQ6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJWaWV3KiB2aWV3LCBjb25z
dCBWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5k
aWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLUmV0
YWluUHRyPFdLVmlld3BvcnRBdHRyaWJ1dGVzUmVmPiB3a0F0dHJpYnV0ZXMgPSBhZG9wdFdLKHRv
QVBJKFdlYlZpZXdwb3J0QXR0cmlidXRlczo6Y3JlYXRlKGF0dHJpYnV0ZXMpLmxlYWtSZWYoKSkp
OwotICAgIG1fY2xpZW50LmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyh0b0FQSSh2aWV3KSwg
d2tBdHRyaWJ1dGVzLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJW
aWV3Q2xpZW50OjpkaWRDaGFuZ2VUb29sdGlwKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFN0cmluZyYg
dG9vbHRpcCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXApCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXAodG9BUEkodmlldyksIGFk
b3B0V0sodG9Db3BpZWRBUEkodG9vbHRpcCkpLmdldCgpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViVmlld0NsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjE4NmRm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVu
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJT
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBXZWJWaWV3Q2xpZW50X2gKLSNkZWZpbmUgV2ViVmlld0NsaWVudF9oCi0KLSNpbmNs
dWRlICJBUElDbGllbnQuaCIKLSNpbmNsdWRlICJXS1ZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UG9pbnQ7Ci1j
bGFzcyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFZpZXdwb3J0QXR0cmlidXRlczsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlZpZXc7Ci0KLWNsYXNzIFdlYlZp
ZXdDbGllbnQ6IHB1YmxpYyBBUElDbGllbnQ8V0tWaWV3Q2xpZW50LCBrV0tWaWV3Q2xpZW50Q3Vy
cmVudFZlcnNpb24+IHsKLXB1YmxpYzoKLSAgICB2b2lkIHZpZXdOZWVkc0Rpc3BsYXkoV2ViVmll
dyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRz
U2l6ZShXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgd2ViUHJv
Y2Vzc0NyYXNoZWQoV2ViVmlldyosIGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHdlYlBy
b2Nlc3NEaWRSZWxhdW5jaChXZWJWaWV3Kik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1Bv
c2l0aW9uKFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZvaWQgZGlk
UmVuZGVyRnJhbWUoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBkaWRDb21wbGV0ZVBhZ2VUcmFuc2l0aW9uKFdlYlZp
ZXcqKTsKLSAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJWaWV3KiwgY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VUb29s
dGlwKFdlYlZpZXcqLCBjb25zdCBTdHJpbmcmIHRvb2x0aXApOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJWaWV3Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmUwMGYwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlZpZXdFZmwuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld0VmbC5oIgorCisjaW5j
bHVkZSAiRG93bmxvYWRNYW5hZ2VyRWZsLmgiCisjaW5jbHVkZSAiRXdrVmlldy5oIgorI2luY2x1
ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJv
eHlFZmwuaCIKKyNpbmNsdWRlICJXZWJQb3B1cE1lbnVMaXN0ZW5lckVmbC5oIgorI2luY2x1ZGUg
ImV3a19jb250ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4K
KworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEV3a1ZpZXdDYWxsYmFja3M7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NS
ZWZQdHI8V2ViVmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBh
Z2VHcm91cCogcGFnZUdyb3VwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlld0Vm
bChjb250ZXh0LCBwYWdlR3JvdXApKTsKK30KKworV2ViVmlld0VmbDo6V2ViVmlld0VmbChXZWJD
b250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IFdlYlZpZXco
Y29udGV4dCwgcGFnZUdyb3VwKQorICAgICwgbV9ld2tWaWV3KDApCit7Cit9CisKK3ZvaWQgV2Vi
Vmlld0VmbDo6c2V0RXdrVmlldyhFd2tWaWV3KiBld2tWaWV3KQoreworICAgIG1fZXdrVmlldyA9
IGV3a1ZpZXc7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV9wYWdlLT5mdWxs
U2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3a1ZpZXctPmV2YXNPYmplY3QoKSk7CisjZW5k
aWYKK30KKwordm9pZCBXZWJWaWV3RWZsOjpwYWludFRvQ2Fpcm9TdXJmYWNlKGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSkKK3sKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0g
Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CisgICAgaWYgKCFzY2VuZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gY29udGV4dChjYWlyb19jcmVhdGUoc3Vy
ZmFjZSkpOworCisgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24gPSBjb250ZW50UG9zaXRp
b24oKTsKKyAgICBkb3VibGUgZWZmZWN0aXZlU2NhbGUgPSBtX3BhZ2UtPmRldmljZVNjYWxlRmFj
dG9yKCkgKiBjb250ZW50U2NhbGVGYWN0b3IoKTsKKworICAgIGNhaXJvX21hdHJpeF90IHRyYW5z
Zm9ybSA9IHsgZWZmZWN0aXZlU2NhbGUsIDAsIDAsIGVmZmVjdGl2ZVNjYWxlLCAtIHBvc2l0aW9u
LngoKSAqIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgLSBwb3NpdGlvbi55KCkgKiBtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCkgfTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQu
Y3IoKSwgJnRyYW5zZm9ybSk7CisgICAgc2NlbmUtPnBhaW50VG9HcmFwaGljc0NvbnRleHQoJmNv
bnRleHQpOworfQorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBXZWJWaWV3RWZsOjpj
cmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgcmV0dXJuIFdl
YlBvcHVwTWVudUxpc3RlbmVyRWZsOjpjcmVhdGUocGFnZSk7Cit9CisKK1Bhc3NSZWZQdHI8V2Vi
Q29udGV4dE1lbnVQcm94eT4gV2ViVmlld0VmbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQ
YWdlUHJveHkqIHBhZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlFZmw6OmNy
ZWF0ZShtX2V3a1ZpZXcsIHBhZ2UpOworfQorCit2b2lkIFdlYlZpZXdFZmw6OnNldEN1cnNvcihj
b25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBtX2V3a1ZpZXctPnNldEN1cnNvcihjdXJzb3Ip
OworfQorCit2b2lkIFdlYlZpZXdFZmw6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKK3sKKyAgICBp
ZiAoSW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQgPSBtX2V3a1ZpZXct
PmlucHV0TWV0aG9kQ29udGV4dCgpKQorICAgICAgICBpbnB1dE1ldGhvZENvbnRleHQtPnVwZGF0
ZVRleHRJbnB1dFN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViVmlld0VmbDo6aGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQoreworICAgIEV3a0NvbnRleHQqIGNvbnRl
eHQgPSBtX2V3a1ZpZXctPmV3a0NvbnRleHQoKTsKKyAgICBjb250ZXh0LT5kb3dubG9hZE1hbmFn
ZXIoKS0+cmVnaXN0ZXJEb3dubG9hZEpvYih0b0FQSShkb3dubG9hZCksIG1fZXdrVmlldyk7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYlZpZXdFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViVmlld0VmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTdlZjMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdF
ZmwuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZp
ZXdFZmxfaAorI2RlZmluZSBXZWJWaWV3RWZsX2gKKworI2luY2x1ZGUgIldlYlZpZXcuaCIKKwor
Y2xhc3MgRXdrVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlZpZXdFZmwg
OiBwdWJsaWMgV2ViVmlldyB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRFd2tWaWV3KEV3a1ZpZXcq
KTsKKyAgICBFd2tWaWV3KiBld2tWaWV3KCkgeyByZXR1cm4gbV9ld2tWaWV3OyB9CisKKyAgICB2
b2lkIHBhaW50VG9DYWlyb1N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90Kik7CisKK3ByaXZhdGU6Cisg
ICAgV2ViVmlld0VmbChXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisKKyAgICB2b2lkIHNl
dEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSBPVkVSUklERTsKKyAgICBQYXNzUmVmUHRy
PFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBP
VkVSUklERTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRl
eHRNZW51UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJREU7CisgICAgdm9pZCB1cGRhdGVUZXh0
SW5wdXRTdGF0ZSgpIE9WRVJSSURFOworICAgIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERv
d25sb2FkUHJveHkqKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBFd2tWaWV3KiBtX2V3a1Zp
ZXc7CisKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViVmlld0VmbF9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGM3N2E1OS4uZmQxZmIxOCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDEzLTA0LTIxICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwu
Y29tPgorCisgICAgICAgIFtXSzJdIE1ha2UgRUZMIFdLVmlldyBBUEkgc2hhcmVhYmxlIGJldHdl
ZW4gcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNDczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwOgorCisgICAgICAgICAgICBVcGRhdGVk
IHByb2plY3QgZmlsZXMgYWNjb3JkaW5nbHkgdG8gdXBkYXRlZCBXS1ZpZXcgQVBJIGZpbGVzCisg
ICAgICAgICAgICBzdHJ1Y3R1cmUuCisKIDIwMTMtMDQtMTggIFh1ZWZlaSBSZW4gIDx4cmVuQGJs
YWNrYmVycnkuY29tPgogCiAgICAgICAgIHJlbW92ZSBidWlsZCB3YXJuaW5nKHVudXNlZCBwYXJh
bWV0ZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtl
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiNDhiMDA0Li41
YjVjNTM3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtRWZsLmNtYWtl
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTExLDYgKzEx
LDcgQEAgYWRkX2N1c3RvbV90YXJnZXQoZm9yd2FyZGluZy1oZWFkZXJzU291cEZvclRlc3RXZWJL
aXRBUEkKIHNldChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNGb3JUZXN0V2ViS2l0QVBJX05BTUUg
Zm9yd2FyZGluZy1oZWFkZXJzU291cEZvclRlc3RXZWJLaXRBUEkpCiAKIGluY2x1ZGVfZGlyZWN0
b3JpZXMoCisgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9DL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0Mvc291cAogICAgICR7V0VC
S0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvQy9lZmwKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZv
cm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2Vi
Vmlld0VmbC5jcHAKaW5kZXggYTRlYjA3YS4uMWJmNjU3OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8u
aD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgorI2luY2x1ZGUgPFdlYktpdDIv
V0tWaWV3RWZsLmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>